Screenshot of the Moo web UI showing an agent chat, tool calls, and an app sidebar

Browser workbench 路 TypeScript tools 路 SQLite memory 路 MCP 路 DevTools

Better than your TUI.

Moo gives local coding agents the room a terminal UI cannot: an inspectable browser workspace with chat, diffs, tool traces, memory, app panels, and previews side by side. A Rust-hosted V8 runtime runs the TypeScript harness, SQLite keeps durable state, VCS-aware scratch worktrees isolate changes, and Chrome DevTools lets you watch or debug the run as it happens.

Spatial
Chat, diffs, tools, previews, memory, and apps at once
Local-first
One binary, local database, no hosted control plane
Auditable
Trail summaries, diffs, todos, tool calls, facts

Feature set

A browser workbench beats a terminal pane.

Moo gives agents practical local capabilities and enough screen space to keep every action visible, resumable, and grounded in the repository they are changing.

Inspectable agent runtime

A Rust binary hosts V8 and the TypeScript harness, streams model output, queues messages durably, supports interrupts, subagents, timers, and Chrome DevTools Protocol debugging, and lets you tune separate V8 pools for chat, reads, scans, UI work, and tools.

  • Rust/V8 host
  • TypeScript tools
  • streaming
  • subagents
  • CDP
  • runtime pools

Browser-native work surface

The Solid web UI is the place to chat, inspect tool calls, review semantic diffs, browse memory and state, manage settings, preview Markdown, HTML, and Mermaid, and keep generated apps beside the conversation without cramming everything into terminal rows.

  • chat timeline
  • diff viewer
  • memory browser
  • settings
  • previews
  • Mermaid

App workspaces

Agents can register iframe apps, open one as the primary chat surface, preserve panel state, call app handlers, and expose source bundles in a code explorer with source and preview tabs, formatting, syntax highlighting, and Mermaid rendering.

  • iframe apps
  • primary app
  • state bridge
  • handlers
  • code explorer
  • source preview

MCP command center

Moo discovers MCP servers and tools, manages OAuth-backed connectors, renders tool titles, markdown descriptions, preserved newlines, highlighted signatures, collapsible schemas, and HJSON examples so connected tools stay understandable.

  • MCP discovery
  • OAuth
  • tool titles
  • Markdown docs
  • HJSON examples
  • schemas

Durable local context

Chats, summaries, TODOs, pointers, content-addressed objects, RDF facts, MCP state, diffs, app state, and trail history live in SQLite so a session can be audited, resumed, forked, or archived without a remote service.

  • SQLite
  • chats
  • todos
  • objects
  • pointers
  • trail

Queryable memory

Agents can assert durable facts globally or per project, use typed RDF terms, define vocabulary, run joins and SPARQL, scroll large fact sets, and keep chat-local graph history separate from long-lived user and project memory.

  • RDF facts
  • SPARQL
  • project scope
  • typed terms
  • vocab
  • history

Repository-safe work

Each chat gets an isolated scratch worktree with repository metadata, git or jj context, lazy filesystem access, command execution, patches, diffs, forks, and check scripts so agents can make real changes without trampling the main checkout.

  • scratch worktrees
  • git
  • jj
  • fs tools
  • proc tools
  • forks

Human checkpoints

Structured forms, choices, visible status messages, semantic TODOs, TODO reminders, title updates, compact summaries, attachments, and queued sends keep the human in the loop with real controls instead of forcing every decision through prose in a terminal prompt.

  • ui.ask
  • ui.choose
  • attachments
  • todos
  • summaries
  • queued sends

Skill-aware assistance

Built-in and saved skills carry metadata and markdown instructions, can be listed, loaded, refreshed, enabled, tested, and opened from a dedicated route without materializing scratch worktrees just to browse guidance.

  • built-in skills
  • saved skills
  • metadata
  • refresh
  • dedicated route
  • tests

Connected local tools

The harness exposes host-backed HTTP fetch and streaming, environment reads, validators, event broadcasts, MCP calls, and iframe app APIs with state and handler calls for richer task-specific interfaces.

  • HTTP
  • env
  • events
  • MCP calls
  • validators
  • UI apps

Polished diagnostics

Timeline headers, sidebar counts, trace panels, facts scrolling, app tabs, panel controls, markdown highlighting, and Mermaid lightboxes have focused tests so the browser shell remains fast and readable during long sessions.

  • timeline
  • sidebars
  • traces
  • facts
  • lightboxes
  • UI tests

Practical developer loop

Release assets embed the harness and UI, while contributors get direnv, process-compose, Bun tests, Rust checks, startup snapshots, model/provider helpers, runtime presets, and a single local check script for the whole stack.

  • release binaries
  • direnv
  • process-compose
  • Bun
  • Rust
  • bin/check

Architecture

Small layers with hard edges.

Moo keeps the host, harness, UI, and database distinct. The Rust process owns storage, filesystem and process access, networking, MCP sessions, and browser serving. The TypeScript harness turns those host operations into agent tools. The web shell renders the live timeline and side panels from the same local state.

Host

Rust, V8, SQLite, HTTP server, CDP, snapshots, native ops.

Harness

TypeScript commands, tools, prompt assembly, agents, todos, memory APIs.

Workspace

Per-chat scratch roots, VCS metadata, attachments, diffs, checks, trail history.

UI

Solid app for chat, sidebars, settings, MCP setup, previews, generated apps.

Run it

Start local, then point it at work.

Use a release binary for normal use, or run the development stack from a checkout when changing Moo itself.

Install a release

# macOS / Linux
curl -sf https://moo.pcarrier.com/install | sh
moo serve
# Later, upgrade in place:
moo upgrade

# Windows PowerShell
irm https://moo.pcarrier.com/install.ps1 | iex
moo serve
# Later, upgrade in place:
moo upgrade

Hack on Moo

direnv allow
dev
check

Open the served browser UI, start a chat from a project directory, and Moo will create a local scratch workspace, record the trail, and keep the underlying tools inspectable.

Boundaries

Built for local agents.

Moo deliberately favors explicit local control over a hosted product surface.

Bring your own models

Moo coordinates providers and credentials for OpenAI, Anthropic, Qwen, xAI, and DeepSeek; it does not hide model choice behind a managed backend.

Local privileges matter

Tools can read files and run processes in the configured workspace, so review worktrees and prompts like you would review shell access.

Built for active work

The surface stays focused on chat, tools, memory, diffs, and local integrations rather than account management or hosted project dashboards.