Date: 2026-03-27
Scope: README.md, docs/, ../atmosphere.github.io/docs
Constraint: Analysis and proposal only — no code changes
Atmosphere's documentation is close to publication quality. Feature claims are substantively accurate — the code delivers what it promises. But the docs have real issues that must be fixed before publishing on ai4jvm:
docs/protocols.mduses@McpServer— an annotation that does not exist. The correct pattern is@Agentwith MCP method annotations.- README says "Pick any LLM library" — should enumerate the 5 supported adapters.
- README lists
spring-boot-embabel-chatsample — it's commented out of the build (pom.xml:541) and the directorysamples/spring-boot-embabel-chat/doesn't exist. - Planned-but-unimplemented features in skill-files (channels routing validation, guardrails metadata export) are not surfaced in the README.
- Missing reference docs for
@Agent,@Coordinator, and configuration. - No docs governance: two doc trees (
docs/andatmosphere.github.io/docs) with no declared relationship.
| Property | Value |
|---|---|
| Root POM Version | 4.0.28-SNAPSHOT |
| Java | JDK 21+ (--release 21) |
| Jakarta EE | 10 (Servlet 6.0, WebSocket 2.1) |
| Virtual Threads | Enabled by default (org.atmosphere.useVirtualThreads, configurable) |
| Maven | 3.6.3+ |
Core:
| Module | ArtifactId | Purpose |
|---|---|---|
| cpr | atmosphere-runtime |
Transport abstraction, Broadcaster pub/sub, Room API, presence |
| agent | atmosphere-agent |
@Agent processor, CommandRouter, SkillFileParser |
| ai | atmosphere-ai |
AI/LLM streaming SPI, StreamingSession, @Prompt, @AiTool |
| ai-test | atmosphere-ai-test |
Test fixtures for AI agents |
| coordinator | atmosphere-coordinator |
@Coordinator, @Fleet, AgentFleet, journal, evaluation |
AI Backends (AgentRuntime SPI) — these are the supported adapters:
| Module | ArtifactId | Backend | Version |
|---|---|---|---|
| (built-in) | atmosphere-ai |
OpenAI-compatible (Gemini, OpenAI, Ollama) | — |
| spring-ai | atmosphere-spring-ai |
Spring AI ChatClient |
2.0.0-M2 |
| langchain4j | atmosphere-langchain4j |
LangChain4j StreamingChatModel |
1.12.2 |
| adk | atmosphere-adk |
Google ADK LlmAgent |
0.2.0 |
| embabel | atmosphere-embabel |
Embabel GOAP planning | 0.3.4 |
Protocols (auto-registered via classpath):
| Module | ArtifactId | Protocol | Endpoint |
|---|---|---|---|
| mcp | atmosphere-mcp |
MCP | /atmosphere/agent/{name}/mcp |
| a2a | atmosphere-a2a |
A2A (JSON-RPC 2.0) | /atmosphere/agent/{name}/a2a |
| agui | atmosphere-agui |
AG-UI (SSE) | /atmosphere/agent/{name}/agui |
Channels:
| Module | ArtifactId | Platforms |
|---|---|---|
| channels | atmosphere-channels |
Slack, Telegram, Discord, WhatsApp, Messenger |
Framework Integration:
| Module | ArtifactId | Target |
|---|---|---|
| spring-boot-starter | atmosphere-spring-boot-starter |
Spring Boot 4.0.2+ |
| spring-boot3-starter | atmosphere-spring-boot3-starter |
Spring Boot 3.x |
| quarkus-extension | atmosphere-quarkus-extension |
Quarkus 3.31.3+ |
Clustering and Sessions:
| Module | ArtifactId | Backend |
|---|---|---|
| redis | atmosphere-redis |
Lettuce 6.5.5 |
| kafka | atmosphere-kafka |
Kafka 3.9.1 |
| durable-sessions | atmosphere-durable-sessions |
SPI (in-memory default) |
| durable-sessions-sqlite | atmosphere-durable-sessions-sqlite |
SQLite |
| durable-sessions-redis | atmosphere-durable-sessions-redis |
Redis |
Other:
| Module | Purpose |
|---|---|
grpc (atmosphere-grpc) |
gRPC transport (gRPC 1.79.0) |
kotlin (atmosphere-kotlin) |
Kotlin DSL, coroutines (Kotlin 2.1.10) |
| protocol-common | Shared protocol base classes |
| wasync | Java async WebSocket client |
rag (atmosphere-rag) |
RAG context providers (Spring AI VectorStore, LangChain4j EmbeddingStore) |
| Dependency | Version |
|---|---|
| Jetty | 12.0.32 |
| Tomcat | 11.0.18 |
| Spring Boot | 4.0.2 |
| Quarkus | 3.31.3 |
| Jackson | 2.18.6 |
Severity: P0
docs/protocols.md:18 shows:
@McpServer(name = "my-tools", path = "/atmosphere/mcp")
public class MyTools { ... }This annotation does not exist. The directory modules/mcp/src/main/java/org/atmosphere/mcp/annotation/ contains only: McpParam.java, McpPrompt.java, McpResource.java, McpTool.java. No McpServer.java.
The correct pattern (from the working sample samples/spring-boot-mcp-server/):
@Agent(name = "atmosphere-demo", version = "1.0.0", endpoint = "/atmosphere/mcp", headless = true)
public class DemoMcpServer {
@McpTool(name = "greet", description = "Say hello")
public String greet(@McpParam(name = "name") String name) { ... }
}MCP is auto-registered when atmosphere-mcp is on the classpath. modules/mcp/README.md confirms this.
Fix: Update docs/protocols.md to use @Agent. Remove all @McpServer references from docs.
Severity: P0
README.md:9: "Pick any LLM library."
Atmosphere supports 5 specific backends via the AgentRuntime SPI: built-in (OpenAI-compatible), Spring AI, LangChain4j, Google ADK, Embabel. It does not support arbitrary LLM libraries — you need an adapter.
Fix: Replace with "Supports 5 AI backends" and list them explicitly.
Severity: P0
pom.xml:541 has samples/spring-boot-embabel-chat commented out with: "Embabel requires Spring Boot 3.5; will be supported when SB 3.5 module lands." The samples/spring-boot-embabel-chat/ directory does not exist. But the README sample table and current docs reference it.
Fix: Remove from README sample table or mark clearly as "not yet available."
Severity: P0
docs/skill-files.md:29: Channels section — "routing validation is planned but not yet implemented."
docs/skill-files.md:30: Guardrails section — "Protocol metadata export is planned but not yet implemented."
README shows skill files with ## Channels and ## Guardrails sections as working features without noting these limitations.
Fix: Add caveat in README skill-files section, or note in a Limitations section.
Severity: P1
docs/channels.md:36: "natural-language messages go to the first agent with a pipeline; only command routing supports multi-agent dispatch."
This is documented in channels.md but not in the README. Users with multiple agents will hit this silently.
Fix: Add to README limitations or channels section.
Severity: P0
The README has no <dependency> block. A developer's first question — "how do I add this to my project?" — goes unanswered.
Fix: Add Maven/Gradle coordinates after the intro, before code examples.
Severity: P1
The version (4.0.x) appears nowhere in the README.
Fix: State in requirements section.
Severity: P1
- "The real-time infrastructure layer for Java AI agents" — tagline
- "Why not use Spring AI / LangChain4j / ADK directly?" — sales pitch
- Bullet list reads like a pitch deck
Fix: Rewrite with dev tone. State what it does. Drop rhetorical questions.
Two documentation trees exist with no declared relationship:
atmosphere/docs/— 4 reference files (annotations, channels, protocols, skill-files). Lives in the main repo, versioned with the code.atmosphere.github.io/docs/— 21 pages covering core, integrations, clients, infrastructure. Separate repo, Astro-based static site.
They overlap on MCP/A2A/AG-UI (protocols.md exists in both) with different content. This causes drift — the @McpServer bug exists in docs/protocols.md but not in the working sample.
atmosphere/docs/ is the canonical source for reference documentation. It ships with the code and stays in sync with annotations, SPIs, and behavior changes.
atmosphere.github.io/docs/ is the publish target for guides, tutorials, and integration deep-dives. It may link to canonical docs but should not duplicate reference material.
When both trees cover the same topic, the in-repo docs/ version is authoritative. Published docs should link to it or be generated from it.
| File | Quality | Notes |
|---|---|---|
annotations.md |
Excellent | Complete, accurate reference for all annotations |
protocols.md |
Has bug | Uses non-existent @McpServer. Otherwise good structure. |
channels.md |
Good | Includes known limitations |
skill-files.md |
Good | Honestly marks planned features |
| File | Content needed |
|---|---|
agent.md |
@Agent lifecycle, headless vs full-stack, classpath wiring, endpoint paths |
coordinator.md |
@Coordinator, @Fleet, AgentFleet API, journal SPI, evaluation SPI, test stubs |
configuration.md |
All env vars, init-params, Spring Boot/Quarkus properties in one place |
The README.md index doesn't list: Agent module, Coordinator, Channels, A2A protocol, AG-UI protocol.
21 pages covering core, Spring Boot, Quarkus, AI adapters, MCP, gRPC, clients, Redis, Kafka, durable sessions, Kotlin, observability, React Native, What's New. Quality is consistently good.
| Page | Content |
|---|---|
agent.md |
@Agent deep dive |
coordinator.md |
Multi-agent orchestration |
channels.md |
Multi-channel routing, platform setup |
a2a.md |
A2A protocol, Agent Card, TaskContext |
agui.md |
AG-UI streaming, CopilotKit compat |
| Category | Sample | Stack |
|---|---|---|
| Chat | spring-boot-chat |
Spring Boot 4.0 |
| Chat | quarkus-chat |
Quarkus 3.21+ |
| Chat | embedded-jetty-websocket-chat |
Embedded Jetty |
| Chat | grpc-chat |
gRPC + Spring Boot |
| Chat | chat |
Servlet WAR |
| AI | spring-boot-ai-chat |
Built-in (Gemini/OpenAI/Ollama) |
| AI | spring-boot-langchain4j-chat |
LangChain4j |
| AI | spring-boot-spring-ai-chat |
Spring AI |
| AI | spring-boot-adk-chat |
Google ADK |
| AI | spring-boot-langchain4j-tools |
LangChain4j + @Tool |
| AI | spring-boot-ai-tools |
LangChain4j + @AiTool |
| AI | spring-boot-adk-tools |
ADK + @AiTool |
| AI | spring-boot-ai-classroom |
Multi-persona, Expo RN |
| Agent | spring-boot-agent-chat |
@Agent + commands |
| Agent | spring-boot-dentist-agent |
@Agent + Slack + Telegram |
| Protocol | spring-boot-mcp-server |
MCP |
| Protocol | spring-boot-a2a-agent |
A2A |
| Protocol | spring-boot-agui-chat |
AG-UI |
| Multi-Agent | spring-boot-multi-agent-startup-team |
@Coordinator + @Fleet |
| Infra | spring-boot-durable-sessions |
SQLite/Redis sessions |
| Infra | spring-boot-otel-chat |
OpenTelemetry |
| Infra | spring-boot-channels-chat |
Multi-channel |
| Sample | Status | Reason |
|---|---|---|
spring-boot-embabel-chat |
Commented out of build | Requires Spring Boot 3.5 compat work |
| Claim | Status | Notes |
|---|---|---|
| Transport-agnostic runtime | Verified | WebSocket, SSE, Long-polling, gRPC all implemented |
@Agent auto-wires protocols by classpath |
Verified | MCP, A2A, AG-UI auto-registered |
| Same agent on Web, Slack, Telegram, Discord | Verified | atmosphere-channels routes cross-platform |
@Coordinator manages agent fleet |
Verified | Sequential, parallel, local/remote dispatch |
| Skill files as Markdown with YAML frontmatter | Verified | With caveats: channels routing and guardrails export are planned |
| Switch backends by changing one dependency | Verified | AgentRuntime SPI with 5 adapters |
| Durable sessions survive restarts | Verified | SQLite + Redis implementations |
| Native image support | Verified | Spring Boot GraalVM hints, Quarkus build-time processing |
| "Pick any LLM library" | Overstated | 5 specific adapters, not arbitrary libraries |
@McpServer annotation |
Does not exist | docs/protocols.md:18 uses it; modules/mcp/src/main/java/org/atmosphere/mcp/annotation/ has no McpServer.java; sample uses @Agent |
| Embabel sample | Not buildable | Commented out at pom.xml:541; samples/spring-boot-embabel-chat/ does not exist |
- Fix
@McpServerindocs/protocols.md— Replace with@Agentpattern matching the working sample - README rewrite — Dev tone, Maven coordinates first, version stated, explicit adapter list (not "any"), limitations section
- Fix embabel sample listing — Remove from README table or mark as unavailable
- Surface planned limitations — Skill-file channels routing and guardrails export caveats
- Create
docs/agent.md— @Agent reference doc - Create
docs/coordinator.md— @Coordinator reference doc - Create
docs/configuration.md— All env vars and config in one place - Update
atmosphere.github.io/docs/index — Add missing sections - Create new pages in
atmosphere.github.io/docs/— agent, coordinator, channels, a2a, agui - Add multi-agent NL routing caveat to README
- State version in README
- Clarify virtual threads — Document the config key and behavior in configuration.md
- ai4jvm SPEC.md entry — Can be done independently
- Docs governance — Declare canonical source vs publish target, consider CI drift check
- Expand Redis/Kafka docs — More examples
Under "Agent Frameworks and Libraries" in SPEC.md:
### Atmosphere
- **Badge:** Framework
- **Description:** Transport-agnostic agent runtime for Java 21+. Annotate a class
with @Agent and the framework exposes it via WebSocket, SSE, gRPC, MCP, A2A, and
AG-UI based on which modules are on the classpath. Pluggable AI backends: Spring AI,
LangChain4j, Google ADK, Embabel. Runs on Spring Boot 4.0 or Quarkus 3.21+.
- **Links:** [Docs](https://atmosphere.github.io/docs/) ·
[GitHub](https://github.com/Atmosphere/atmosphere)
# Atmosphere
Transport-agnostic agent runtime for Java 21+.
## Requirements
## Install (Maven/Gradle)
## Minimal Example (@Agent that compiles)
## @Agent — Classpath-Driven Wiring (table)
## @Coordinator — Multi-Agent Orchestration
## Transports (table)
## Protocols — MCP, A2A, AG-UI (table)
## Channels (table)
## AI Backends (table, explicit list)
## Skills
## Client — atmosphere.js
## Annotation Compatibility (table)
## Samples (table, with availability status)
## CLI
## Known Limitations
## Documentation (links)
## License
Style: No rhetorical questions. No superlatives. Tables for feature matrices. Every claim verifiable by code or sample.
All of the following must be true before publishing on ai4jvm:
-
docs/protocols.md— no reference to@McpServer; MCP example uses@Agentwith@McpTool/@McpResource/@McpPrompt -
README.md— contains Maven<dependency>coordinates foratmosphere-spring-boot-starterandatmosphere-agent -
README.md— states version (4.0.x) in requirements section -
README.md— lists the 5 supported AI backends by name; no "any LLM library" language -
README.md—spring-boot-embabel-chateither removed from sample table or marked "not yet available" -
README.md— skill-files section notes that channels routing validation and guardrails metadata export are planned -
README.md— has a "Known Limitations" section covering: first-agent NL routing, channel AiInterceptor gap, Quarkus loadOnStartup constraint -
README.md— no rhetorical questions, no sales pitch sections, no superlatives - All code examples in README compile against the actual annotation set (spot-check imports)
-
docs/protocols.mdMCP example matchessamples/spring-boot-mcp-server/source