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 (subagents included), turn limits, duration limits
  • Checkpoint / undo: revert file changes per agent turn
  • Context compaction: when context grows large, old tool outputs are trimmed first (a line in the transcript says how much was freed) and the conversation is summarized only when that is not enough — by the session’s model or by a summarizer you choose
  • MCP: connect external tool servers, local or remote; remote servers that need a login sign in with OAuth from the session’s MCP page
  • Mid-run messages: what you send while the agent works is queued and read at its next step; one tap brings the whole queue back to the input
  • Rewind: go back to any message of yours, edit it and send it again; the branch you leave stays reachable
  • Native app: the iOS and Android shell around the web UI, with push notifications, a share sheet and passwords kept behind Face ID on iOS
  • Artifacts: files the agent sends you stay reachable from the conversation
  • Voice input: dictate messages in the web UI, or hand the conversation to a voice delegate and get its minutes back as a draft
  • 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
  • Project owners: a standing agent per codebase that keeps the project’s book, starts and directs its sessions, receives their reports and answers what the book already answers
  • 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.json.migratedThe retired /schedule store, kept after its pending records were imported as scheduled tasks
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/<key>/book/, owner.jsonA project owner’s book and settings
codebases/orphaned-memory.jsonOlder project memory that no repository could claim
.mcp.jsonGlobal MCP server definitions
mcp-oauth.jsonSign-in tokens for remote MCP servers
events.jsonEvent inbox for wake on event
devices.jsonPaired 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.