SolOS v2 — Complete System Architecture
SolOS v2 — Complete System Architecture
One-line thesis: OpenCode supplies the runtime core and the human-facing surface; a thin SolOS Python layer owns the fleet (multi-agent mesh, memory, cost, registry, vault); Hermes is decommissioned and kept only as a pattern reference. Zero Hermes runtime dependency.
0. The substrate weighting (locked)
| Substrate | Weight | Role |
|---|---|---|
| 🔧 OpenCode | ~60% | Runtime core — server, OpenAPI SDK, sessions, providers, tool chrome, plugin system, web chat |
| 🧠 SolOS custom (Python) | ~30% | Fleet layer — MCP adapters, memory plane, CostGov, registry, vault/scp ops |
| 🌐 Hermes (patterns only) | ~10% | Reference designs (SQLite+FTS5 store, credential rotation, skills curator) — never imported, never load-bearing |
1. Complete system diagram
┌──────────────────────────────────────────────────┐
│ HUMAN SURFACES (reliable via OpenCode) │
│ Telegram bots · OpenCode Web (sol.youngle.au)│
└──────────────────────┬───────────────────────────┘
│ (auth: username/password gate)
┌──────────────────────▼───────────────────────────┐
│ OPENCODE RUNTIME — 60% (the borrowed core) │
│ · server + OpenAPI SDK · session store │
│ · provider routing (multi-model + fallbacks) │
│ · tool chrome · plugin system · web chat UI │
└──────────────────────┬───────────────────────────┘
│ (plugin API — thin seam)
┌──────────────────────▼───────────────────────────┐
│ SOLOS FLEET LAYER — 30% (our Python) │
│ ┌─────────────┬──────────────┬───────────────┐ │
│ │ MCP/plugin │ Memory │ CostGov │ │
│ │ adapters │ Plane │ (sampling │ │
│ │ 9 agents │ (cross- │ estimator) │ │
│ │ as tools │ agent) │ │ │
│ └─────────────┴──────────────┴───────────────┘ │
│ · Registry (single source of truth) │
│ · Vault (~/.solos/docs = world model) │
└──────────────────────┬───────────────────────────┘
│
┌──────────────────────▼───────────────────────────┐
│ DATA / PERSISTENCE │
│ solos.db (WAL, single DDL home) · vault mirror │
│ docs.youngle.au (render) · pulse.youngle.au │
└──────────────────────────────────────────────────┘
Direction of data flow: Human → OpenCode (sessions/providers) → SolOS MCP adapters (one per agent) → agent loop → memory plane (write) + CostGov (meter) + vault (register).
2. Component inventory (mapped to KEEP / MERGE / BUILD-NEW)
BUILD-NEW (the v2 spine)
settings.py— one pydanticget_settings();os.environconfined here (CI-enforced).migrations.py— ordered_schema_migrationsrunner, <50 LOC, forward-only.tests/— 5 pytest tests mapped 1:1 to known bugs + CI hygiene grep-tests.- OpenCode plugin adapters — one per agent, replacing the 8 FastAPI A2A servers.
- CI — ruff + strict mypy + pytest + import-linter + hygiene gates (bare GitHub Actions).
KEEP (mostly verbatim)
memory_plane.py(129 LOC — the style benchmark),dispatch_tracker.py,persona_loader.py,event_bus.py,action_log.py,model_health.py,registry_client.py, gateway body,llm_corebody.
MERGE
agent_app.py(499 LOC) +session_manager.py→ one agent loop.agent.py+agent_loop.py→ one.- 15 copy-paste provider URL sets →
provider_config.
DIE
- 6
run_*variants,self_learning.py(731 LOC, off serving path), all*.backup*sprawl, deadchat_messagestable, gateway_report_cost(0.001)fiction, the canned "Done. Ask me anything" empty-reply line,gateway_loop.py(replaced by OpenCode frontend).
3. Agent roster + topology (11 citizens)
| Agent | Port | Surface | Lane |
|---|---|---|---|
| Sol | :8300 | architecture & strategy | runtime owner |
| Ace | :8301 | engineering & execution | developer |
| Mira | :8302 | business & CostGov | cost/OpEx |
| Nova | :8303 | design & UI/UX | creative |
| Echo | :8304 | research & security | security |
| Alpha | :8305 | orchestration (OpenCode surface) | orchestrator |
| Atlas | :8306 | orchestration & ops | ops |
| Min | :8307 | coordination (default first contact) | coordinator |
| Eva | :8441 | trading desk | desk (laptop-hosted) |
| Eve | :8442 | macrobiotic/wellbeing coach | wellbeing |
| Tam | :8447 | research & reports | researcher (laptop-hosted) |
4. Cross-cutting invariants (the "stable & reliable" contract)
- One protocol — A2A
message/sendeverywhere; agents reachable on A2A even when TG/Web is down. - One registry — single source of truth for agent identity, health, tasks.
- CostGov before inference — meter every turn; sampling-based estimate, never a fictional constant.
- Memory injected every turn — no orphaned memory plane (TAM-MEM-01/02 regression-tested).
- Vault is the world model — every study registers to
~/.solos/docs, SHA-verified, auto-renders to docs.youngle.au.
5. Acceptance gates (measure by these, not by vibes)
pytestgreen on every PR;except Exceptioncount < 15 (from >100), each logged.- Single CREATE TABLE home (
db.py+ migrations); WAL onsolos.db. os.environconfined tosettings.py(grep-enforced); zero credential files in tree.- Reply text round-trips (empty-body A2A parse gap fixed).
- TG/Web reachability restored for all agents (the current single point of failure).
6. Migration path (no big-bang)
v2 runs alongside v1 ~4 weeks: copy-DB sidecar, per-agent feature-flag cutover (echo first, sol last), rollback = flag flip + git revert. Target ≤12 processes (vs ~35 today). First pilot = OpenCode-as-TG-frontend (restores reachability of all agents).
SolOS Server Intrusion Sweep — 2026-09-20
Ran Min's proven linux-malware-sweep procedure (read-only, non-destructive) against ubuntu@161.33.71.67. Context: the skill documents a PRIOR deep compromise of this same box (Jul 26–29 2026: two fake D-Bus rootkits defunct/gs-dbus, a crypto miner lvsbyte/smpsun, and a VLESS covert proxy sing-box).
WP owner pick — task-160f4fcb (ECHO x TAM pairing)
Echo requested owner pick on WP-A / WP-B / WP-C + depth. Decision (Tam, 2026-09-20):

