Read-only exploration
The model can inspect the codebase and produce an implementation plan without modifying anything. Use it to map a project or design an approach first.
Documentation
Everything you need to install, configure, and drive Beast — from your first session to custom commands, skills, and MCP servers.
01 — Setup
Beast ships as a single self-contained Linux binary with no runtime dependencies to
install. Download it, put it on your PATH, and run it from the root of
your project.
Two tools must be available before running Beast: bwrap (bubblewrap),
used to sandbox shell commands in a read-only host with a writable workspace, and
rg (ripgrep), used for fast project search.
bwrap --version
rg --version
Beast works on Linux x86_64 (glibc ≥ 2.39) and on Windows through the Windows Subsystem for Linux (WSL).
mkdir -p ~/.local/bin
curl -fsSL https://beast-agent.com/beast -o ~/.local/bin/beast
chmod +x ~/.local/bin/beast
export PATH="$HOME/.local/bin:$PATH"
To install system-wide instead, download to /usr/local/bin with
sudo. The same command run later replaces the existing binary in place,
so updating is a single step.
cd /path/to/your/project
beast
AGENTS.md,
and local configuration all resolve from the directory you launch it from.
02 — Setup
On first run Beast creates ~/.beast/settings.json with a placeholder
template. Configure MODEL and API_KEY, and set
BASE_URL when using a custom OpenAI-compatible endpoint.
{
"API_KEY": "",
"MODEL": "openai:gpt-4o",
"BASE_URL": "",
"REASONING_EFFORT": "high"
}
| Field | Purpose |
|---|---|
API_KEY | API key for the selected provider. |
MODEL | Model in provider:model form, e.g. openai:gpt-4o. |
BASE_URL | Optional custom OpenAI-compatible endpoint URL. |
REASONING_EFFORT | Reasoning effort for the model, e.g. high. |
You can also configure credentials and select a model from inside the application:
use /connect to add and activate a provider API key, and
/models to pick a model from the interactive catalog with configurable
reasoning effort.
03 — Everyday use
Beast runs with two intentional modes, and the available tool surface follows the active mode. Switch between them at any time.
The model can inspect the codebase and produce an implementation plan without modifying anything. Use it to map a project or design an approach first.
Beast exposes editing and execution tools, one deliberate action at a time. Shell commands still pause for confirmation before they run.
/new; resume a previous one with /sessions./compact; compaction also happens automatically at the context limit.
Beast automatically injects your repo's AGENTS.md into the system
prompt. Run /init to generate one — it detects the project's language,
build system, and commands and writes a polished agent guide.
04 — Reference
Type / in the chat input to open the command palette.
| Command | Description |
|---|---|
/connect | Add and activate a provider API key. |
/models | Select a model from the available catalog. |
/sessions | Resume a previous session. |
/new | Start a new session. |
/init | Generate an AGENTS.md for the project. |
/compact | Compact the conversation history. |
/mcp | Open the MCP server manager. |
exit | Quit Beast. |
/doesnotexist is not an error — it is
sent to the model as a normal message.
05 — Extend the input
Custom commands turn a reusable Markdown prompt into a slash command such as
/review or /test. Codify repeatable workflows — code
review, test runs, commit-message drafting — and invoke them with a single
keystroke. The injected prompt goes through the normal agent loop: tools, active
Plan/Build mode, and command approval all still apply.
| Scope | Location | Visibility |
|---|---|---|
| Global | ~/.beast/commands/*.md | Every project on this machine |
| Local | <project>/.beast/commands/ | Only the current project |
Local commands override global commands with the same name. Create
the commands/ directory if it does not exist; files are picked up the
next time you start Beast.
A command file is Markdown with an optional --- frontmatter block
followed by the prompt body. The description is shown in the palette.
---
description: Review the current code for bugs and maintainability issues
---
Review the current project.
Focus on:
- correctness
- security
- performance
- maintainability
Do not modify files unless explicitly requested.
If the file has no frontmatter, the whole file is treated as the prompt body. Files with an empty prompt body are ignored.
The command name is the file path relative to commands/, without the .md suffix. Nested directories group related commands under a prefix.
.beast/commands/review.md → /review
.beast/commands/frontend/review.md → /frontend/review
.beast/commands/api/test.md → /api/test
Built-in commands are reserved and cannot be shadowed by custom
files: exit, compact, sessions, new,
connect, models, and init. A custom
compact.md is ignored.
/ in the chat input to open the palette and filter by name./review some-args runs it with some-args.| Placeholder | Expands to |
|---|---|
$ARGUMENTS | The full text after the command name |
$@ | Same as $ARGUMENTS |
$1 … $9 | The 1st…9th whitespace-separated argument |
When arguments are provided but the body contains no placeholder, the raw argument text is appended to the prompt as a final paragraph.
---
description: Draft a commit message for the given changes
---
Write a concise conventional commit message for the following changes.
Files: $ARGUMENTS
Suggest one commit message, and explain the reasoning briefly.
Invoked as /commit src/agent/ui/app.py, $ARGUMENTS becomes
src/agent/ui/app.py and $1 becomes the first
whitespace-separated token.
~/.beast/commands/ and .beast/commands/; create the directory if it does not exist yet.06 — Reusable workflows
Skills are reusable instruction + workflow packages that the agent discovers and loads on demand when a task matches them. Write a skill once and the agent follows its workflow whenever the task calls for it — no slash command, no manual trigger.
Beast uses progressive disclosure:
[Available skills] index listing each skill as name: description.skill_tool with the skill's name.SKILL.md body is loaded into the conversation and the agent follows the workflow.Only the one-line index is always in context; full bodies load only when needed.
Global skills (all projects):
~/.beast/skills/
git-commit/
SKILL.md
code-review/
SKILL.md
Local skills (this project only):
<project>/.beast/skills/
git-commit/
SKILL.md
debugging/
SKILL.md
Each skill is a directory containing a single SKILL.md. Directories
without a SKILL.md are ignored, and unreadable or malformed files are
skipped silently. A local skill overrides a global one of the same name.
A skill file has an optional YAML-style frontmatter block (with name
and description) followed by the workflow body.
---
name: git-commit
description: Create a conventional commit for the current changes and push it to GitHub.
---
# Git Commit
When this skill is invoked:
1. Inspect the current git status.
2. Review the changed files.
3. Create a conventional commit message.
4. Ask for approval before committing if required.
5. Push the commit to the configured remote.
## Guidelines
- Never commit secrets.
- Never use `git add -A` blindly.
- Review the diff before committing.
- Use conventional commit format.
description decides when the skill matches — make it specific about when the skill applies.name is present it is the skill's name; otherwise the directory name is used.
The skill tool is read-only and requires no approval. It is available in both Plan
and Build modes and to subagents spawned via task, and the skill index
appears in the system prompt for every run.
| Symptom | Fix |
|---|---|
| A skill is never loaded | Make its description more specific about when it applies, and confirm it is listed in the [Available skills] index in the system prompt. |
| The skill is not in the index | Check the path is <root>/<name>/SKILL.md, the file has a non-empty body, and frontmatter name/directory name are not blank. |
| A local skill is shadowed | A skill of the same name in ~/.beast/skills/ is overridden by the local one — rename one of them if you intended both. |
07 — Extend the tools
Beast can connect to
Model Context Protocol (MCP)
servers and expose their tools to the model alongside the built-in tools — web
search, database access, browser automation, issue trackers, and anything else a
server provides. Any conforming server works: hosted HTTP servers and local
stdio servers launched with npx, uvx, or a
plain executable.
task subagents.stdio and Streamable HTTP).
Exa web search is configured for you on first run in ~/.beast/mcp.json:
{
"servers": {
"exa": {
"enabled": true,
"transport": "http",
"url": "https://mcp.exa.ai/mcp",
"timeout": 30
}
}
}
Start Beast and ask naturally: "Search the web for the latest changes to the
MCP specification and summarize them." The agent will call
web_search_exa (and web_fetch_exa to read a page) and
answer from live results. You can also name a tool explicitly: "Use
web_fetch_exa to read this page."
Type /mcp to open the server manager. It connects to every enabled
server and shows a row per server with its scope, transport, and tool count. A
green dot means connected, yellow means enabled
but failed to connect (the error is shown beneath it), and dim
means disabled.
| Key | Action |
|---|---|
| a | Add a new server |
| Enter | Edit the highlighted server |
| Space | Enable / disable the highlighted server |
| d | Delete the highlighted server (asks for confirmation) |
| r | Reconnect and refresh the list |
| Esc | Close the screen |
Press a (or Enter on an existing row) to open the editor. The
name is the key under servers in mcp.json
and is fixed once the server exists. Choose the transport
(stdio or http), the scope (global or
local), and whether it is enabled.
npx, uvx, a binary), space-separated args, a JSON object of extra environment variables, and an optional working directory.Press Save. Beast writes the file atomically and reconnects.
| Scope | Path | Typical use |
|---|---|---|
| Global | ~/.beast/mcp.json | Personal servers (web search, etc.) |
| Local | <project>/.beast/mcp.json | Servers tied to one repository |
beast from.0600.command for stdio, url for http.{
"servers": {
"<name>": {
"enabled": true,
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"],
"env": { "KEY": "value" },
"cwd": "/optional/working/dir",
"timeout": 30
},
"<name-http>": {
"enabled": true,
"transport": "http",
"url": "https://mcp.exa.ai/mcp",
"headers": { "x-api-key": "..." },
"timeout": 30
}
}
}
| Field | Applies to | Required | Default | Description |
|---|---|---|---|---|
enabled | both | no | true | Whether Beast connects to the server |
transport | both | no | stdio | stdio or http (aliases: streamable-http, streamable, sse) |
command | stdio | yes | — | Executable to launch |
args | stdio | no | [] | Argument list |
env | stdio | no | {} | Extra environment variables merged over Beast's environment |
cwd | stdio | no | launch dir | Working directory for the child process |
url | http | yes | — | Streamable HTTP endpoint |
headers | http | no | {} | Extra HTTP headers (auth, etc.) |
timeout | both | no | 30 | Handshake and request timeout, in seconds |
Beast launches the process and keeps it alive for the session, exchanging
newline-delimited JSON-RPC over its standard input/output. The command
must be on PATH (or an absolute path) — npx requires Node,
uvx requires uv. If the process dies, Beast reconnects it on the next
call. The first npx run may download the package and be slow; raise
timeout if the handshake times out.
Beast sends JSON-RPC requests to the URL over Streamable HTTP, reusing the server's
session id and accepting both plain JSON and SSE responses. Authentication is
supplied through headers.
Filesystem (local, official reference server) — grants the agent access to a directory:
{
"servers": {
"filesystem": {
"enabled": true,
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/me/projects"]
}
}
}
Git (local, via uv):
{
"servers": {
"git": {
"transport": "stdio",
"command": "uvx",
"args": ["mcp-server-git", "--repository", "."]
}
}
}
Memory (local, persistent knowledge graph):
{
"servers": {
"memory": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}
More servers are listed in the MCP Registry and the official servers repository.
headers; stdio servers receive secrets through env.mcp.json (created with 0600). Treat it like settings.json and never commit it.$VAR expansion..beast/mcp.json is easy to commit by accident./mcp and press r if you edited mcp.json outside the app.task subagents and the file tools, so you can research and then edit in the same turn.| Symptom | Likely cause and fix |
|---|---|
Yellow dot with an error in /mcp | The server failed to connect. Check the url/command, your network, and that the command exists on PATH. |
command not found, or the process exits immediately | npx needs Node; uvx needs uv. Install it, or use an absolute path in command. |
| HTTP 403 from a hosted server | Some hosts reject non-browser clients. Use an API key header or a local server. |
| Handshake times out | Slow cold start or network. Increase timeout (for example 60). |
| A tool never appears / "unknown tool" | The server is not connected, or its tool name collides with a built-in (built-ins win). Check /mcp. |
| Local server seems ignored | A local server with the same name replaces the global one. Rename one of them. |
| The whole config is ignored | The file is not valid JSON. Beast treats a malformed file as empty. |
08 — Platforms
| Platform | Status |
|---|---|
| Linux x86_64 (glibc ≥ 2.39) | Supported |
| Windows (via WSL) | Supported |
| macOS | Not built |
Beast ships as a single self-contained binary — no Python installation required —
and its MCP client is implemented with the standard library, so nothing extra to
install beyond bwrap and rg.