Working draft. Secret gist. Iterated with ChefFamille.
Date: 2026-04-14 Status: v0.3 — all design questions resolved, timeline corrected to reality (hours, not months), architecture bet de-risked via reflection-based federation. Ready to execute. Predecessors: v0.1 · v0.2
Atmosphere is the Java platform layer for personal agents. Pick any of the seven runtimes (Spring AI, LangChain4j, Google ADK, Koog, Semantic Kernel, Embabel, Built-in), write a skill file, inherit memory, identity, multi-channel continuity, auditable permissions, MCP / A2A / AG-UI endpoints, and durable streaming.
You don't pick Atmosphere instead of your framework. You pick Atmosphere on top of it.
| # | Question | v0.3 decision |
|---|---|---|
| Memory trigger | Auto-memory strategy | Configurable via pluggable AutoMemoryStrategy SPI — built-ins: EveryTurn, EveryNTurns, LlmDecided, Hybrid. User picks in skill file or .agent/atmosphere/memory.yaml. |
| Memory storage | Greenfield vs federation | Hybrid — Atmosphere owns facts / working memory / hierarchical rules (runtimes have no concept of these); conversation history is read from the runtime's own storage via reflection-discovered accessors (javap -p approach). No duplication. |
| OpenClaw | Adopt vs extend vs invent | Follow OpenClaw fully. They're leading. We're followers here. Atmosphere extensions live additively in .agent/atmosphere/. If OpenClaw evolves, we follow. Better OpenClaw than inventing a new Jakarta-scale spec. |
| Flagship default runtime | Spring AI vs Built-in | Spring AI, one-line flag to switch to any of the other six. |
| MCP trust model | Single vs pluggable | Pluggable McpTrustProvider SPI — built-ins: AtmosphereEncrypted (default for local dev), OsKeychain, OAuthDelegated. User picks per MCP server in .agent/atmosphere/mcp.yaml. |
| Contract test latency | Full matrix vs sample | Representative runtime (Built-in) on PR CI, full seven-runtime matrix on main + nightly. |
| Architecture bet | Can memory live above the runtime? | Yes, via reflection-based federation. Use javap -p to discover each runtime's internal message-history accessors, read directly, never duplicate. Validates next — Action 1 below. |
| Timeline | Weeks per theme | Hours per theme. Full six-theme plan: ~8 hours total, one focused session. No monthly roadmap, no stealth window — we just ship. |
Scope:
- New
PersonalMemorySPI with four query types:conversation(userId, agentId, sessionId),facts(userId, agentId),workingMemory(sessionId),rules(userId, agentId, context). - Conversation history federation:
RuntimeConversationAdapterSPI with one implementation per runtime. Each adapter uses reflection (discovered viajavap -p) to read the runtime's internal message history. No storage duplication. - Facts / working memory / rules — greenfield storage. SQLite + Redis backends. Atmosphere-owned.
- Auto-memory —
AutoMemoryStrategySPI, built-ins listed above. - Inspection — admin control plane endpoints: GET / PUT / DELETE on
/atmosphere/admin/agents/{agent}/memory/{userId}. - Retention policies in skill file or
.agent/atmosphere/memory.yaml. - Contract test across all seven runtimes.
Old SPIs deprecated (no backward-compat shims): LongTermMemory, PersistentConversationMemory, SemanticRecallInterceptor, EmbeddingRuntime. Useful parts absorbed, rest removed.
Scope:
- Read the OpenClaw spec from their canonical repo (Action 2 below, read-only, prerequisite).
OpenClawLoaderparses.agent/identity.yaml,rules.yaml,memory/,tools/,.agentignore.AtmosphereExtensionLoaderparses.agent/atmosphere/channels.yaml,mcp.yaml,runtime.yaml,skills.yaml,permissions.yaml,memory.yaml.- CLI:
atmosphere agent import ./.agent,export,validate. - Round-trip test: export from Spring AI, import on LangChain4j, contract-test identical behavior.
Scope:
samples/personal-assistant/— net-new sample module.- Primary agent (user-facing) + scheduler + research + drafter crew via
@Coordinator/AgentFleet. - Default runtime: Spring AI. Flag:
--runtime=built-in|spring-ai|langchain4j|adk|koog|sk|embabel. - Ships as an OpenClaw
.agent/directory undersamples/personal-assistant/.agent/so users can copy it as a starting template. - Integrates Theme 1 (memory), Theme 2 (manifest) from day one.
- Grows in Theme 3 sub-phases: base crew → multi-channel continuity → Theme 4 permissions → Theme 5 MCP → Theme 6 skill polish.
- The sample IS the docs. Every future demo, blog post, recruiting pitch points here.
Scope:
PermissionModeenum (DEFAULT,PLAN,ACCEPT_EDITS,BYPASS,DENY_ALL) onDurableSession. Layered over existing per-tool@RequiresApproval.GET /atmosphere/admin/agents/{agent}/audit/{userId}— derived fromCoordinationJournal+ tool execution history.- Plan mode: agent generates plan, user approves before execution.
Scope:
- Per-user MCP client configuration in
.agent/atmosphere/mcp.yaml. McpTrustProviderSPI —AtmosphereEncrypted,OsKeychain,OAuthDelegatedbuilt-ins.- Admin endpoints for install / uninstall / authorize.
- Tool invocation consults per-user MCP config at call time.
Scope:
$ARGUMENTSand{{var}}substitution inSkillFileParser.- Path / context / channel scoping.
- Per-user overrides via
.agent/atmosphere/skills.yaml. atmosphere skill inspectCLI.
Not months. Not weeks. Hours.
- Action 1 — architectural bet validation (~30 min):
javap -pacross the seven runtimes' message history classes. Confirm reflection-based federation is viable. If a runtime blocks it, note the mitigation and move on. - Action 2 — OpenClaw spec read (~15 min): fetch their canonical repo, read the actual spec files. Lock Theme 2 layout against reality.
- Action 3 — Atmosphere memory audit (~30 min): map existing
LongTermMemory/PersistentConversationMemory/SemanticRecallInterceptor/EmbeddingRuntime/ConversationPersistence/DurableSession/CheckpointStoreto what Theme 1 absorbs vs deprecates. - Action 4 — admin control plane audit (~15 min): map existing admin endpoints, routing, UI rendering path.
- Action 5 — credential handling audit (~15 min): existing secret storage (if any) for Theme 5 trust providers.
Actions 1-5 are read-only, ~90-120 min total. Then:
- Theme 1 — 2h
- Theme 2 — 1h
- Theme 3 — 2h
- Theme 4 — 1h
- Theme 5 — 1h
- Theme 6 — 1h
Total: ~10 hours including audits, closer to 8 hours for the themes alone. One long focused session, or two shorter ones.
Under the radar until the flagship sample runs end-to-end. Quiet tease after, not before.
- No graph workflow DSL (LangGraph owns the category; our runtimes have their own).
- No voice / realtime pipeline.
- No code execution sandbox (tool concern, not platform).
- No new LLM client abstraction (our clients are the seven runtimes).
- No Python / TS feature-parity chasing.
- No backward-compatibility shims for deprecated memory SPIs.
- Build a personal agent on Spring AI, export as OpenClaw
.agent/, import on LangChain4j, memory + identity preserved? - User sees what agent remembers and edits it via admin control plane?
- Start conversation in Slack, pick up on web, agent doesn't forget?
- User brings own MCP tools without touching agent code?
- Audit per-user agent actions via admin control plane?
- Switch Spring AI → ADK → Koog with zero personal-agent code changes?
All six yes → shape found. Contract tests enforce each in CI.
The v0.2 architectural worry was: "if Spring AI / LangChain4j own message history internally, Atmosphere can't own memory above them without duplicating."
ChefFamille's answer: don't duplicate, reference. javap -p each runtime's chat client / agent service / session class. Find the accessor (public, package-private, or private-with-reflection) that exposes the internal message list. Write a thin RuntimeConversationAdapter per runtime that reads directly from the runtime's own storage. Atmosphere never duplicates conversation history — it federates reads across runtime-native storage.
For facts / working memory / hierarchical rules, no runtime has these concepts. Atmosphere owns them cleanly in the new PersonalMemory storage.
This is a better architecture than the v0.2 "memory above the runtime" bet. Memory lives alongside the runtime, not above it. The runtime keeps conversation history where it naturally lives; Atmosphere adds the things runtimes don't think about (semantic recall, retention, inspection, portability).
Validating this bet is Action 1 below.
- 2026-04-14 — v0.1 (gist) — thesis locked, six themes sketched, open questions.
- 2026-04-14 — v0.2 (gist) — schema / manifest / pace / flagship / UI / contract scope resolved. Raised architectural bet about memory above the runtime.
- 2026-04-14 — v0.3 (this gist) — all remaining questions resolved. Memory strategy pluggable, trust model pluggable, OpenClaw adopted fully, flagship on Spring AI, timeline corrected to hours. Reflection-federated memory architecture replaces "memory above the runtime". Execution begins now.