Quickstart
From nothing to a verified change, step by step: install, start the host, make a practice repository with a failing test, let an agent fix it, and read how it was verified.
This walks one change from nothing to verified in a practice repository, so nothing of yours is at stake. About ten minutes once your agent is signed in.
What you need
- git and a POSIX shell (macOS or Linux; see the platform table).
- Node 18 or later, with
npx. The built-in agents are npm packages Devplane starts withnpx, so the first start needs network access to npm. - An agent, signed in. This page uses Claude Code: install it and run
claudeonce to log in. Any other agent works with--agent. - Two terminals. The first runs the host; the second is where you work.
- A GitHub sign-in (
devplane login github), only if you want the Forge view or pull requests. Not needed here.
1. Install and check
curl -LsSf https://github.com/hupe1980/devplane/releases/latest/download/devplane-installer.sh | sh
devplane --version
devplane doctorOther ways in (npm, cargo, Windows) are on Install. doctor will say host: not running and hooks: not installed. Both are expected at this point.
2. Start the host (terminal 1)
devplane openWith no host running, this terminal becomes the host until ctrl-c, and your browser opens the workbench on the Inbox. Leave it running. Everything that starts or steers an agent needs it.
If it says the port is taken, see Troubleshooting.
3. Make a practice repository (terminal 2)
A two-line program and a test that fails:
mkdir devplane-demo && cd devplane-demo
git init -b main
cat > greet.sh <<'EOF'
#!/bin/sh
echo "Hello"
EOF
cat > test.sh <<'EOF'
#!/bin/sh
[ "$(sh greet.sh)" = "Hello, world" ] || { echo "no name: got '$(sh greet.sh)'"; exit 1; }
[ "$(sh greet.sh Ada)" = "Hello, Ada" ] || { echo "Ada: got '$(sh greet.sh Ada)'"; exit 1; }
echo ok
EOF4. Say what “done” means
# devplane.toml
[gates]
check = ["sh test.sh"]Save that as devplane.toml, then commit everything: a change starts from a clean checkout, and the gate is read from what you committed, not from the agent’s branch.
git add -A && git commit -m "a greeting and its test"
devplane check # what the file will do
devplane gate # run the check here, now$ devplane gate
failed sh test.sh exit 1
check failed: sh test.shRed, as it should be: that is the work.
5. Trust the repository
devplane trust .A headless agent runs a repository’s own hooks and MCP servers without asking, so Devplane starts no agent in a repository you have not trusted. trust lists what is there (here: nothing), asks, and needs the host from step 2.
6. Start a change
devplane change start "make greet.sh print 'Hello, <name>' for its first argument, and 'Hello, world' without one, so sh test.sh passes"started make greet.sh print 'Hello, <name>' …
branch change/make-greet-sh-print-hello-3f9a1c
worktree …/devplane-demo/.claude/worktrees/make-greet-sh-print-hello-3f9a1c
devplane change verify c-3f9a…Devplane made an isolated worktree on its own branch, started Claude Code in it with your sentence as the prompt, and will run your check when the agent says it is finished. Your own checkout is untouched. The last line carries the change’s id; any unambiguous prefix of it works below, and devplane change list shows it again.
7. Supervise
The agent may ask before it edits a file or runs a command. Those questions land in the Inbox in the browser, and in the terminal:
devplane inbox
devplane answer <ask> --allow # the id is the one `inbox` prints
devplane change show <id> # state, runs, what the checks said
devplane watch <run> # follow the agent, like tail -f (the run id is in `change show`)If the check is red when the agent stops, the failing lines go back to the same agent, a bounded number of times, then to you.
8. Verified
$ devplane change show c-3f9a
make greet.sh print 'Hello, <name>' … c-3f9a…
state ✓ verified
gates `check` exited zero against the working tree as it stands
branch change/make-greet-sh-print-hello-3f9a1cVerified means your check passed, and the tree it ran against (uncommitted files included) is the tree now. The agent saying it is done is not enough. Edit any file in the worktree and it reads stale until the check runs again (devplane change verify <id>). The state line says verified · 1 check weakened if the agent’s diff loosened a test instead of fixing the code. See Verified done.
9. Review, offer, finish
devplane change review <id> # weakened checks first, then every file
devplane change offer <id> # opens a pull request, or prints the push and the address
devplane change export <id> # the certificate: what ran, against which commit
devplane change finish <id> # accept it; removes nothing
devplane change archive <id> # remove the worktree; keep the branch and the recordThe practice repository has no remote and no [github] pull_request = true, so offer pushes nothing and prints the git push line and the address that opens the pull request. In the workbench the same change is under Changes, with its Review, Gates and Ledger.
10. Ask afterwards
devplane audit # everything, newest first
devplane audit --without-me # only what a rule, a clock or nobody decided instead of you2026-09-26T18:04:11 devplane gate:run sh test.sh
↳ check passed
2026-09-26T18:02:40 person agent:tool.use Edit: greet.shEvery decision names its authority (person, rule, timer, nobody or devplane). See The decision log.
Next
- Your own repositories. The same steps: a
devplane.tomlwith your realcheck, committed, thentrustandchange start. Add prohibitions with[policy]. - Sessions you start yourself.
devplane connect claudeinstalls hooks into your Claude Code user settings (it shows the diff and asks), sodevplane lsand the Inbox show your terminal and editor sessions too, with cost and context. See Watching sessions. - A spec.
devplane change start --spec specs/001-… --task REQ-3 "…". See Working to a specification. - The window, surface by surface. The workbench tour — the Inbox, Changes, Sessions, Specifications, the Ledger, Forge, Reports and Setup.
- Something wrong? Troubleshooting.
Reading commands (ls, inbox, audit, change show, …) work with the host stopped; a command that starts, steers or answers a driven agent needs it and says so.
Something wrong or out of date? Edit this page.