OpenCode vs SolOS vs Hermes — Architecture Study
OpenCode vs SolOS vs Hermes — Architecture Study
Directive under test (Young): "OpenCode has everything we need; integrate SolOS into it and optimise their existing architecture."
Sources (all fetched, cited in-line): opencode.ai/docs (server, agents, plugins, custom-tools, lsp, providers, rules, enterprise), github.com/sst/opencode README, Hermes llms.txt. SolOS claims from prior review lanes (not re-verified this run).
1. Comparison snapshot
| Axis | OpenCode | Hermes | SolOS today |
|---|---|---|---|
| Core shape | Go headless server (OpenAPI 3.1) + TUI/desktop/IDE clients | python per-profile + gateway; state.db canonical (SQLite+FTS5) | 3 hand-built planes: TG gateway → per-agent FastAPI A2A (8300–8307) → shared services |
| Session persistence | Rich: fork, child sessions, revert, summarize/compact, async prompt | resume + FTS5 search + per-platform tracking | in-process dict + db; no fork/children; thread-ids missing |
| Memory | none (sessions + AGENTS.md only) | MEMORY/USER.md + session search + memory-provider plugins | memory_plane.py 4-layer but agent-keyed |
| Multi-agent | per-session personas, @mention subagents, one project | Bot Mode fleet: named bots, own memory/skills, message each other | 8 independent agents; coarse A2A |
| Messaging | none native — no Telegram/chat surfaces | 21+ platforms, Telegram native | TG only via PTB (shared tunnel) |
| Providers | 75+ via AI SDK + models.dev; OAuth provider auth; enterprise central config | provider-agnostic; credential-pool rotation | tier fallback in agent_loop.py |
| Cost accounting | BYO (Helicone third-party) | partially UNVERIFIED in index | CostGov ledger exists but partially fictional (0.001 fiction on TG turns) |
| Extensibility | JS/TS plugins, custom tools (.opencode/tools/), MCP, ACP, formatters | plugins + MCP + skins + skills-with-curator | homegrown services only |
| Skills/rules | AGENTS.md (Claude-compatible, /init) | skills self-improve + curator | prompt_factory hand-rolled |
| Security | server password flag, enterprise SSO, permission-gated tools | secrets sources, iron-proxy, approval gates | registry loopback no auth; plaintext creds in git-tracked config/ — worst of three |
| LSP/tool depth | ~30 LSP servers auto-wired, formatters, find/symbol | terminal backends, checkpoints, computer-use | none |
2. Verdict on the hypothesis
Partially true for coding runtime; mostly false for fleet ops.
- OpenCode's verified strength set (sessions-fork/children, 75+ providers, plugin layer,
OpenAPI server+SDK, password-protected server, LSP) maps beautifully onto the SOLos
agent-runtime tier — it would REPLACE: registry (→ server+SDK), per-agent FastAPI A2A
servers (→ plugins/custom-tools; kills 8 python processes), prompt_factory (→ AGENTS.md
- markdown agent defs), tier-fallback (→ provider config), broken task_ref bookkeeping (→ child-session tree + status API).
- But it has no messaging surface, no memory plane, no cost ledger, no multi-bot mesh — so "integrate SolOS into it" has the direction backwards: OpenCode is the substrate ADOPTING SolOS's superior primitives (they don't need our provider/session code), while SolOS contributes exactly the layer the directive skips — fleet ops: TG mesh, cross-agent memory, CostGov, vault sync. Those must remain custom regardless.
The honest counterpoint: Hermes' feature set (Bot Mode — named bots with own memory/skills that message each other; 21-platform gateway incl. Telegram; FTS5 canonical session store; Bitwarden/1Password credential rotation; iron-proxy egress) is a closer literal match to Young's "everything we need" than OpenCode. If SolOS is a fleet, Hermes is the closer substrate; if SolOS is a coding fleet, OpenCode wins on tool depth (LSP etc).
3. Recommendation: adopt-with-glue, pending a decision spike
Recommended: run a controlled spike — one SolOS agent on each substrate, measure TTFB, memory recall across sessions, cost accuracy, and TG delivery reliability. Do not commit to either substrate without the spike; the two stack-lines diverge:
- OpenCode substrate → keep: TG gateway (PTB → prompt_async — needs idempotency keys, OpenCode gives sessions NOT dedupe), memory_plane, CostGov, vault ops scripts.
- Hermes substrate → bot-native fleet mesh almost for free, less glue engineering.
4. If OpenCode substrate is chosen — integration map
Clean mappings:
- agent personas → config/agents markdown defs (build/plan permission tiers replace tier fallback)
- registry → OpenCode server API (/project, /session, /config/providers) — the registry collapses
- A2A servers → plugins/custom-tools (.opencode/tools/*.ts) — kills 8 FastAPI processes
- prompt_factory → AGENTS.md + per-agent markdown (docs/rules)
- CardGov → /agent config listing (cards become config, not a service)
Must stay custom (no equivalent):
- Telegram gateway mesh; cross-agent memory sharing; CostGov; vault/scp ops; heavy-LM non-coding personas (Qwen/GLM-class bot fidelity in a TUI/coding-shaped harness).
5. Risk register
- Upstream org churn: repo reads as sst→anomalyco — brand/governance risk for a pinned dependency.
- OpenCode server ships localhost auth-OFF; we must always set OPENCODE_SERVER_PASSWORD.
- Bun/Node glue vs Python fleet: mandatory bridge engineering, not free.
- Cost accounting BYO → keeping CostGov alive will be an internal scope fight.
- prompt_async is at-most-once — dedupe layer still ours to build.
- Hermes-based claims_SKILL.md sourced from index only; deeper check needed before commit.
Verdict one-liner
Adopt OpenCode's runtime primitives (sessions/providers/plugins/server-API), keep the fleet layer (mesh + memory + CostGov), and put Hermes on the table for the same spike because Bot Mode may already be what Young actually asked for.
SolOS Architecture Review (from the actual code, not symptoms)
SolOS Full Code Review — Phase 2 (2026-09-17)
Baseline vs 2026-09-16 review. Note: Sol's team moved overnight — serving-path files (core/agent_loop.py, agent_app.py) touched 2026-09-16 23:04–23:06, and a NEW core/memory_plane.py (129 lines) already landed. Git repo now exists (last commit b9c7998, Sep 16).

