About GenPilot
GenPilot (San) is an open-source terminal agent runtime for developers who want to configure models, prompts, tools, and extensions. Its native Go binary supports multiple agents, editable behavior, and replayable run inspection.
Key features
- 01Native Go binary with no runtime dependencies
- 02Configurable models, prompts, and extensions
- 03Parallel subagents and graph workflows
- 04Session groups for agent messaging
- 05Permission controls and run replay
Use cases
- 01Running an interactive or one-shot terminal agent
- 02Coordinating subagents for a task
- 03Sharing messages across sessions
- 04Reviewing and debugging an agent run
MCP support
San supports MCP servers as configurable extensions and provides a `san mcp` subcommand. Project and personal MCP server definitions can be stored in `mcp.json` and `mcp.local.json`.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project README< SAN ✦ />
Minimal overhead. Maximum agent.
Lean context, native speed, open all the way down.
English · 简体中文
Open the full-quality intro ↗San is an open-source terminal agent runtime: one native Go binary, no Node.js or Python. Everything the model touches — prompt, tools, providers, extensions — stays yours to change.
Why San
Three properties, and San refuses to trade any one of them for the others.
Small — ~2.3k tokens of harness reach the model before your first message; the rest of the context window goes to your work. On disk, one 12 MB binary with zero runtime deps — it drops onto a laptop, a CI runner, or a scratch container.
Fast — ~0.01s cold start, and a full tool-use task returns in ~3.3s end to end. What you wait on is the model, not the client (benchmark).
Open — plug in models, skills, subagents, and MCP servers; write your own system prompt, autopilot goals, and self-learning strategy; replay any run in san inspector.
The name — San, written 三 ("three") and drawn ☰. From the Dao De Jing, 三生万物 — "three begets the ten-thousand things": one runtime that becomes any agent, running a three-step loop (reason → act → observe). The command stays san.
Open architecture
Overview diagram
Plug in — nothing is hardwired. Models from Anthropic, OpenAI, Google, DeepSeek, Ollama, and a dozen more; the web search backend of your choice; extensions of every kind — skills, subagents, MCP servers, plugins, hooks.
Write — how the agent behaves is text you own, not something baked into the binary. Compose the system prompt (how), bundle it into a persona you can switch, give autopilot a goal, set the strategy self-learning follows.
Coordinate — more than one agent at a time. Subagents run in parallel, each on the model that suits it; workflows arrange them as a graph (how); and sessions on one machine join a group to message each other back and forth — anything that can wait holds for you (session groups).
Oversee — nothing runs unwatched. You choose how much San may do without asking, and subagents inherit that choice (permissions); the inspector replays any run exactly as the model saw it.
Installation
Homebrew (macOS / Linux)
brew tap genai-io/san
brew install san
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/genai-io/san/main/install.sh | bash
Windows (PowerShell)
irm https://raw.githubusercontent.com/genai-io/san/main/install.ps1 | iex
On Windows, San runs commands under PowerShell (pwsh if present, else the built-in Windows PowerShell); set SAN_SHELL=bash, powershell, or a path to choose. With both installed, the other one is available too — turn it on in /tools.
Start with san. On first launch, choose a model and add its API key when prompted. San keeps itself current: a new release is installed in the background and the status line asks for a restart. Run san update to update right away, or brew upgrade san if you installed via Homebrew; turn background updates off in /settings › General (or set SAN_DISABLE_AUTOUPDATE=1). Model lineups, context windows and prices come from models.dev, refreshed daily (SAN_DISABLE_MODEL_REFRESH=1 to skip); correct any of them in ~/.san/models.json.
Other methods
Uninstall
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/genai-io/san/main/install.sh | bash -s uninstall
# Windows (PowerShell)
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/genai-io/san/main/install.ps1))) uninstall
Go Install (requires Go 1.26.9+)
go install github.com/genai-io/san/cmd/san@latest
Build from Source
git clone https://github.com/genai-io/san.git
cd san
go build -o san ./cmd/san
mkdir -p ~/.local/bin && mv san ~/.local/bin/
Usage
san # interactive
san "explain this function" # one-shot
san -p "do something" # print mode (no TUI), pipe-friendly
san --continue # resume the latest session
san --resume # pick a past session to resume
Subcommands: inspector · agent · plugin · mcp — run san <command> --help for each.
| What | How |
|---|---|
| Model · thinking budget | /models · Ctrl+T |
| Permission mode | Shift+Tab (ask · auto-accept · autopilot) |
| Long-running work · learning | /autopilot · /goal · /evolve |
| Message your other sessions | /group join · /group members · /group hold on|off |
| All slash commands | /help |
| Keys | Enter send · Alt+Enter newline · Esc stop · Ctrl+O expand tool · Ctrl+C cancel · Ctrl+D exit |
docs/guides/getting-started.md
Configuration
Credentials
| Service | Variable |
|---|---|
| Anthropic (Claude) | ANTHROPIC_API_KEY or Vertex AI |
| OpenAI (GPT, o-series, Codex) | OPENAI_API_KEY, or a ChatGPT subscription (sign in via /models) |
| GitHub Copilot (all Copilot models) | a Copilot subscription (sign in via /models) |
| Google (Gemini) | GOOGLE_API_KEY, or Vertex AI (gcloud auth application-default login + GOOGLE_CLOUD_PROJECT) |
| DeepSeek (DeepSeek V4) | DEEPSEEK_API_KEY |
| Moonshot (Kimi) | MOONSHOT_API_KEY |
| Alibaba (Qwen) | DASHSCOPE_API_KEY |
| MiniMax | MINIMAX_API_KEY |
| Z.ai (GLM / GLM Coding Plan) | BIGMODEL_API_KEY |
| SenseNova | SENSENOVA_API_KEY |
| Mimo | MIMO_API_KEY |
| Volcengine (Ark) | VOLCENGINE_API_KEY |
| Ollama (local) | OLLAMA_BASE_URL (default http://localhost:11434/v1) |
| Agnes-AI | AGNESAI_API_KEY |
| Exa search | none (default) |
| Tavily search | TAVILY_API_KEY |
| Brave search | BRAVE_API_KEY |
| Serper search | SERPER_API_KEY |
Config files & layout
Settings load from ~/.san/ and <project>/.san/, with project settings overriding user settings. Project instructions follow the AGENTS.md standard: ~/.san/AGENTS.md, every AGENTS.md from the repository root down to the working directory (the nearest one wins), and a git-ignored AGENTS.local.md at the root.
User-level (~/.san/):
providers.json # Provider connections and current model
models.json # Your corrections to model windows, prices and reasoning efforts
settings.json # Permissions, hooks, env, active persona
skills.json # Skill states
personas/ # Persona bundles: system prompt parts, skills, settings
skills/ # Custom skill definitions
agents/ # Agent definitions
commands/ # Custom slash commands
plugins/ # Installed plugins
projects/ # Session transcripts + indexes
Project-level (.san/):
settings.json # Permissions, hooks, disabled tools
mcp.json # MCP server definitions (team shared)
mcp.local.json # MCP server definitions (personal, git-ignored)
personas/ # Project-scoped persona bundles (override user-level)
agents/*.md # Subagent definitions
skills/*/SKILL.md # Skills
commands/*.md # Slash commands
plugins/ # Project-level plugins
plugins-local/ # Local plugins (git-ignored)
Benchmark: San vs Claude Code
Compared with Claude Code v2.1.112 on Apple Silicon, same model (claude-sonnet-4-6):
| Metric | San | Claude Code | Advantage |
|---|---|---|---|
| Download size | 12 MB | 63 MB (+ Node.js 112 MB) | 5x smaller |
| Disk footprint | 38 MB | 175 MB | 4.6x smaller |
| Startup time | ~0.01s | ~0.20s | 20x faster |
| Startup memory | ~32 MB | ~189 MB | 5.8x less |
| Simple task | ~2.4s / 39 MB | ~10.4s / 286 MB | 4.3x faster, 7.3x less memory |
| Tool-use task | ~3.3s / 39 MB | ~26.0s / 285 MB | 7.9x faster, 7.2x less memory |
| Harness context* | ~2.3k tokens | ~20.9k tokens | ~9x leaner |
*Context overhead is system prompt + tool schemas on an empty first turn, measured separately on San v1.22.0 vs Claude Code v2.1.220 — see method. All other rows are from the v1.13.2 / v2.1.112 run.
Comparable feature sets — the gap is client-side overhead, not capability. docs/operations/benchmark.md
Documentation
- Documentation Index — map of architecture, features, operations, and references
- Architecture — architecture entrypoint and reading order
- Package Map — package ownership and dependency boundaries
- Personas — bundled system prompt, skills, agents, and settings
- System Prompt — Slot model, persona, skill/agent injection
- Subagents · Skills · Plugins · MCP
- Hooks · Permissions · Tasks
- Workflows · Session groups — subagents as a graph; sessions that message each other
- Inspector — local web UI for transcript replay and debugging
- Per-package design under
docs/packages/— start at Package Index
Related Projects
- Claude Code — Anthropic's AI coding assistant
- Aider — AI pair programming in terminal
- Continue — Open-source AI code assistant
Community
Two ways in — WeChat for the Chinese community, Slack for everyone else:
- WeChat — 关注公众号「极客外传」· 回复
san或三入群 - Slack — Join our Slack
Contributing
Contributions welcome! See CONTRIBUTING.md for guidelines.
License
Apache License 2.0 - see LICENSE for details.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.