A really nice terminal-based coding agent.
npm install
tsx src/app.ts
Set at least one API key:
export ANTHROPIC_API_KEY=sk-ant-... # anthropic/* models
export OPENAI_API_KEY=sk-... # openai/* models
export OPENCODE_ZEN_API_KEY=... # opencode/* models via OpenCode Zen
export FIREWORKS_API_KEY=... # fireworks/* models- Interactive TUI
- Sessions
- Undo
- Bash, web search, web fetch, read, write, edit
- Paste image for vision models
- MCP
- Skills
- Subagents
- AGENTS.md
- Mouse support (scroll, select to copy)
- Slash commands
- Tables
- Token usage and cost in your currency
- Fast boot
- Table rendering
Switch models at any time with Tab or /model <model-id>. Model IDs use the full provider/model string. Models default to an unset variant, so Pace sends no explicit reasoning effort, thinking level, or similar provider-native options unless you select a variant. For models with variants, use Ctrl+T or /variant <variant> to cycle provider-native options such as OpenAI reasoning effort; the cycle includes the unset variant.
Pace ships with a curated built-in model catalog and also loads new models from models.dev into the model picker. Built-in metadata and variants win for known models; fetched metadata adds models that Pace does not already know about.
| Built-in Model ID |
|---|
anthropic/claude-haiku-4-5 |
anthropic/claude-sonnet-4-6 |
anthropic/claude-opus-4-6 |
anthropic/claude-opus-4-7 |
anthropic/claude-opus-4-8 |
opencode/claude-haiku-4-5 |
opencode/claude-sonnet-4-6 |
opencode/claude-opus-4-6 |
opencode/claude-opus-4-7 |
opencode/claude-opus-4-8 |
opencode/claude-fable-5 |
opencode/kimi-k2.6 |
opencode/kimi-k2.7-code |
opencode/kimi-k3 |
opencode/deepseek-v4-pro |
opencode/deepseek-v4-flash |
opencode/deepseek-v4-flash-free |
opencode/glm-5.2 |
fireworks/kimi-k2.6 |
fireworks/kimi-k2.7-code |
opencode/gpt-5.5 |
openai/gpt-5.5 |
lmstudio/google/gemma-4-12b |
Model catalog environment variables:
| Variable | Description |
|---|---|
PACE_MODELS_URL |
Override the models.dev source URL. Defaults to https://models.dev. |
PACE_MODELS_PATH |
Read/write a specific catalog JSON file instead of the default cache path. |
PACE_DISABLE_MODELS_FETCH |
Set to 1, true, or yes to disable network refreshes. |
| Key | Action |
|---|---|
| Tab / Shift+Tab | Cycle models forward / backward |
| Ctrl+T | Cycle the current model's variant, including unset |
| Escape | Cancel the running prompt |
| Ctrl+V | Paste image from clipboard |
| Ctrl+C | Clear input, or press twice to exit |
| Shift+Enter | Insert a newline |
!command |
Run a shell command directly (e.g. !ls -la) |
| Command | What it does |
|---|---|
/new |
Start a fresh conversation |
/model <model-id>[:variant] |
Switch model (or list models without args) |
| `/variant [variant | unset]` |
/sessions |
List saved sessions for this project |
/resume <id> |
Resume a saved session |
/undo |
Rewind to before the last user message |
/skills |
List available skills |
/skill:<name> |
Run a skill |
/agents |
List available subagents |
/mcp |
List connected MCP servers and tools |
/mcps |
Enable or disable MCP servers (Ctrl+E) |
@filename— mention a project file (autocomplete with Tab)@image(./path.png)— attach an image inline- Bare image paths like
./screenshot.pngare also auto-detected
Pace reads global configuration from ~/.config/pace/config.json.
Pace also reads a global instructions file from ~/.config/pace/AGENTS.md and merges it into the system prompt alongside the project AGENTS.md in the current working directory. Global instructions apply in every project; project-specific instructions take precedence. Create the file to set preferences that should always apply, such as:
Always talk in ASD-STE100 Simplified Technical English.
Always talk to me like I have ADHD.
Choose the startup model and the models that Tab / Shift+Tab cycle through with full provider/model IDs. Omit :variant for the unset/default selection, or use provider/model:variant to select a provider-native variant explicitly:
{
"defaultModel": "opencode/gpt-5.5:medium",
"cycleModels": [
"opencode/gpt-5.5:medium",
"opencode/gpt-5.5:high",
"opencode/kimi-k2.6",
"openai/gpt-5.5:xhigh"
],
"sessionTitleModel": "opencode/deepseek-v4-flash:nothink"
}Pace remembers the last explicit variant used for each model in memory, so cycling away from a model and back restores that model's previous variant during the current run. Use Ctrl+T until the model label has no :variant, or run /variant unset, to return to the provider default without sending explicit variant options.
Pace uses sessionTitleModel to auto-name new sessions after the first user message. Choose a cheap, fast text model; for models with thinking variants, prefer a no-thinking variant such as opencode/deepseek-v4-flash:nothink. If title generation fails, Pace falls back to showing a preview of the first user message.
To display estimated costs in a specific currency, configure a USD conversion rate, display format, and how many fraction digits:
{
"cost": {
"conversionRate": 10,
"format": "{amount} kr",
"fractionDigits": 1
}
}If fractionDigits is omitted, Pace uses dynamic precision similar to the default USD display.
Subagents are specialized helpers that run in their own isolated context window. The main agent delegates tasks to them with the agent tool. Each subagent returns only its final result, so exploration and tool noise stay out of the main conversation.
Pace ships with one built-in agent:
explore— fast, read-only codebase exploration
Define your own agents as Markdown files with YAML frontmatter:
- Project:
.agents/agents/<name>.md - Global:
~/.agents/agents/<name>.md
---
name: reviewer
description: Reviews code changes for bugs, security issues, and missing tests
tools: read, bash
---
You are a code reviewer. Analyze the given changes and report:
- Bugs and edge cases
- Security concerns
- Missing tests
Do not modify any files.Frontmatter fields:
| Field | Description |
|---|---|
name |
Must match the file name |
description |
Tells the main agent when to delegate. Be specific about trigger conditions |
tools |
Comma-separated allowlist. Omit for all tools |
model |
Optional model id, e.g. opencode/claude-haiku-4-5. Defaults to the current model |
Subagents cannot spawn subagents. Use /agents to list available agents.
Configure external tool servers in ~/.config/pace/mcp.json:
{
"filesystem": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "~"],
"enabled": true
},
"remote-api": {
"type": "remote",
"url": "https://example.com/mcp",
"headers": { "Authorization": "Bearer <token>" },
"enabled": true
}
}MCP tools show up as mcp__<server>__<tool> and the agent uses them automatically when relevant.
mcp.json is a stable, manually-authored config file — Pace never writes to it. To enable or disable servers at runtime, press Ctrl+E or run /mcps to open a picker with checkboxes (like the model picker): space toggles a server, and the change takes effect immediately (the server connects or disconnects and its tools appear or disappear). The enabled/disabled state is saved to ~/.config/pace/prefs.json and wins over the enabled field in mcp.json.
Type check:
npm run lint

