Let agents write. You decide what ships.

AgentDock sits between your AI coding agent and your codebase — approving writes, catching duplicate code, tracking cost.

How it works

Claude Code · Node.js SDK · Python SDK · File watcher

1 pending · src/api/users/[id]/route.ts
1- export async function handler(req, res) {
2- const { id } = req.query;
3- await db.query(
4- `DELETE FROM users WHERE id=${id}`
5- );
6+ export async function DELETE(
7+ req: NextRequest,
8+ { params }: { params: { id: string } }
9+ ) {
10+ await prisma.user.delete({ where: { id: params.id } });
claude-code · 2s ago
Reject✓ Approve

The problem

01

You have no idea what it changed.

Your agent ran for 40 minutes and wrote 23 files. You reviewed the summary. That is not the same as reviewing the code.

02

It rewrote that utility three times.

Agents don't read your codebase before writing. They invent. You end up with the same function in four places, none of them right.

03

The PR looked clean. The bug shipped.

A diff that passes CI is not a diff you've reviewed. Agents are fast and confident and sometimes wrong. You need a gate.

How it works

Wired in minutes. Works with every agent.

01

Setup

Two environment variables.

Point your agent at AgentDock with an API key. Add the pre-tool hook to your Claude Code settings. Takes two minutes.

AGENTDOCK_API_KEY=ah_live_...
AGENTDOCK_BASE_URL=https://your.agentdock.app
AGENTDOCK_REQUIRE_APPROVAL=true
02

In motion

Nothing lands until you say so.

File writes, bash commands, and tool calls stream to AgentDock in real time. The agent pauses and waits. You have a complete diff before anything touches your repo.

03

In control

Review the diff. Set policies.

One click to approve or reject, with a note the agent sees. Or set rules that auto-approve test files and always require review for anything in src/lib.

What you get

Everything you need to trust your agents.

Approval Workflow

Every file write lands in a review queue. Agents block until you approve. Reject with a note; the agent sees why and can course-correct.

Cost Tracking

Token usage and cost per session, per task, per model. Know what each agent run costs before it becomes a problem.

Duplication Detection

AgentDock indexes your codebase and compares every proposed write. It flags when an agent is about to rewrite something that already exists.

structural match · 94% · src/utils/format.ts:42

Proposed

function formatCurrency(
  amount: number,
  currency = 'USD'
) {
  return new Intl.NumberFormat('en-US', {
    style: 'currency', currency,
  }).format(amount);
}

Existing

function formatAmount(
  value: number,
  currencyCode = 'USD'
) {
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: currencyCode,
  }).format(value);
}
Full Audit Log

Every event, every change, every decision. A complete record of what your agents did, searchable and filterable.

Integrations

Works with what you already run.

Claude Code hooks, Node.js and Python SDKs, and a file watcher for any other agent that writes files.

Claude Code

.claude/settings.json

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Write|Edit|Bash",
      "hooks": [{
        "type": "command",
        "command": "npx agentdock-hook pre",
        "timeout": 30
      }]
    }],
    "PostToolUse": [{
      "matcher": ".*",
      "hooks": [{
        "type": "command",
        "command": "npx agentdock-hook post"
      }]
    }]
  }
}

Node.js SDK

npm install agentdock-sdk

import Anthropic from "@anthropic-ai/sdk";
import { AgentDock } from "agentdock-sdk";

const hub = new AgentDock({
  apiKey: process.env.AGENTDOCK_API_KEY,
});
const client = hub.wrapAnthropic(new Anthropic());
await client.withSession({ agentType: "my-agent" });

const response = await client.messages.create({ /* ... */ });
await client.endSession();

Python SDK

pip install agentdock-sdk

import anthropic
from agentdock import AgentDock

hub = AgentDock(api_key=os.environ["AGENTDOCK_API_KEY"])

with hub.wrap_anthropic(
    anthropic.Anthropic(),
    agent_type="my-agent",
) as client:
    response = client.messages.create(
        model="claude-opus-4-5-20251101",
        messages=[{"role": "user", "content": "..."}],
    )

Pricing

Simple pricing, from solo to team.

Free to start. No credit card required. Upgrade when your agents need more room.

Free

$0forever

For individuals getting started with agent oversight.

  • 1 project
  • 1 user
  • 500 events / month
  • Approval workflow
  • Duplication detection
  • 7-day cost history
  • Community support
Most popular

Pro

$19/ month

For developers running agents seriously on real projects.

  • Unlimited projects
  • 1 user
  • Unlimited events
  • Approval policies engine
  • Full cost history
  • Email support

Team

$49/ seat / month

For teams that need access controls and shared oversight.

  • Unlimited projects
  • Unlimited seats
  • Unlimited events
  • SSO
  • Audit log export
  • Priority support + SLA

No credit card required · Cancel anytime · All plans include a 14-day Pro trial

Start controlling your agents.

Free to start. No credit card. Works with Claude Code in two minutes.

AgentDock

© 2026