Documentation
CHYRD is an AI coding agent that lives in your terminal. A model talks to your code through real tools - read, write, edit, shell, grep, web search - inside a fast, animated TUI. Everything you need to get running is below.
Install
pipx install chyrd # recommended: isolated, on your PATH pip install chyrd # into the current environment uv tool install chyrd # if you use uv
To use the Claude Code engine as a backend (via the Claude Agent SDK), add the extra:
pipx install "chyrd[claude]"
CHYRD needs Python 3.10 or newer. It runs on Windows, macOS, and Linux.
Provider keys
API keys are read from environment variables first, then from ~/.chyrd/config.json. You only need one to get started.
| Provider | Environment variable | Notes |
|---|---|---|
| Anthropic | ANTHROPIC_API_KEY | Claude Opus / Sonnet / Haiku |
| OpenAI | OPENAI_API_KEY | GPT family (incl. Codex models) |
| GEMINI_API_KEY | Gemini | |
| OpenRouter | OPENROUTER_API_KEY | One key, hundreds of models (incl. :free) |
| Vercel AI Gateway | AI_GATEWAY_API_KEY | One key, routes to many vendors |
| Poe | POE_API_KEY | Spends your Poe subscription points |
| Groq | GROQ_API_KEY | Very fast inference |
| DeepSeek | DEEPSEEK_API_KEY | DeepSeek chat / reasoner |
| xAI | XAI_API_KEY | Grok |
| Mistral | MISTRAL_API_KEY | Mistral / Codestral / Devstral / Magistral |
| Together | TOGETHER_API_KEY | Open-weight hosting |
| Fireworks | FIREWORKS_API_KEY | Open-weight hosting |
| Moonshot | MOONSHOT_API_KEY | Kimi |
| Cohere | COHERE_API_KEY | Command family |
| Qwen | DASHSCOPE_API_KEY | Qwen via Alibaba DashScope |
| Z.AI | ZAI_API_KEY | GLM family (Flash tier is free) |
| MiniMax | MINIMAX_API_KEY | MiniMax M-series |
| Perplexity | PERPLEXITY_API_KEY | Sonar - answers with live web search |
| AI21 | AI21_API_KEY | Jamba family |
| Inception | INCEPTION_API_KEY | Mercury diffusion LLMs (very fast) |
| DeepInfra | DEEPINFRA_API_KEY | Open-weight hosting |
| Novita | NOVITA_API_KEY | Open-weight hosting |
| Nebius | NEBIUS_API_KEY | Open-weight hosting |
| SiliconFlow | SILICONFLOW_API_KEY | Open-weight hosting |
| Hyperbolic | HYPERBOLIC_API_KEY | Open-weight hosting |
| GitHub Models | GITHUB_TOKEN | Free with a GitHub account (rate-limited) |
| Cerebras | CEREBRAS_API_KEY | Free tier, wafer-scale speed |
| NVIDIA NIM | NVIDIA_API_KEY | Free credits |
| SambaNova | SAMBANOVA_API_KEY | Free tier |
| Hugging Face | HF_TOKEN | Inference router; free monthly credits |
| Chutes | CHUTES_API_KEY | Decentralized; free tier |
| Ollama | none (keyless) | Local; serve on localhost:11434 |
| LM Studio | none (keyless) | Local; serve on localhost:1234 |
| Claude (SDK) | ANTHROPIC_API_KEY | Install chyrd[claude] (Agent SDK backend) |
Set keys without touching the shell from inside the app with /keys (masked input, saved to your global config), or list every model and its readiness with chyrd models.
Quickstart
Set one provider key and launch:
$env:ANTHROPIC_API_KEY = "sk-..." chyrd
export ANTHROPIC_API_KEY=sk-... chyrd
That opens the TUI in the current directory. Point it elsewhere with chyrd path/to/project. No key at all? Run a local model with Ollama - it is keyless.
Permission modes
Cycle modes live with Shift+Tab. The status bar shows the active mode - terracotta in bypass, sage otherwise.
| Mode | Behavior |
|---|---|
| normal | Ask before every mutating action (write, edit, shell, fetch). |
| accept-edits | File writes and edits auto-approved; shell and fetch still ask. |
| plan | Read-only. Mutating tools are refused with guidance; present a plan. |
| bypass | Everything auto-approved. Move fast; nothing prompts. |
In the approval dialog you can choose allow once, always allow (persists a rule like shell(git *) for the session), or deny.
Keybindings
| Key | Action |
|---|---|
| Enter | Submit the message |
| Shift+Enter | Newline in the composer |
| Up / Down | Browse input history (at the buffer edge) |
| / | Open the slash-command and skill menu |
| @ | File-path autocomplete |
| Tab | Accept the highlighted suggestion |
| Shift+Tab | Cycle permission mode |
| Ctrl+M | Open the model picker |
| Ctrl+N | New session |
| Ctrl+P | Command palette |
| Ctrl+T | Next theme |
| Esc | Interrupt the turn (press twice to force-stop) |
| ! cmd | Run a shell command directly - no model in the loop |
| F1 | Help |
| Ctrl+C | Quit (press twice) |
Slash commands
Type / in the composer to open the menu. Built-ins:
- /helpkeys and commands
- /modelmodel picker, or /model provider/model-id
- /modecycle permission mode
- /themeswitch theme
- /newstart a fresh session
- /sessionsbrowse and resume
- /resumeresume the most recent
- /clearclear the conversation
- /undorevert the last turn's file changes
- /exportwrite the conversation to markdown
- /mcplist connected MCP servers and tools
- /skillslist available skills
- /agentslist subagents
- /initgenerate a CHYRD.md brief
- /keysset a provider API key
- /loopkeep improving the project
- /stopstop the running loop
- /mascottoggle the mascot owl
- /compactsummarize older context
- /costshow usage and spend
- /exitquit CHYRD
Every discovered skill is also a slash command - /commit, /review, /debug, and so on.
Skills
Skills are expert playbooks the agent (or you, via /name) can pull into context on demand. CHYRD ships fifteen built-ins:
- 3d-modelThree.js scenes, procedural meshes, Blender bpy scripts
- ai-appLLM app patterns: streaming, tool use, caching, evals
- image-genStable Diffusion / ComfyUI / API image generation options
- websiteNext.js + Tailwind ship checklist
- game-devgame loop / ECS / collision basics plus Roblox Luau notes
- commitconventional-commit workflow
- reviewseverity-ranked code review method
- initgenerate a CHYRD.md project brief
- debugscientific debugging
- refactorsafe, incremental refactoring
- testthe test pyramid plus table-driven tests
- docsdocumentation that stays true
- data-vizterminal braille charts and matplotlib
- deployVercel / Docker / systemd shipping
- securityOWASP quick audit
Add your own under ~/.chyrd/skills/<name>/SKILL.md (global) or ./.chyrd/skills/<name>/SKILL.md (per project). Frontmatter is name, description, and an optional argument-hint; the markdown body is the playbook.
Subagents
The task tool runs focused work in a nested agent. Three are built in: explorer (read-only codebase scout), builder (full tools, one job), and reviewer (read-only, severity-ranked). Define your own as markdown files in .chyrd/agents/ (project) or ~/.chyrd/agents/ (global):
--- name: reviewer description: Reviews code for bugs. Use after writing significant code. tools: read_file, grep_files, glob_files # optional; default = read-only set model: anthropic/claude-sonnet-4-6 # optional; default = main model --- You are a rigorous reviewer. Examine the relevant code without modifying it and report findings ranked by severity, each with a path:line and a concrete fix.
A subagent inherits the active permission mode but has no interactive approver, so mutating subagents only act in accept-edits or bypass mode (or under an explicit allow rule).
Configuration
CHYRD reads ~/.chyrd/config.json (global) merged with ./.chyrd/config.json (project; project wins). A full example:
{
"model": "anthropic/claude-opus-4-8",
"theme": "chyrd-dark",
"mode": "normal",
"mascot": true,
"max_tokens": 8192,
"allow": [
"shell(git *)",
"shell(npm test)",
"write(**)"
],
"api_keys": {
"openrouter": "sk-or-..."
},
"ollama_url": "http://localhost:11434",
"providers": [
{
"id": "myllm",
"label": "My Gateway",
"base_url": "https://gateway.internal/v1",
"api_key_env": "MYLLM_API_KEY",
"models": [
{
"id": "house-large",
"name": "House Large",
"context_window": 128000,
"tier": "flagship"
}
]
}
]
}allow rules grant standing permission so those actions never prompt. providers declares any OpenAI-compatible endpoint - a self-hosted gateway, a proxy, a vendor not built in - and its models show up everywhere a built-in provider does. Prefer environment variables for secrets (api_key_env); inline api_key is also accepted.
Headless usage
chyrd run executes one prompt without the TUI and streams the answer to stdout, which makes it scriptable and CI-friendly.
chyrd run "summarize what this project does" chyrd run "add type hints to utils.py" --model anthropic/claude-opus-4-8 --mode bypass chyrd run "list the failing tests" --quiet > report.txt
--model provider/modelpicks the model (default: configured or auto-resolved).--mode normal|accept-edits|plan|bypasssets the permission mode. There is no interactive approver in headless mode, so anything short of bypass or accept-edits auto-denies mutating actions; CHYRD prints a one-line warning.--max-turns Ncaps the agent loop.--quiethides tool-activity lines.- Tool activity is dimmed to stderr; the answer goes to stdout. Exit code is
0on success,1on an error stop.
List the catalog at any time:
chyrd models chyrd models --provider anthropic