SOMA is an ambitious project built by one person pushing the limits of what they know. The architecture is real, the vision is real, and most of the system works — but there are gaps. This document is an honest map of them.
If you're a developer and something here matches your skills, pull requests are very welcome.
MnemonicArbiter can fail to initialize on some systems, falling back to stub
implementations that return empty results { results: [] }. When this happens
the knowledge graph has nothing to render and memory operations are non-functional.
Needs: debugging of initialization path, better error recovery, and a minimum viable
fallback that at least persists to disk.
Steve's orchestrator receives an empty Map stub during boot rather than a populated arbiter registry. A workaround attempts post-boot population but it's fragile. This is why Steve sometimes appears to load but can't find or execute arbiters. Needs: initialization order fix so the arbiter registry is fully populated before Steve comes online.
When no real peers have connected, the GMN falls back to three hardcoded fake nodes
(alpha.gmn.somaexample.cd, bear.gmn.somaexample.cd, imac.gmn.somaexample.cd)
with randomized latency values. There is no real peer discovery server yet.
Needs: a lightweight public discovery/registry server so SOMA instances can actually
find each other. This is the most impactful contribution anyone could make.
Nemesis evaluates emergent ideas and scores them (KILL / MUTATE / QUARANTINE / ALLOW / PROMOTE) but does not actually apply improvements back to the system. The evaluation pipeline is solid — the feedback loop that closes the circle is missing. Needs: a mechanism to take PROMOTE-scored ideas and apply them as actual system changes.
trainModel() prepares data correctly but doesn't execute actual ML training.
The infrastructure for GPU training, mixed precision FP16, and checkpointing is
designed but not connected to a real training loop.
Needs: integration with a local training framework (transformers, unsloth, etc.).
Functional if OPENAI_API_KEY is set — otherwise fails with a 503. Works in principle
but hasn't been battle-tested in production. Local Whisper via Ollama would be better
so it doesn't need a cloud key.
Needs: local Whisper model support via Ollama or whisper.cpp.
Credentials are saved but the live connection test is not implemented:
"Live connection test coming soon". Paper trading works. Live order execution
has not been verified end-to-end.
Needs: real connectivity test + execution verification against Alpaca sandbox.
| Component | What it returns | File |
|---|---|---|
| Audio Sentiment | Always { success: false, error: 'not implemented' } |
arbiters/AudioProcessingArbiter.js:478 |
| Options Sentiment | Hardcoded score: 0.5 |
arbiters/SentimentAggregator.js:209 |
| Conductor Self-Optimization | "Self-optimization placeholder executed" |
arbiters/ConductorArbiter.js:260 |
| Training Data Export | { count: 0, examples: [] } |
arbiters/TrainingDataExporter.js:242 |
| Backtest Historical Data | Placeholder returns | arbiters/BacktestEngine.js:438 |
| Knowledge Signal Firewall | Hardcoded test packets PKT-101..103 |
server/routes/knowledgeRoutes.js:314 |
| Knowledge Anomaly Buffer | Fake anomalies ANOM-44, ANOM-45 |
server/routes/knowledgeRoutes.js:327 |
| Pulse IDE Contrast Estimation | Hardcoded 4.5 WCAG score |
arbiters/PulseArbiter.js:1919 |
When heap exceeds HEAP_CEILING_MB, arbiters are silently skipped — including
Vision, NemesisReview, and NighttimeLearning. There's no user-facing indication
of what was dropped. On machines with less RAM this means significant functionality
quietly disappears.
Needs: logging of skipped arbiters to the UI, and a lower-memory mode.
TODO in the code: "// TODO: Implement auto-fix via arbiter". Error detection works.
Automated fix suggestions do not.
pendingGenesis tracking exists but autonomous creation of new cognitive fragments
from experience hasn't been verified to work end to end.
Mission Control Demo Mode (frontend/apps/command-bridge/components/MissionControl/MissionControlApp.jsx:31)
Defaults to isDemoMode: true. Paper trading is functional. Switching to live mode
requires Alpaca API keys and has not been fully tested.
Comment in code: "// Hook up topics needed (no-op placeholders)".
Topic-based memory routing is initialized but effectively unused.
Don't let this list mislead you. The following all work:
- QuadBrain reasoning — multi-model fusion, response generation
- Arbiter orchestration — 178 arbiters load and route correctly (memory pressure aside)
- Knowledge graph — nodes render from real memory (when Mnemonic initializes)
- Persona system — loads, switches, persists
- Drive system / CuriosityEngine — generates real autonomous research tasks
- AutonomousHeartbeat — keeps SOMA alive and self-monitoring
- NighttimeLearning — runs consolidation when enabled and memory permits
- Cluster / Graymatter — node discovery infrastructure is in place, needs public server
- Paper trading + guardrails — fully functional with Alpaca keys
- Pulse IDE — functional coding environment, minus auto-fix
- Voice (Whisper) — works with OpenAI key
- Steve — chat interface works, deep orchestration is fragile (see above)
The project is MIT licensed. The best places to start:
- GMN discovery server — a simple Node.js relay that lets SOMA instances find each other. Highest impact.
- Fix Steve's boot sequence — initialization order issue in
server/loaders/extended.js - Memory system debugging — why MnemonicArbiter fails on some systems
- Close the Nemesis loop — apply PROMOTE-scored improvements back to SOMA
- Local Whisper — replace OpenAI dependency with local model
Built by Barry. Architecture and vision by Barry. Engineering help wanted.