Agent runs
Click Work with agent on an epic or a task (or press ⇧W with it open) and a worker takes the work: it claims each ready task, writes the code in its own git worktree, verifies it, commits it on its own branch and moves on. You can close the tab. Later you find the tasks done on the board and a branch with one commit per task, and your own checkout has no code changes.
How it works
Section titled “How it works”- Run card — the server works out the run at once: a new worktree on
vibedoc/<id>, or the epic’s existing worker. It shows the branch, the base, the allowed and denied tools and the budget. Nothing is created until you click Start worker; then you land on the worker’s chat on/chat. - Worktree —
~/.vibedoc/worktrees/<project>/<branch>(or under$VIBEDOC_HOME), outside your repo, with its own dependency install (the chat shows Setting up the worktree while it runs; a failed install shows its output) and its own dev server port, so a UI spec tests the branch and not the app you have running. - One task at a time — each task runs
/vibedoc:work <task>in a fresh Claude Code session. The task status lands in your checkout, so the board moves live. The code commit stays on the worker’s branch. - Verify — after each task a read-only review checks the code against the task. Critical or major findings get one fix in the same session. If they remain, the task is sent back and the worker waits on you.
- Finish — when the epic is done the worker chat shows what the branch changed, with Open PR, Merge into <base> and Remove worktree.
A worker is a chat: it shows in the sidebar’s Agents list and on /chat, and a worker that needs you counts in the inbox. If VibeDoc restarts, a running worker keeps going; a task that stopped while VibeDoc was down shows as Interrupted with Resume.
One epic has at most one worker. Workers on different epics run side by side, up to Workers at the same time. Starting work on an epic that already has a worker proposes sending the run to that worker, never a second worktree.
The limits
Section titled “The limits”-
No permission prompts mid-turn. A worker can’t stop to ask “may I run this?”, so it runs in a permission mode decided up front:
- Auto (the default): Claude Code’s own classifier approves safe commands and blocks risky ones, as in your own sessions in Auto mode. Pipes (
pnpm lint | tail -5),FOO=1 node x.mjsand builds just run. - Accept edits: edits go through, and a shell command runs only when every part of it matches the allowed tools. VibeDoc uses this when your Claude Code has no Auto mode yet, and the run card says so.
A call that is still refused shows in the worker’s chat. The review turn after each task runs in the same mode without Edit and Write: it can re-run the task’s checks, never change code.
- Auto (the default): Claude Code’s own classifier approves safe commands and blocks risky ones, as in your own sessions in Auto mode. Pipes (
-
Your setup comes along. By default a worker loads your Claude Code setup: your plugins, skills, hooks, global CLAUDE.md and permission rules, as when you type
claudein the worktree. Each task then starts with a bigger context (about 34k tokens instead of 8k). Your MCP servers and claude.ai connectors stay out unless you tick Also my MCP servers. Isolated gives the small, predictable setup that is the same on every machine. -
Neither is a sandbox. A worker that may run
pnpm *can run any package script, so any code, as you. Its fence is its own worktree, its budget, andgit pushandgh, which are always denied, whatever the mode or the settings say. -
Minimal environment. A worker gets only
PATH HOME USER SHELL LANG TERM TMPDIR, plus the names you list. Tokens in VibeDoc’s own environment never reach it unless you list them. -
Budgets. Each task has a turn budget (model round trips) and a time limit. Past either one, the task stops and the worker waits on you. Your answer resumes it with the budget again.
-
Usage limits. Near your Claude usage limit the worker shows Paused and continues by itself when the limit resets.
-
No interrupting a task. You talk to a worker only when it asks you something. To stop it, use Stop: the task stays in progress and nothing else is claimed.
-
The orchestrator chat is optional. Ask the orchestrator answers “who is working on what” from the live workers. It proposes runs only as the same run card and never starts anything or writes code.
Settings
Section titled “Settings”Settings → Workers writes workers in .vibedoc/settings.json:
| Setting | Default | What it does |
|---|---|---|
Permission mode (mode) |
auto |
auto or acceptEdits, for every turn of a run (shown on the run card) |
Setup (setup) |
mine |
mine: your Claude Code setup (plugins, skills, hooks, CLAUDE.md, permission rules) and its full tool set, like typing claude in the worktree. isolated: only the project’s settings, VibeDoc’s skills and six tools |
Your MCP servers (userMcp) |
off | With mine, also every MCP server and claude.ai connector you have (mail, drives…). Off: VibeDoc’s tools only |
Allowed tools (allowedTools) |
VibeDoc’s tools, Edit/Write/Read/Glob/Grep, git add/commit and the read-only git commands, pnpm/npm/yarn/bun/node/npx/tsc, read-only shell (ls, cat, head, tail, grep, sed -n, …) |
Claude Code permission rules, e.g. Bash(make *). Empty = the default list. Decides everything in Accept edits; in Auto, what it allows runs without the classifier |
Environment variables (env) |
none | Extra variable names a worker inherits, e.g. DATABASE_URL |
Workers at the same time (maxRunning) |
2 | A start past the limit is refused |
Turns (maxTurnsPerTask) |
60 | --max-turns for each task |
Minutes (taskTimeoutMin) |
30 | A task running longer is stopped |
verify |
true |
false skips the review after each task |
Workers need Claude Code logged in on this machine. They run under your Claude account, the same as a terminal session.