Skip to content
letmoa.run

Overview

Moa is a coding agent runtime in Go. One core, two interfaces: web UI and headless CLI.

  • Tool calling with filesystem sandboxing and path policies
  • Permissions: yolo, ask, or auto (AI-evaluated) modes
  • Goal mode: autonomous maker→verifier loop that works toward an objective until a read-only verifier judges it done
  • Sessions: persist, resume, browse previous conversations
  • Subagents: spawn child agents, sync or async
  • Memory: cross-session persistent project notes
  • Skills: loadable knowledge packs discovered from .moa/skills/ or ~/.config/moa/skills/. The agent pulls one in with load_skill; you can invoke one yourself with /<name>. context: fork runs the skill as an isolated subagent instead of loading it into the current conversation
  • Budget & limits: per-run USD caps, turn limits, duration limits
  • Checkpoint / undo: revert file changes per agent turn
  • Context compaction: automatic summarization when context grows large, written by the session’s model or by a summarizer you choose
  • MCP: connect external tool servers
  • Voice input: in the web UI
  • Live Preview: watch the web app the agent is building inside the conversation, at a chosen viewport width, and tap an element to tell the agent what should change about it
  • Wake on event: give an external system (CI, error tracker, mail watcher) its own webhook URL and let what it sends reach a session, or wait in an inbox for you to place it
  • AGENTS.md: project instructions discovered automatically from working directory; /reload re-reads them in an open session
  • Multi-provider: Anthropic, OpenAI, xAI Grok and Meta (Muse Spark), with model aliases for quick switching, per-model thinking levels and an optional fast mode
  1. User sends a prompt.
  2. Provider streams assistant output.
  3. Tool calls are validated, permission-checked, and executed.
  4. Tool results go back to the model.
  5. Loop continues until the assistant stops calling tools.

That same loop powers both interfaces.

All state lives under ~/.config/moa/ (or MOA_CONFIG_DIR):

PathContents
config.jsonGlobal config
auth.jsonProvider credentials (mode 0600)
sessions/Saved sessions
schedules.jsonDurable one-shot schedules (/schedule)
projects/<hash>/state.jsonYour project state: saved approvals, MCP vetoes, your own per-project settings
attachments/v1/Image and document bytes referenced by sessions, deduplicated by content
skills/Global skill packs (<name>/SKILL.md)
global/memory/Global memory facts (scope: global)
codebases/<key>/memory/Project memory facts, keyed by repository
codebases/orphaned-memory.jsonOlder project memory that no repository could claim
.mcp.jsonGlobal MCP server definitions
devices.jsonPaired Pulse device credentials
update.jsonCached release-check state
vapid.jsonWeb-push VAPID keypair
push_subscriptions.jsonWeb-push subscriptions

Project-level config goes in <cwd>/.moa/ — see Configuration.