LangChain4j 1.20.2 (2026-09-28) focuses on Agent-to-Agent (A2A) client fixes: tenant() on A2AClientInstance/A2AClientBuilder, @A2AClientAgent(tenant=…) auto-attaches tenant on every MessageSendParams (or parses it from /.well-known/{tenant}/agent-card.json), and filters tenant method args so they are not exposed as LLM tool parameters. AgenticScope/ResultWithAgenticScope toString guards against circular refs.

Key Takeaways

  • ✓Shipped 1.20.2 — A2A tenant auto-propagation via annotation/builder or Agent Card URL
  • ✓Tenant args filtered from LLM tool surface; attached on MessageSendParams
  • ✓AgenticScope toString circular-ref guard
  • ✓Docs: a2a-protocol.org + docs.langchain4j.info/tutorials/agents
🧭

Finished reading? Explore benchmark rankings & pricing

Real-world SWE-bench scores & $20/mo vs API cost break-even calculator

🔬

In-Depth Technical Analysis

Core Background & Industry Pain Points

Multi-tenant platforms using A2A need tenant IDs on every message without exposing them as LLM tool args. Prior clients lacked a first-class tenant injection point.

Architecture Highlights & Internals

1.20.2 (#6512) adds tenant() on A2AClientInstance/A2AClientBuilder and @A2AClientAgent(tenant=…). Non-empty tenants attach to each MessageSendParams; empty falls back to /.well-known/{tenant}/agent-card.json. @A2ATenantId params are filtered from the LLM tool surface. AgenticScope toString guards circular refs.

Authoritative Benchmarks & Measured Scores

Correctness patch—no SWE-bench/latency table. Validate tenant headers on the wire, absence from tool schemas, and finite toString. Many of the 125 touched files are version bumps across modules.

Developer Hands-on Guide

Upgrade to langchain4j:1.20.2 (agentic 1.20.2-beta30). Set tenant on annotation/builder or publish Agent Cards under tenant well-known paths. See Agents tutorial and A2A.