Skip to content
AgentDock
MITOpen source and self-hosted

Every agent you run, on one screen.

AgentDock is a self-hosted control plane for Claude Code and Codex. See, steer, approve and price every run across repos and machines.

agentdock.example.com/projects/atlas-api/fleet
Orchestrator running
SlotIssueStatusLast checkpointPR
cs-a#412 Rate-limit the export endpointopusrunningTests for token bucket#431
cs-b#408 Invoice PDF renders blank totalssonnetpromptWaiting on a permission promptnone
cs-c#415 Move webhooks to the outboxopusrunningMigration draftednone
cs-d#399 Dark mode for the settings pagesonnetidleGreen and mergeable#428

The Fleet screen, with illustrative data.

Built on the tools your fleet already runs on

ClaudeGitHubtmuxGitDockerPostgreSQLRedisBunCaddyCloudflareTailscaleTelegramHomebrewn8nNext.jsNestJS

A fleet without a dock is a pile of tmux sessions.

Agents spread over worktrees, markdown files inside .git, GitHub labels and more than one machine. Nothing shows the whole fleet, nothing remembers what ran, and nothing records what it cost.

AgentDock reads all of it, from every machine, into one live screen.

you, every hour
  1. $ tmux ls# which slots are alive, on this machine only
  2. $ cat .git/cs-orchestrator/*/round-1420.md# what the last round decided
  3. $ tmux capture-pane -pt cs-b# is slot b stuck on a prompt?
  4. $ gh pr list --label cs:ready# what is green, what is blocked
  5. $ ssh build-box tmux ls# now repeat for the other machine
  6. $ du -sh ~/.claude/projects# and what did all of this cost?

See it, steer it, approve it, pay for it.

See

Every slot on every machine, live.

A runner on each machine reports tmux sessions, worktrees, the orchestrator board and open pull requests. You get one fleet view instead of an SSH tour.

  • Slot status: running, prompt, quota, idle
  • Checkpoints each worker writes, with the PR and its checks
  • Runs, rounds and sessions kept as history
Fleet across machines
mac-studioonline

darwin-arm64 · tmux 3.5 · claude 2.x · gh

  • atlas-api2/4 busy
  • checkout-web1/2 busy
build-boxonline

linux-x64 · tmux 3.5 · claude 2.x · gh

  • ledger3/5 busy
  • docs-site0/1 busy
runningdispatchedpromptquotaidle
Steer

Start, stop and talk to agents without a terminal.

Start an orchestrator round, stop one slot, or send a worker a note it reads on its next turn. Admins can attach to the session itself.

  • Read-only live pane, captured only while someone watches
  • Message a worker; stop a slot, keep its branch
  • Audited terminal attach for the hard cases
cs-b · live pane (read-only)
streaming
> Read ./.orchestrator-brief.md
Reading the brief for #408: invoice PDF renders blank totals.
● Bash(bun test apps/api/src/invoices)
✗ totals render for multi-currency invoices
Message the worker…
Approve

Green is not merged until a person says so.

Turn on merge approval per project and green pull requests wait in a queue with their checks and diff. Approve from the browser or from Telegram.

  • Decisions bind to the head commit
  • Request changes with a note the worker receives
  • AgentDock never merges or reviews on its own
Approvals · 2 waiting

Rate-limit the export endpoint

#431 · slot a · closes #412 · head 9f2c1e7

+214 -38

Adds a token bucket per API key in front of /exports, returns 429 with Retry-After, and covers it with 9 tests.

check test build
Try it

A decision binds to the head commit. Push again and it goes stale, so nothing merges that a person did not see. Needs a Code Sentinel release with merge approval support.

Pay

Know what every run would cost, and cap it.

Tokens from session transcripts and live telemetry, priced against a versioned price table. Budgets per project or person stop new spend at the limit.

  • Cost by project, model, runtime, issue and slot
  • Unknown models show as unpriced, never as zero
  • Alerts at 50, 80 and 100 percent
Usage · last 7 days

API-equivalent cost

$187.90

Requests

6,418

Unpriced

0

  • opus
  • sonnet

API-equivalent cost per day by model
Categoryopussonnet
Mon$18$6
Tue$25$7
Wed$21$10
Thu$31$8
Fri$28$12
Sat$9$3
Sun$7$2
atlas-api · weekly budget$151 of $210. At 100% new runs are refused; running agents finish.

Your agent machines never open a port.

Each machine runs one small runner that dials out to your server over a WebSocket. It executes a fixed list of typed commands, never a shell string, and only inside the repos you connected.

Your browser

any device

Same-origin web app, cookie session, live updates over WebSocket.

HTTPS + WSS

Control plane

your server, Docker Compose

webNext.js 16
apiNestJS 11
postgressource of truth
redisschedule timers
WSS, dialed out

agentdock-runner on mac-studio

macOS, arm64

tmuxgit worktreesclaudecodexgh

agentdock-runner on build-box

Linux, x64

tmuxgit worktreesclaudecodexgh

No keys to hand over

Claude, Codex and GitHub credentials stay on the runner machine. The server never sees an API key.

Metadata, not transcripts

Sessions are stored as models, token counts and tool names. Prompts and responses are not.

Nothing phones home

No telemetry, no analytics, no update pings. The only outbound calls are the ones you configure.

The rest of the job, already built.

Skills from skills.sh

Search the catalog, read the files before you install, then add a skill to a repo as a pull request or to a profile. Run it headless with a live log.

  • cs-securityAndreyBegma/claude-code-plugininstall to project
  • frontend-designanthropics/skillsinstall to profile
  • tddmattpocock/skillsinstall to project

Schedules

Cron rules in your time zone that run a skill or the next orchestrator round.

0 9 * * 1-5

cs-security on ledger, Europe/Berlin

MTWTFSS

Telegram

Alerts when a worker needs you, with one-tap approval. Long polling, so no public URL.

#431 is green and waiting. Rate-limit the export endpoint, atlas-api.

ApproveRequest changes

Signed webhooks, both ways

Let CI start a skill when a build fails. Send fleet events to n8n or your own bot, HMAC-signed with retries and a delivery log.

POST https://n8n.example.com/hook
X-AgentDock-Event: pr.merged
X-AgentDock-Signature: t=1760361600,v1=5c0e…

{ "id": "evt_80412", "type": "pr.merged",
  "project": { "repo": "acme/atlas-api" }, "slot": "a" }

Read-only GitHub App

Optional. Push events replace polling, so the queue updates in seconds. It never writes to GitHub.

issuespull_requestcheck_runstatuspushPolling relaxes from 60 seconds to 10 minutes while deliveries arrive.

Hash-chained audit

Every command, approval and attach, in an append-only log the database refuses to edit.

9f2ca71e03bdc4f8

Teams and roles

Invite-only registration. Per-project access that can only narrow a role.

admineverything, incl. terminal attach
operatorwatch and steer assigned projects
viewerprogress, history and cost

Built by the fleet it manages.

AgentDock drives the Code Sentinel orchestrator, a Claude Code plugin, and AgentDock itself was built with it: specs written through an interview, issues labelled ready, slots built in parallel and merged on green.

commits
402commits
merged pull requests
161merged pull requests
specs shipped
23specs shipped
days to ship milestones M1 to M3
7days to ship milestones M1 to M3
How the orchestrator works
  1. /code-sentinel:spec

    An interview turns an idea into an issue with a parallel plan.

  2. cs:ready

    The label marks it safe for the fleet to pick up.

  3. /code-sentinel:orchestrator

    Workers build each slot in its own worktree and tmux session.

  4. merge

    Green pull requests merge, or wait for your approval.

Up in ten minutes, on hardware you own.

Run the control plane next to your agents or on a small server. Then install one runner per machine and pair it with a one-time code from the admin page.

  • Docker for PostgreSQL and Redis, Bun and Node 24 for the apps
  • macOS or Linux runners with tmux, git, gh and Claude Code
  • No inbound port on any agent machine
Full install guide
Control plane, from sourcesh
git clone https://github.com/AndreyBegma/AgentDock && cd AgentDockbun installcp docker/.env.example docker/.envcp apps/api/.env.example apps/api/.envcp apps/web/.env.example apps/web/.envbun run db:setup       # PostgreSQL + Redis in Docker, migrations, seedbun run admin:create   # the first adminbun run start:dev      # web on :3517, API on :8180

Questions

Something missing? Open an issue on GitHub and it will end up here.

No. It never touches Anthropic or OpenAI keys and makes no model calls itself. Agents run under your own accounts and subscriptions. The cost it shows is API-equivalent: what the recorded tokens would cost at public prices, so you can compare runs and set budgets.

Partial today. Codex runtime profiles and skill installs work, and Codex sessions are listed, but their transcripts are not parsed yet, so they carry no tokens or cost. Codex workers inside orchestrator slots are on the roadmap as milestone M4.

For the fleet features, yes: AgentDock starts and observes the Code Sentinel orchestrator rather than scheduling work itself. Sessions, usage, skills, schedules and notifications work for any Claude Code session on a paired machine.

Only what you configure: GitHub App calls, Telegram messages and your outbound webhooks. Runners talk to your server, to GitHub through gh, and to skills.sh when someone searches. Details are in Data and privacy.

Yes. That is the point of the runner. Each machine dials out to your server, so a laptop, a build box and a home server can all report to one dashboard without VPNs or open ports.

Not yet. The reference stack is Docker Compose with images built from the repository, described step by step in Docker Compose. The runner is published on npm and Homebrew.

Give your agents a dock.

Free, MIT licensed, and running on your own hardware.