Docs
Use the Caprock app with Claude Code.
Caprock is a desktop app that keeps the ledger of every coding agent you run — Claude Code, Codex, OpenCode and Gemini CLI, the claude sessions you start in your own terminal included. Who is waiting on you, who is stuck, how close each plan is to its limit, across every agent, in one fast app. Free. Dollars come second: each pull request to release and what it cost, at list price. Inside the app is a local daemon that records every session and the screens that show it. Installing? Download the app. Everything it does, in one list: Features.
Quick start
Install and start Caprock.
- 1
Download the app and open it
macOS, Windows or Linux, from the install page. It starts its daemon, or uses one already running. - 2
Start an agent
New agent (⇧⌘N) starts Claude Code, Codex, OpenCode, Gemini CLI, Grok Build or Hermes Agent — whichever is installed — in a tab of its project. Or keep running claude in your own terminal: it appears on the Home screen. - 3
Let the hooks in
If Claude Code's hooks are not installed, the Home screen says so with an Install hooks button. Without them Caprock still reads every session from its transcript, a few seconds late.
No desktop — a server, CI? Run the daemon alone: without the app.
1The app window
Your projects and their sessions on the left, a terminal for each session on the right, and the dashboard in the same window. The window talks to the same local daemon as a browser and your phone, so a session started in one is live in the others.
Sidebar
New agent, Quick chat and Add project at the top, then Today: what every agent has spent today, how many run and wait on you, and your Claude plan's 5-hour and weekly windows; its Waiting count opens the session that has waited longest. Below it, every project with its agent sessions, one row each with a dot and a word for what it is doing: working (green), waiting (amber), asksat a permission prompt, looping (red), idle or done. A switch beside the heading lists them by project or in the tabs' order. Dashboard at the bottom opens Home, Work, Cost, Lifetime and the other screens inside the window.Projects
Caprock lists the repositories your sessions ran in. ⌘O adds a folder, makes a new one or clones a repository. Branch, changed files and ahead/behind follow commits and checkouts made anywhere, the terminal included. Removing a project from the list never touches its files.Project instructions
A system prompt per project. Write it as you add the project, or later from the New agent sheet. Every Claude Code session started in it gets them appended to its system prompt (--append-system-prompt), and every Codex session as its developer instructions, a resumed one too. Grok Build gets them as its rules (--rules). OpenCode, Gemini CLI and Hermes Agent do not get them. CLAUDE.md →Tabs
One strip of tabs, in the order you opened them: an agent session, a shell or a file each. Tabs come back when you reopen the app. Closing a tab (⌘W) ends an idle agent, its conversation saved, and asks about one still working: keep it running or stop it. Settings → Closing a tab can make it always do one. A chat Caprock started that has no tab ends after 12 hours idle, its conversation saved to continue; Settings → New sessions → End idle chats after sets 2 h, 12 h, 24 h or Never.Split panes
⌘E opens a new shell beside the terminal in front, ⇧⌘E below it; ⇧Enter on a session in the palette opens it there. Up to four panes a tab; ⌘[ and ⌘] move between them, and ⌘W closes the focused pane while its session keeps running.Command palette
⌘K. Sessions waiting on you come first, then actions, tabs, sessions and projects. Type a task that matches nothing — “Add rate limiting to the API” — and Enter opens New agent with it as the first message, in a new worktree named after it.New copies
New copy from a branch in New agent makes a git worktree, copies the ignored files listed in .worktreeinclude (such as .env) and runs the project's setup command, such as npm install, before the agent starts. Attempts 2–4 gives one agent the same message in that many copies, and Compare attempts shows each one's changes, cost and time. From a GitHub issue or pull request… fills in the copy and the first message. Clean up copies… lists every worktree with its size and whether it is merged, pushed or has changes, and removes only Caprock's own.Saved prompts and commands
Settings → Saved prompts and commands keeps what you type over and over, for every project or one. ⌘K or + → Run saved…: a prompt goes to the agent in front, a command runs in a new shell tab. On a paired phone, your prompts are chips above the message field.Terminal
A real terminal for every session Caprock started and every shell, and it keeps running when the app or the daemon restarts. Scrolled up, new output never moves what you are reading. Drop a file on it and its path is typed at the prompt, quoted. ⌘F finds text in it.Chat and inspector
An agent tab switches between its terminal and its chat: your prompts, what the agent wrote, and each tool call on one line. The inspector (⌘I) shows the session's agent, model, folder, cost, tokens and context, the permission prompt with its buttons, and the uncommitted changes in its checkout.Changes
Click a worktree's ±N in the sidebar, or Review and commit in the inspector. Stage, unstage or discard a file or a hunk, read the diff unified or side by side, then Commit (⌘↵) or Commit & Push (⇧⌘↵). Push never forces, Pull only fast-forwards, and your git hooks run. Click a line number to leave a note on it; Send to agent types every note, with its file, lines and code, into the agent in that worktree. A commit or push your hook refused, files left in conflict and a pull request's failing checks each get Fix with agent.Open in your editor
Right-click a project or a worktree to open it in VS Code, Cursor, Zed or a JetBrains IDE — whichever are installed. Settings → Editor picks the default.Permission mode
A new install starts sessions in Accept edits · asks first: the agent edits files and asks before running a command. Pick Bypass · never asks once in the New agent sheet and it is kept for the next agent. The first time on a computer the sheet says what bypass means, and its button reads Accept and start. Settings → New sessions → Start in changes it too.Status strip
Whether the daemon is live, awake while Caprock keeps the computer from sleeping, and a newer Caprock when one is out. With the sidebar hidden (⌘\) it also shows the 5-hour and 7-day plan windows and today's spend.Keep awake
While agents work, Caprock stops the computer sleeping for inactivity and lets go once nothing is working. The screen can still turn off, and closing a laptop's lid still sleeps it. Settings → Keep awake: Off, While agents work (the default) or Always.
Keyboard
| macOS | Does |
|---|---|
| ⌘T | New shell in the folder of the tab |
| ⇧⌘N | New agent session |
| ⌘O | Add a project (folder, new, clone) |
| ⌘1–8, ⌘9 | A tab by position; the last tab |
| ⌃Tab, ⇧⌘[ ] | Next and previous tab |
| ⌘W | Close the tab or pane (an idle agent ends; a working one asks) |
| ⌘E, ⇧⌘E | Split: a new shell beside, below |
| ⌘[ ] | Previous and next pane |
| ⌘J | Next session waiting on you |
| ⌘F | Find in the terminal |
| ⌘K | Command palette |
| ⌘I | Inspector |
| ⌘\ | Hide or show the sidebar |
| ⌘D, ⌘0 | Dashboard |
| ⌘R | Reload the window |
On Windows and Linux each is Ctrl+Shift with the same letter; Ctrl+Shift+C and Ctrl+Shift+V stay the terminal's copy and paste, and Reload is F5. The terminal's own keys (Ctrl+C, Ctrl+W, Option as Meta) always reach the terminal.
2Menu bar, badge and notifications
Menu bar
A tray icon on Windows and Linux. On macOS a click opens a small panel under the icon: what needs you first (a permission prompt in a Claude Code session Caprock started, with Approve when the whole request fits, else Deny and Review in Caprock), then what is running with its cost, today's spend, and the Claude and Codex 5-hour and 7-day windows. The number of sessions waiting on you sits beside the icon, and a plan window joins it, named, once it is 80% full.Badge
The Dock icon counts the sessions that need you — a permission prompt, a question, a plan to approve or a turn that stopped on an error — and clears when none do. A Done session is not counted.Global shortcut
⌃⌥⌘C on macOS, Win+Alt+C on Windows and Linux, brings the window up from any app. Change it or turn it off in Settings. Wayland does not give apps global shortcuts.Closing the window
On macOS Caprock stays in the menu bar; ⌘Q quits. On Windows and Linux closing quits. Quitting never stops the daemon or a session.Notifications
When an agent stops on a permission prompt, the app names the project, the session and what it wants to do. On macOS and Linux, for a Claude Code session Caprock started, the notification has Deny, and Approve when it shows the whole request on one line; a longer one offers Open in Caprock. It never offers “always allow”. On Linux the buttons appear where the desktop draws them; on Windows a click opens the session with its buttons. A turn that ends on a question reads Needs your answer, one that stopped on an error says so, and one that ends asking nothing is Done and raises no notification. Settings → Desktop notifications → When a session needs you turns them all off.
3GitHub
Settings → GitHub connects your account: use your GitHub CLI login, or paste a token. Caprock then talks to api.github.com from the daemon; the token never reaches the dashboard or your phone, and nothing is sent to GitHub until you connect.
Clone from your repositories
⌘O → Clone lists your repositories and your organizations'.Put a project on GitHub
A project with no remote offers Create a GitHub repository…, private unless you untick it.Open a pull request
From a worktree's Changes view, with the title and description filled from the branch and its commits.Follow it
Checks, reviews and whether it can be merged, in the Changes view and on the worktree's row in the sidebar.
4Updates
When a newer Caprock is out, a card in the corner says so, once per version, and the status strip keeps an Update button. One press downloads it while you keep working, checks it against Caprock's update key, installs it and restarts the app. Every session keeps running, and the tabs, splits, sidebar, window and anything you had half typed come back as they were.
Checking
On its first launch the app asks once whether to check for updates automatically; with yes, it asks GitHub for the newest version every 15 minutes, soon after the computer wakes and when you come back to the window, and Settings → Updates turns it off again. There, New version can also be set to update automatically, restarting only while no agent is working or waiting on you. Check for Updates… in the app menu, the tray menu and the palette works either way. Nothing about you or your work is sent.Where the app updates itself
The macOS app (from the .dmg or Homebrew — move it to Applications first), the Windows installer and the Linux AppImage. A Homebrew cask install updates itself, and brew upgrade leaves it alone.Where it does not
The .deb and .rpm packages belong to your package manager: download the new one and install it the same way. A daemon from Homebrew or Scoop keeps its own upgrade command; the app never replaces a daemon it did not install.
5Your phone
The phone opens the same Caprock in its browser and reaches your computer from anywhere, on Wi-Fi or mobile data, through an end-to-end encrypted relay that carries only ciphertext. No account, nothing from an app store. Claude Code on your phone →
- 1
Open it
In the app: Settings → Use on your phone. The command palette (⌘K / Ctrl+Shift+K) has Open Caprock on your phone. - 2
Connect a phone
Press Connect a phone. The tick under it, It can control sessions, is on by default: the phone can start agents, type, approve and stop. Untick it for a phone that should only look. The press turns access from anywhere on, and it stays on across restarts until you turn it off under How it works. - 3
Scan
Point the phone's camera at the QR code and open the link. The code works once, for five minutes. The phone opens on a Ready card: which computer, and whether it can type. - 4
Put it on the home screen
Android, in Chrome: Install the Caprock app on the page. iPhone, in Safari: Share → Add to Home Screen, then paste the link into the home-screen app once (Copy link, under How it works while the code is up), because it keeps its own storage. - 5
Continue a session
Open it from Continue on the phone and type in its chat. Answer approvals and stop it from there; + Start work on the full dashboard starts a new agent in a clone, a new project or a worktree. - 6
Alerts
Settings → Telegram sends a message through a bot you own when a Claude Code session needs approval or has finished.
A phone you let control sessions can also answer permission prompts with a button, and commit and push. It types only into sessions Caprock started. It reconnects by itself, and a message sent while offline waits as Will send when connected. A machine with no internet can still pair a phone over the Wi-Fi from a terminal: caprock up --lan, then caprock pair.
6The screens
Home
Live activity and cost for every session.Work
Every piece of work on the machine on its way to a release, one row per branch at its furthest stage: agent, pull request, CI, merged, released.Chats
Conversations started to ask something rather than to work on a repository, listed apart from the work sessions.Session Detail
Open any session, including one that finished days ago, and walk it from the start: what was run, what it cost, what Claude said.Cost
Your usage at each provider's list prices, beside what your plan actually costs.Lifetime
Everything you ever ran through Caprock: cost per project, per day and per model, tool-usage distribution, average session length and cache hit-rate.Week
A card of what this machine's agents did in seven days, made to be posted, in a landscape and a portrait layout.Pipeline
One repository's pull requests on their way to a release: CI, review, merge and release, with what the agents spent on each.Memory
Search agent replies across sessions and repositories.Second Brain
Answers worth keeping — an idea, a decision, a finding, an open question — kept as memories, each linked to its project, its topics and the moment in the session it came from.Tasks
Run tasks unattended, with required checks.Mail
Caprock Mail: every IMAP account in one inbox, with search over the mail kept on this computer.
7Codex, OpenCode, Gemini CLI, DeepSeek Harness and Hermes Agent
Caprock shows these agents alongside Claude Code. Their costs add up in the same dashboard, with no extra installation.
OpenCode
Caprock finds OpenCode's database and opens it read-only. Sessions from before you installed Caprock are included, and costs are OpenCode's own figures, so they match what it reports. Rows carry an oc mark.OpenAI Codex
Read from the transcript Codex writes per session; rows carry a cdx mark. Codex reports tokens but not cost, so turns are priced from Caprock's table of OpenAI list prices. A turn that does not name its model keeps its tokens and shows no cost rather than a guess. Codex usage and cost →DeepSeek Harness
Its session transcripts are read the same way and priced from the same table.Hermes Agent
Read-only from Hermes's own database, sessions from before Caprock included. Costs are Hermes's own figures, never re-priced; its cron jobs and gateway chats are counted and shown apart.One agent at a time
The Home screen header carries all / claude / opencode / gemini / codex / deepseek / hermes, and the whole screen follows it. It appears only on a machine that runs more than one.
What Caprock does with each
It starts Claude Code, Codex, OpenCode, Gemini CLI, Grok Build and Hermes Agent — whichever is installed — in a terminal you can type into, and continues Claude Code, Codex and OpenCode sessions after they end. DeepSeek Harness sessions are read only, Gemini CLI sessions are read when Caprock started them, and Grok Build is started but its turns and cost are not read. The task runner works with Claude Code only; project instructions reach Claude Code, Codex and Grok Build. Activity from the other agents refreshes every few seconds rather than instantly; Cost and Lifetime are unaffected.
8Start, steer and continue sessions
In the app, New agent (⇧⌘N) — or New session on the dashboard — starts Claude Code, Codex, OpenCode, Gemini CLI, Grok Build or Hermes Agent in a folder, a new worktree or a new folder. Type into it, answer its permission prompts and stop it; a Claude Code, Codex or OpenCode session can be continued after it ends. Sessions Caprock starts get your login-shell environment (caprock status says so), so tools like gcloud work as in your terminal. External sessions are observe-only; Caprock never signals a process it didn't start. Resuming sessions →
9Run tasks unattended (advanced, opt-in)
This is the one part of Caprock that starts sessions on its own, so it is off until you press two buttons on the Tasks screen, in order:
- 1
Turn on the task runner
Creates the queue directory and enables the task board without restarting the daemon. It confirms first, naming the queue directory and the repository it is about to use. caprock up --hive <dir> --repo <dir> does the same from a terminal. - 2
Start orchestrator
Starts the orchestrator: a session that hands each queued task to a worker, a Claude Code session of its own. Nothing runs until you press it. Write a task first: on an empty board it has nothing to assign.
Done means the checks passed
A task carries done_criteria: plain commands such as tests, typecheck and lint. When a session reports done, Caprock runs them itself. All exit 0 and the task reaches Done; one fails and the output goes back to the session; after three rounds it stops and asks you.Your tree is never touched
One Claude Code session per task, each in its own git worktree on a caprock/ branch. A task with no done_criteria can never be marked done on a worker's say-so.The checks are not sandboxed
They run in a real checkout, with your privileges, unattended, up to five minutes per command. Treat them as commands you run yourself: go build ./... leaves a binary behind as it would in your own tree.Review and merge the changes yourself
A finished card shows the diff, the checks that passed, the branch and the git command that merges it. Caprock never writes to your branches.
Before you turn it on
Its sessions skip permission prompts
They act on a task in a worktree of your repo without asking you again. Give each task a budget.Independent tasks only
Nothing merges branches, and nothing notices two sessions editing the same file. Assign different files to tasks that run at the same time.
10Without the app
On a server, in CI or on a machine with no desktop, the daemon runs alone and serves the same screens to a browser at http://127.0.0.1:22776. Install it with Homebrew, Scoop or Go — every way is on the install page.
Start
caprock up # daemon + dashboard at http://127.0.0.1:22776 claude # any terminal — it shows up on the Home screen caprock down # stop; your SQLite data is kept
On first run caprock up asks before each of its two edits to ~/.claude/settings.json. Say no to either; the file is backed up before any edit.
The hook shim
Makes activity live. Say no and transcript tailing still shows every session, a few seconds behind. Remove it later with caprock hooks uninstall.The status line
Sets statusLine.command so the Cost screen can show your plan-limit windows (5h/7d, Pro and Max). Skipped if you already have one of your own; caprock statusline install | uninstall adds or removes it later. What the line shows →
CLI
caprock up [--hive <dir>] [--repo <dir>] caprock down caprock status # includes which task queue is active caprock tasks # the board caprock task create --title <t> --done-criteria <cmd> [--budget <usd>] caprock hooks install | uninstall | status caprock statusline install | uninstall # plan-limit windows on the Cost screen caprock service install | uninstall | status # start on login, survives a reboot caprock report [--json | --markdown] # print your measured usage, ready to paste caprock export [events | sessions] [--format tsv|csv|jsonl] [--since 30d] [--agent <name>] caprock license [set <key> | clear] # activate a paid plan
caprock export writes every turn and tool call from all six agents, in one set of columns, as TSV, CSV or JSON lines. It reads the database read-only, so it works with the daemon stopped. The columns are documented in the schema.
11Trust
The daemon binds 127.0.0.1 by default. No telemetry, no account, all data on your disk. Nothing reaches the network unless you switch it on or ask for it: a check for new releases (sending nothing about you), the app's update download from GitHub when you press Update, the GitHub connection, the end-to-end encrypted relay when you connect a phone or another computer, your mail servers once you add an account (and the AI provider you pick, with Mail's AI on), Gemini answering questions on your own key, and a weekly report and phone alerts to your own Telegram bot. Three things go to caprock.dev, each only when you press the button, after the screen says what goes: a survey answer, a bug report with the screenshots you attached, and the week card you chose to post to X, Threads or LinkedIn. Sessions that run in a vendor's cloud or inside CI are not observed; Caprock sees the machines it is installed on.
Every dollar Caprock shows is an estimate at API list price, as Claude Code's own /usage is: not a bill, and on a flat plan not money saved. The table is dated in pricing/pricing.json. Source and roadmap: GitHub.
See every coding agent you run.
Who is waiting on you, who is stuck, how close the limit is. Free and open source; nothing leaves your machine.
Notarized by Apple. One file for Apple silicon and Intel, macOS 13 or later.
Or run it yourself:
Paste in Terminal: it installs Caprock and opens it.Or with Homebrew: brew install --cask dspv/tap/caprock-app