MOMO CODE — AI coding agent that evolves with you
See the code
███╗ ███╗ ██████╗ ███╗ ███╗ ██████╗ ██████╗ ██████╗ ██████╗ ███████╗
████╗ ████║██╔═══██╗████╗ ████║██╔═══██╗ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
██╔████╔██║██║ ██║██╔████╔██║██║ ██║ ██║ ██║ ██║██║ ██║█████╗
██║╚██╔╝██║██║ ██║██║╚██╔╝██║██║ ██║ ██║ ██║ ██║██║ ██║██╔══╝
██║ ╚═╝ ██║╚██████╔╝██║ ╚═╝ ██║╚██████╔╝ ╚██████╗╚██████╔╝██████╔╝███████╗
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
AI-powered coding agent that evolves with you.
Built on opencode with a unique dual-speed self-evolution system based on Pioneer Agent.
| Two-Speed Evolution Algorithm | System Technical Architecture |
|---|---|
/evolve)/fine-tune) command uses OpenAI-compatible protocol onlyMOMO_CUSTOM_* env varsultra / standard / lite/evolve) — Second-level prompt injection via KEP protocol. Tactics distilled from success are auto-selected via Thompson sampling/fine-tune) — Hour-level weight improvement via Monte Carlo Graph Search (MCGS) + LoRA/refine) — Reviews session trajectories and proposes small, evidence-based improvements (tactics/prompt patches) that only take effect after human approval/agent) — RLM-style task decomposition: plan → parallel child processes → synthesis, with depth/budget rails/graph) — Long-horizon tasks as a resumable DAG of subagents: LLM-planned dependency graph, parallel execution, retries, and /sim world-agent nodes/goal + /heartbeat + /daemon) — Persistent goals injected into every session, timed tasks, and a daemon loop for multi-hour autonomy/sim) — LLM-driven control of a persistent Genesis physics world: the agent writes Python into a long-lived namespace (RLM-style), with skills-as-code loaded from ~/.momo/sim/skills//voice) — Speak your prompt: mic recording (sounddevice) → OpenAI-compatible STT (Whisper/Groq) → coding session.claude/ config, MCP servers, promptsCheck with:
node -v # should print v20.x or later
npm -v
git --version
curl --version
curl -fsSL https://momozi.cc/install | bash
The installer:
Open a new terminal (or run `source ~/.zshrc`) and then:
momo --version # 1.0.0
momo --help
If you see `command not found: momo`, your PATH didn't pick up the change — see INSTALL.md.
git clone https://github.com/momozi1996/momo-code.git
cd momo-code/packages/opencode
npm install # installs all deps including TypeScript
npm run build # compiles TS + fixes ESM imports
node bin/momo --version
npm package coming in v1.1. Use the Quick install above for v1.0.
# Remove install artifacts
rm -rf ~/.momo
# Remove the PATH line from your shell rc
sed -i.bak '/# momo Code CLI/,+1d' ~/.zshrc # zsh
sed -i.bak '/# momo Code CLI/,+1d' ~/.bashrc # bash
# Generic key (works with any provider)
export MOMO_API_KEY=your-api-key
# Or provider-specific
export MOMO_ANTHROPIC_API_KEY=sk-ant-...
export MOMO_OPENAI_API_KEY=sk-...
# Interactive mode
momo
# One-shot task
momo "Refactor auth to use Effect"
# Use a model tier
momo --model ultra "Complex architecture review"
momo --model standard "Fix the login bug"
momo --model lite "Quick code review"
On first run, momo creates ~/.momo/:
~/.momo/
├── momo.jsonc # Config
├── sessions/ # History
├── experience/ # Learned tactics (auto-created)
│ ├── tactics.json
│ └── ledger.jsonl
└── ...
| Tier | Use Case |
|---|---|
ultra | Complex tasks, large context |
standard | Daily coding work |
lite | Quick tasks, low latency |
momo [options] [prompt]
Options:
--model, -m <id> Model ID or tier
--provider, -p <name> Provider
--help Show help
--version Show version
momo # Show help and banner
momo "prompt" # One-shot task
momo --model claude-sonnet-4 "task"
/evolve)momo /evolve # Run evolution with default settings
momo /evolve --mode=explore # Favor exploration of new tactics
momo /evolve --mode=harden # Favor proven high-win-rate tactics
momo /evolve --mode=convention-only # Only convention-type tactics
momo /evolve --list # Show all learned tactics
momo /evolve --inject # Inject tactics for current task
momo /evolve --solidify # Apply verdict, update stats
/fine-tune)momo /fine-tune # Diagnose, show training proposal
momo /fine-tune run # Execute training pipeline
momo /fine-tune run --dry-run # Preview without executing
momo /fine-tune status # Check training status
momo /fine-tune promote # Promote candidate to production
/refine)Reviews recent session trajectories and proposes small, reviewable improvements. Nothing is applied without human approval.
momo /refine # Generate proposals from recent sessions
momo /refine list # List proposals
momo /refine show <id> # Inspect evidence + content
momo /refine approve <id> # Approve (review gate)
momo /refine apply <id> # Apply: tactic → draft, patch → prompt file
momo /refine reject <id> # Reject
/agent)RLM-style recursion: the model decomposes a complex task, subagents run
as child momo processes (parallel where possible), and a synthesizer
merges results.
momo /agent "Refactor the provider layer and update all callers and tests"
Rails: MOMO_RLM_MAX_DEPTH (3), MOMO_RLM_BUDGET (8), MOMO_RLM_TIMEOUT_MS (300000).
/graph)Turns a long-horizon task into a directed acyclic graph of self-contained
subagent tasks. The model plans the DAG (with real dependencies), nodes run as
child momo processes — in parallel per topological level, with dependency
outputs passed downstream — failed nodes retry, and a final LLM pass
synthesizes the report. State persists to ~/.momo/graphs/<id>.json after
every batch, so runs survive restarts.
momo /graph run "Design + implement + test a persistence layer" # plan → execute → synthesize
momo /graph resume <id> # Continue a long-horizon run where it stopped
momo /graph status <id> # Node states + outputs
momo /graph list # Recent runs
Nodes can be marked "kind": "sim" by the planner — those become simulation
agents driving the Genesis world via /sim run, so a graph can mix coding
subagents with physics experiments.
Rails: MOMO_GRAPH_MAX_NODES (12), MOMO_GRAPH_MAX_RETRIES (2),
MOMO_GRAPH_CONCURRENCY (defaults to MOMO_RLM_BUDGET).
/goal, /schedule, /heartbeat, /daemon)momo /goal add "Ship v2.0" "with full test coverage" # Persistent goal
momo /goal list | log <id> "progress" | done <id> # Manage goals
momo /schedule add --every=60m "run tests and report" # Timed task
momo /schedule add --at=07:30 "daily standup summary" # Daily task
momo /heartbeat # Run due tasks once
momo /daemon # Foreground loop (Ctrl+C to stop)
Active goals are injected into every chat session. The daemon is a
foreground process by design — background it with nohup/systemd/Task
Scheduler. Budget rails: MOMO_DAEMON_MAX_RUNS, MOMO_DAEMON_MAX_HOURS (24).
/sim)An LLM-driven agent that controls a persistent Genesis
physics world. Requires Python with genesis-world installed
(pip install genesis-world).
momo /sim doctor # Check python/genesis/provider setup
momo /sim run "Stack the red cube on the blue cube" # LLM control loop
momo /sim run "<task>" --steps=40 --viewer # Budget + live viewer
momo /sim exec "print(42)" # One-shot world REPL
momo /sim exec --file=scene.py # Run a script in a fresh world
momo /sim skills # List installed world skills
momo /sim eval --tasks=tasks.json # Batch evaluation (fresh world per episode)
How it works: the CLI spawns a persistent Python process
(python/genesis_world/server.py) holding a Genesis scene. Each loop
step, the model replies with {"thought": ..., "code": ...}; the code
runs in the persistent world namespace (gs, scene, step(n), your
variables survive across steps). Skills are plain .py files dropped
into ~/.momo/sim/skills/ — auto-loaded into every world. Sim runs are
recorded as trajectories, feeding the /refine self-improvement loop.
Env: MOMO_SIM_PYTHON, MOMO_SIM_BACKEND (cpu/gpu),
MOMO_SIM_MAX_STEPS (20), MOMO_SIM_SERVER.
/optim)Parameter tuning driven by code understanding + explicit reasoning
(inspired by optim-agent).
The agent reads your code first and infers the physical/business meaning of
every parameter, then proposes configurations with explicit _reasoning and
a _note scratchpad fed forward across trials. Invalid proposals degrade to
random sampling — a flaky agent can never crash a study.
momo /optim scan src/serve.py --param=threshold:0.05:0.95 # read code → semantic map
momo /optim init quality --target=src/serve.py \
--param=threshold:0.05:0.95 --param=budget:10:200:int,log \
--metric=score --direction=max --cmd="python eval.py --threshold {threshold}"
momo /optim semantics quality approve # human review gate
momo /optim run quality --trials=20 # reasoning-driven loop
momo /optim history quality # full reasoning trace
Evaluators: --cmd (business command, metric from stdout) or --sim
(experiment in the Genesis world, ESTOP-honored). Studies persist under
~/.momo/optim/studies/<name>/ and resume automatically. See
docs/optim.md.
Env: MOMO_OPTIM_HISTORY (5), MOMO_OPTIM_N_INIT (2), MOMO_OPTIM_TIMEOUT (300).
serve)A zero-dependency local HTTP server that exposes momo's state as a JSON API + SSE live feed, with a single-file dashboard (no build step).
momo serve # http://127.0.0.1:4097 (dashboard at /)
momo serve --port=8080 --token=s3cret
GET /api/sessions|goals|schedule, GET /api/optim/studies[/:name[/trials]],
GET /api/sim/observe, SSE GET /api/optim/studies/:name/streamPOST /api/optim/studies/:name/run, POST /api/sim/estop|resume, POST /api/chat--token (Bearer auth,
?token= fallback for browser EventSource)Env: MOMO_SERVE_PORT (4097), MOMO_SERVE_HOST (127.0.0.1), MOMO_SERVE_TOKEN.
/voice)Speak your prompt instead of typing. Requires pip install sounddevice scipy
for recording, and an OpenAI-compatible speech-to-text endpoint.
momo /voice # Record 5s → transcribe → run as prompt
momo /voice --seconds=10 --lang=zh
momo /voice --file=meeting.mp3 # Transcribe an audio file → run
momo /voice transcribe --file=x.wav # Print transcription only
export MOMO_STT_API_KEY=sk-... # falls back to MOMO_OPENAI_API_KEY / MOMO_API_KEY
export MOMO_STT_MODEL=whisper-1 # default
# Groq (fast, generous free tier):
export MOMO_STT_BASE_URL=https://api.groq.com/openai/v1
export MOMO_STT_MODEL=whisper-large-v3
momo models list # List all models
momo models info <id> # Show model details
momo models providers # Show available providers
~/.momo/momo.jsonc){
"$schema": "https://momozi.cc/config.json",
"model": "standard",
"provider": "anthropic",
"inheritClaudeCode": true,
"evolve": {
"enabled": true,
"auto": false,
"clusterThreshold": 10,
"budgetUSD": 50
}
}
/evolve)The experience fast loop (KEP — Knowledge Embedding Protocol) is momo's unique second-level learning system. Unlike /fine-tune which updates model weights over hours, /evolve learns and applies knowledge in seconds via prompt injection.
/fine-tune curriculum| Asset | Description |
|---|---|
| Tactic | Compact strategy card with triggers, steps, checks, guardrails |
| Case | Successful task record with injected tactics |
| Ledger | Append-only audit log (JSONL) |
Each tactic tracks a Beta(α, β) distribution:
| Mode | Behavior |
|---|---|
balanced (default) | Normal explore/exploit trade-off |
explore | Favor new tactics, wider sampling |
harden | Favor proven tactics, tighter selection |
convention-only | Only convention-type tactics |
Learned tactics are stored in ~/.momo/experience/:
tactics.jsonl — All tactic recordsledger.jsonl — Audit log of all operations| Variable | Description | Default |
|---|---|---|
MOMO_XP_MODE | Evolution mode | balanced |
MOMO_XP_DIR | Storage directory | ~/.momo/experience |
/fine-tune)The weight slow loop improves momo's model weights via fine-tuning. This runs at hour-level timescales.
momo /fine-tune # Diagnose, show proposal
momo /fine-tune run # Execute training
momo /fine-tune run --dry-run # Preview
momo /fine-tune status # Check status
momo /fine-tune promote # Promote candidate
| Variable | Description | Default |
|---|---|---|
MOMO_EVOLVE_ENABLED | Enable self-evolution | true |
MOMO_EVOLVE_AUTO | Auto-trigger training | false |
MOMO_EVOLVE_BUDGET_USD | Max training budget | 50 |
Zero-friction migration:
~/.claude/settings.json auto-merged.claude/mcp/ work out of the box.claude/prompts/ available# Disable inheritance
export MOMO_CLAUDE_CODE_INHERIT=false
export MOMO_ONLY=1
| Variable | Description |
|---|---|
MOMO_API_KEY | Generic API key |
MOMO_HOME | Home directory (default: ~/.momo) |
MOMO_MODEL | Default model/tier |
MOMO_PROVIDER | Default provider |
MOMO_XP_MODE | Evolution mode (balanced/explore/harden/convention-only) |
MOMO_XP_DIR | Experience storage dir |
MOMO_SESSION_RECORD | Set false to disable session trajectory recording |
MOMO_RLM_MAX_DEPTH | Subagent recursion limit (default: 3) |
MOMO_RLM_BUDGET | Max subagents per orchestration (default: 8) |
MOMO_DAEMON_INTERVAL | Daemon poll seconds (default: 60) |
MOMO_DAEMON_MAX_RUNS / MOMO_DAEMON_MAX_HOURS | Daemon budget rails |
MOMO_SIM_PYTHON | Python executable for the sim world server |
MOMO_SIM_BACKEND | Genesis backend: cpu or gpu (default: cpu) |
MOMO_SIM_MAX_STEPS | Max LLM control-loop steps (default: 20) |
MOMO_STT_API_KEY | STT key for /voice (OpenAI-compatible) |
MOMO_STT_BASE_URL / MOMO_STT_MODEL | STT endpoint/model (default: OpenAI whisper-1) |
MOMO_VOICE_SECONDS | Default voice recording length (default: 5) |
MOMO_EVOLVE_ENABLED | Enable self-evolution |
MOMO_EVOLVE_BUDGET_USD | Training budget |
MOMO_ANTHROPIC_API_KEY | Anthropic key |
MOMO_OPENAI_API_KEY | OpenAI key |
MOMO_OPENROUTER_API_KEY | OpenRouter key |
Full list: src/env.ts
┌─────────────────────────────────────────────────────────┐
│ momo Code │
├─────────────────────┬───────────────────────────────────┤
│ Experience Fast │ Weight Slow Loop │
│ Loop (/evolve) │ (/fine-tune) │
├─────────────────────┼───────────────────────────────────┤
│ Timescale: seconds │ Timescale: hours │
│ Mechanism: prompt │ Mechanism: LoRA fine-tuning │
│ injection │ │
│ Selection: │ Search: Monte Carlo Graph │
│ Thompson/UCB │ Search (MCGS) │
│ Storage: JSONL │ Training: LoRA │
│ (~/.momo/xp/) │ Gate: Ratchet check │
│ Bridge: promoted │ Storage: model registry │
│ → curriculum │ │
└─────────────────────┴───────────────────────────────────┘
User Request
|
v
resolveModel("standard") → BUILTIN_TIERS.standard
| [claude-sonnet, gpt-4.1, ...]
v
getCredentials() → MOMO_*_API_KEY env
|
v
Provider Factory → baseUrl, headers, timeout
|
v
createModel() → LanguageModel adapter
|
v
wrapSSE() → Streaming with 8min timeout
packages/opencode/src/
├── provider/ # 19 LLM provider integrations
├── evolve/ # Weight slow loop (/fine-tune) — MCGS
├── experience/ # Fast loop (/evolve) — KEP protocol
│ ├── tactic.ts # Tactic model + Beta stats
│ ├── selector.ts # Thompson/UCB selection
│ ├── injector.ts # Prompt injection
│ ├── gate.ts # Promotion ratchet
│ ├── bridge.ts # Two-speed bridge
│ └── ...
├── cli/cmd/ # CLI commands
├── session/ # Prompt routing
├── config/ # Configuration
└── effect/ # Effect utilities
tsc --noEmit — 0 errors/evolve, /fine-tune, models, helpAdded:
/evolve) — KEP protocol with Thompson sampling/fine-tune) — MCGS training pipeline/evolve, /fine-tune, models, helpChanged:
MIT — see NOTICE for third-party attributions. See USE_RESTRICTIONS.md and SECURITY.md.
MOMO CODE — AI coding agent that evolves with you
See the code
███╗ ███╗ ██████╗ ███╗ ███╗ ██████╗ ██████╗ ██████╗ ██████╗ ███████╗
████╗ ████║██╔═══██╗████╗ ████║██╔═══██╗ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
██╔████╔██║██║ ██║██╔████╔██║██║ ██║ ██║ ██║ ██║██║ ██║█████╗
██║╚██╔╝██║██║ ██║██║╚██╔╝██║██║ ██║ ██║ ██║ ██║██║ ██║██╔══╝
██║ ╚═╝ ██║╚██████╔╝██║ ╚═╝ ██║╚██████╔╝ ╚██████╗╚██████╔╝██████╔╝███████╗
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
AI-powered coding agent that evolves with you.
Built on opencode with a unique dual-speed self-evolution system based on Pioneer Agent.
| Two-Speed Evolution Algorithm | System Technical Architecture |
|---|---|
/evolve)/fine-tune) command uses OpenAI-compatible protocol onlyMOMO_CUSTOM_* env varsultra / standard / lite/evolve) — Second-level prompt injection via KEP protocol. Tactics distilled from success are auto-selected via Thompson sampling/fine-tune) — Hour-level weight improvement via Monte Carlo Graph Search (MCGS) + LoRA/refine) — Reviews session trajectories and proposes small, evidence-based improvements (tactics/prompt patches) that only take effect after human approval/agent) — RLM-style task decomposition: plan → parallel child processes → synthesis, with depth/budget rails/graph) — Long-horizon tasks as a resumable DAG of subagents: LLM-planned dependency graph, parallel execution, retries, and /sim world-agent nodes/goal + /heartbeat + /daemon) — Persistent goals injected into every session, timed tasks, and a daemon loop for multi-hour autonomy/sim) — LLM-driven control of a persistent Genesis physics world: the agent writes Python into a long-lived namespace (RLM-style), with skills-as-code loaded from ~/.momo/sim/skills//voice) — Speak your prompt: mic recording (sounddevice) → OpenAI-compatible STT (Whisper/Groq) → coding session.claude/ config, MCP servers, promptsCheck with:
node -v # should print v20.x or later
npm -v
git --version
curl --version
curl -fsSL https://momozi.cc/install | bash
The installer:
Open a new terminal (or run `source ~/.zshrc`) and then:
momo --version # 1.0.0
momo --help
If you see `command not found: momo`, your PATH didn't pick up the change — see INSTALL.md.
git clone https://github.com/momozi1996/momo-code.git
cd momo-code/packages/opencode
npm install # installs all deps including TypeScript
npm run build # compiles TS + fixes ESM imports
node bin/momo --version
npm package coming in v1.1. Use the Quick install above for v1.0.
# Remove install artifacts
rm -rf ~/.momo
# Remove the PATH line from your shell rc
sed -i.bak '/# momo Code CLI/,+1d' ~/.zshrc # zsh
sed -i.bak '/# momo Code CLI/,+1d' ~/.bashrc # bash
# Generic key (works with any provider)
export MOMO_API_KEY=your-api-key
# Or provider-specific
export MOMO_ANTHROPIC_API_KEY=sk-ant-...
export MOMO_OPENAI_API_KEY=sk-...
# Interactive mode
momo
# One-shot task
momo "Refactor auth to use Effect"
# Use a model tier
momo --model ultra "Complex architecture review"
momo --model standard "Fix the login bug"
momo --model lite "Quick code review"
On first run, momo creates ~/.momo/:
~/.momo/
├── momo.jsonc # Config
├── sessions/ # History
├── experience/ # Learned tactics (auto-created)
│ ├── tactics.json
│ └── ledger.jsonl
└── ...
| Tier | Use Case |
|---|---|
ultra | Complex tasks, large context |
standard | Daily coding work |
lite | Quick tasks, low latency |
momo [options] [prompt]
Options:
--model, -m <id> Model ID or tier
--provider, -p <name> Provider
--help Show help
--version Show version
momo # Show help and banner
momo "prompt" # One-shot task
momo --model claude-sonnet-4 "task"
/evolve)momo /evolve # Run evolution with default settings
momo /evolve --mode=explore # Favor exploration of new tactics
momo /evolve --mode=harden # Favor proven high-win-rate tactics
momo /evolve --mode=convention-only # Only convention-type tactics
momo /evolve --list # Show all learned tactics
momo /evolve --inject # Inject tactics for current task
momo /evolve --solidify # Apply verdict, update stats
/fine-tune)momo /fine-tune # Diagnose, show training proposal
momo /fine-tune run # Execute training pipeline
momo /fine-tune run --dry-run # Preview without executing
momo /fine-tune status # Check training status
momo /fine-tune promote # Promote candidate to production
/refine)Reviews recent session trajectories and proposes small, reviewable improvements. Nothing is applied without human approval.
momo /refine # Generate proposals from recent sessions
momo /refine list # List proposals
momo /refine show <id> # Inspect evidence + content
momo /refine approve <id> # Approve (review gate)
momo /refine apply <id> # Apply: tactic → draft, patch → prompt file
momo /refine reject <id> # Reject
/agent)RLM-style recursion: the model decomposes a complex task, subagents run
as child momo processes (parallel where possible), and a synthesizer
merges results.
momo /agent "Refactor the provider layer and update all callers and tests"
Rails: MOMO_RLM_MAX_DEPTH (3), MOMO_RLM_BUDGET (8), MOMO_RLM_TIMEOUT_MS (300000).
/graph)Turns a long-horizon task into a directed acyclic graph of self-contained
subagent tasks. The model plans the DAG (with real dependencies), nodes run as
child momo processes — in parallel per topological level, with dependency
outputs passed downstream — failed nodes retry, and a final LLM pass
synthesizes the report. State persists to ~/.momo/graphs/<id>.json after
every batch, so runs survive restarts.
momo /graph run "Design + implement + test a persistence layer" # plan → execute → synthesize
momo /graph resume <id> # Continue a long-horizon run where it stopped
momo /graph status <id> # Node states + outputs
momo /graph list # Recent runs
Nodes can be marked "kind": "sim" by the planner — those become simulation
agents driving the Genesis world via /sim run, so a graph can mix coding
subagents with physics experiments.
Rails: MOMO_GRAPH_MAX_NODES (12), MOMO_GRAPH_MAX_RETRIES (2),
MOMO_GRAPH_CONCURRENCY (defaults to MOMO_RLM_BUDGET).
/goal, /schedule, /heartbeat, /daemon)momo /goal add "Ship v2.0" "with full test coverage" # Persistent goal
momo /goal list | log <id> "progress" | done <id> # Manage goals
momo /schedule add --every=60m "run tests and report" # Timed task
momo /schedule add --at=07:30 "daily standup summary" # Daily task
momo /heartbeat # Run due tasks once
momo /daemon # Foreground loop (Ctrl+C to stop)
Active goals are injected into every chat session. The daemon is a
foreground process by design — background it with nohup/systemd/Task
Scheduler. Budget rails: MOMO_DAEMON_MAX_RUNS, MOMO_DAEMON_MAX_HOURS (24).
/sim)An LLM-driven agent that controls a persistent Genesis
physics world. Requires Python with genesis-world installed
(pip install genesis-world).
momo /sim doctor # Check python/genesis/provider setup
momo /sim run "Stack the red cube on the blue cube" # LLM control loop
momo /sim run "<task>" --steps=40 --viewer # Budget + live viewer
momo /sim exec "print(42)" # One-shot world REPL
momo /sim exec --file=scene.py # Run a script in a fresh world
momo /sim skills # List installed world skills
momo /sim eval --tasks=tasks.json # Batch evaluation (fresh world per episode)
How it works: the CLI spawns a persistent Python process
(python/genesis_world/server.py) holding a Genesis scene. Each loop
step, the model replies with {"thought": ..., "code": ...}; the code
runs in the persistent world namespace (gs, scene, step(n), your
variables survive across steps). Skills are plain .py files dropped
into ~/.momo/sim/skills/ — auto-loaded into every world. Sim runs are
recorded as trajectories, feeding the /refine self-improvement loop.
Env: MOMO_SIM_PYTHON, MOMO_SIM_BACKEND (cpu/gpu),
MOMO_SIM_MAX_STEPS (20), MOMO_SIM_SERVER.
/optim)Parameter tuning driven by code understanding + explicit reasoning
(inspired by optim-agent).
The agent reads your code first and infers the physical/business meaning of
every parameter, then proposes configurations with explicit _reasoning and
a _note scratchpad fed forward across trials. Invalid proposals degrade to
random sampling — a flaky agent can never crash a study.
momo /optim scan src/serve.py --param=threshold:0.05:0.95 # read code → semantic map
momo /optim init quality --target=src/serve.py \
--param=threshold:0.05:0.95 --param=budget:10:200:int,log \
--metric=score --direction=max --cmd="python eval.py --threshold {threshold}"
momo /optim semantics quality approve # human review gate
momo /optim run quality --trials=20 # reasoning-driven loop
momo /optim history quality # full reasoning trace
Evaluators: --cmd (business command, metric from stdout) or --sim
(experiment in the Genesis world, ESTOP-honored). Studies persist under
~/.momo/optim/studies/<name>/ and resume automatically. See
docs/optim.md.
Env: MOMO_OPTIM_HISTORY (5), MOMO_OPTIM_N_INIT (2), MOMO_OPTIM_TIMEOUT (300).
serve)A zero-dependency local HTTP server that exposes momo's state as a JSON API + SSE live feed, with a single-file dashboard (no build step).
momo serve # http://127.0.0.1:4097 (dashboard at /)
momo serve --port=8080 --token=s3cret
GET /api/sessions|goals|schedule, GET /api/optim/studies[/:name[/trials]],
GET /api/sim/observe, SSE GET /api/optim/studies/:name/streamPOST /api/optim/studies/:name/run, POST /api/sim/estop|resume, POST /api/chat--token (Bearer auth,
?token= fallback for browser EventSource)Env: MOMO_SERVE_PORT (4097), MOMO_SERVE_HOST (127.0.0.1), MOMO_SERVE_TOKEN.
/voice)Speak your prompt instead of typing. Requires pip install sounddevice scipy
for recording, and an OpenAI-compatible speech-to-text endpoint.
momo /voice # Record 5s → transcribe → run as prompt
momo /voice --seconds=10 --lang=zh
momo /voice --file=meeting.mp3 # Transcribe an audio file → run
momo /voice transcribe --file=x.wav # Print transcription only
export MOMO_STT_API_KEY=sk-... # falls back to MOMO_OPENAI_API_KEY / MOMO_API_KEY
export MOMO_STT_MODEL=whisper-1 # default
# Groq (fast, generous free tier):
export MOMO_STT_BASE_URL=https://api.groq.com/openai/v1
export MOMO_STT_MODEL=whisper-large-v3
momo models list # List all models
momo models info <id> # Show model details
momo models providers # Show available providers
~/.momo/momo.jsonc){
"$schema": "https://momozi.cc/config.json",
"model": "standard",
"provider": "anthropic",
"inheritClaudeCode": true,
"evolve": {
"enabled": true,
"auto": false,
"clusterThreshold": 10,
"budgetUSD": 50
}
}
/evolve)The experience fast loop (KEP — Knowledge Embedding Protocol) is momo's unique second-level learning system. Unlike /fine-tune which updates model weights over hours, /evolve learns and applies knowledge in seconds via prompt injection.
/fine-tune curriculum| Asset | Description |
|---|---|
| Tactic | Compact strategy card with triggers, steps, checks, guardrails |
| Case | Successful task record with injected tactics |
| Ledger | Append-only audit log (JSONL) |
Each tactic tracks a Beta(α, β) distribution:
| Mode | Behavior |
|---|---|
balanced (default) | Normal explore/exploit trade-off |
explore | Favor new tactics, wider sampling |
harden | Favor proven tactics, tighter selection |
convention-only | Only convention-type tactics |
Learned tactics are stored in ~/.momo/experience/:
tactics.jsonl — All tactic recordsledger.jsonl — Audit log of all operations| Variable | Description | Default |
|---|---|---|
MOMO_XP_MODE | Evolution mode | balanced |
MOMO_XP_DIR | Storage directory | ~/.momo/experience |
/fine-tune)The weight slow loop improves momo's model weights via fine-tuning. This runs at hour-level timescales.
momo /fine-tune # Diagnose, show proposal
momo /fine-tune run # Execute training
momo /fine-tune run --dry-run # Preview
momo /fine-tune status # Check status
momo /fine-tune promote # Promote candidate
| Variable | Description | Default |
|---|---|---|
MOMO_EVOLVE_ENABLED | Enable self-evolution | true |
MOMO_EVOLVE_AUTO | Auto-trigger training | false |
MOMO_EVOLVE_BUDGET_USD | Max training budget | 50 |
Zero-friction migration:
~/.claude/settings.json auto-merged.claude/mcp/ work out of the box.claude/prompts/ available# Disable inheritance
export MOMO_CLAUDE_CODE_INHERIT=false
export MOMO_ONLY=1
| Variable | Description |
|---|---|
MOMO_API_KEY | Generic API key |
MOMO_HOME | Home directory (default: ~/.momo) |
MOMO_MODEL | Default model/tier |
MOMO_PROVIDER | Default provider |
MOMO_XP_MODE | Evolution mode (balanced/explore/harden/convention-only) |
MOMO_XP_DIR | Experience storage dir |
MOMO_SESSION_RECORD | Set false to disable session trajectory recording |
MOMO_RLM_MAX_DEPTH | Subagent recursion limit (default: 3) |
MOMO_RLM_BUDGET | Max subagents per orchestration (default: 8) |
MOMO_DAEMON_INTERVAL | Daemon poll seconds (default: 60) |
MOMO_DAEMON_MAX_RUNS / MOMO_DAEMON_MAX_HOURS | Daemon budget rails |
MOMO_SIM_PYTHON | Python executable for the sim world server |
MOMO_SIM_BACKEND | Genesis backend: cpu or gpu (default: cpu) |
MOMO_SIM_MAX_STEPS | Max LLM control-loop steps (default: 20) |
MOMO_STT_API_KEY | STT key for /voice (OpenAI-compatible) |
MOMO_STT_BASE_URL / MOMO_STT_MODEL | STT endpoint/model (default: OpenAI whisper-1) |
MOMO_VOICE_SECONDS | Default voice recording length (default: 5) |
MOMO_EVOLVE_ENABLED | Enable self-evolution |
MOMO_EVOLVE_BUDGET_USD | Training budget |
MOMO_ANTHROPIC_API_KEY | Anthropic key |
MOMO_OPENAI_API_KEY | OpenAI key |
MOMO_OPENROUTER_API_KEY | OpenRouter key |
Full list: src/env.ts
┌─────────────────────────────────────────────────────────┐
│ momo Code │
├─────────────────────┬───────────────────────────────────┤
│ Experience Fast │ Weight Slow Loop │
│ Loop (/evolve) │ (/fine-tune) │
├─────────────────────┼───────────────────────────────────┤
│ Timescale: seconds │ Timescale: hours │
│ Mechanism: prompt │ Mechanism: LoRA fine-tuning │
│ injection │ │
│ Selection: │ Search: Monte Carlo Graph │
│ Thompson/UCB │ Search (MCGS) │
│ Storage: JSONL │ Training: LoRA │
│ (~/.momo/xp/) │ Gate: Ratchet check │
│ Bridge: promoted │ Storage: model registry │
│ → curriculum │ │
└─────────────────────┴───────────────────────────────────┘
User Request
|
v
resolveModel("standard") → BUILTIN_TIERS.standard
| [claude-sonnet, gpt-4.1, ...]
v
getCredentials() → MOMO_*_API_KEY env
|
v
Provider Factory → baseUrl, headers, timeout
|
v
createModel() → LanguageModel adapter
|
v
wrapSSE() → Streaming with 8min timeout
packages/opencode/src/
├── provider/ # 19 LLM provider integrations
├── evolve/ # Weight slow loop (/fine-tune) — MCGS
├── experience/ # Fast loop (/evolve) — KEP protocol
│ ├── tactic.ts # Tactic model + Beta stats
│ ├── selector.ts # Thompson/UCB selection
│ ├── injector.ts # Prompt injection
│ ├── gate.ts # Promotion ratchet
│ ├── bridge.ts # Two-speed bridge
│ └── ...
├── cli/cmd/ # CLI commands
├── session/ # Prompt routing
├── config/ # Configuration
└── effect/ # Effect utilities
tsc --noEmit — 0 errors/evolve, /fine-tune, models, helpAdded:
/evolve) — KEP protocol with Thompson sampling/fine-tune) — MCGS training pipeline/evolve, /fine-tune, models, helpChanged:
MIT — see NOTICE for third-party attributions. See USE_RESTRICTIONS.md and SECURITY.md.