Harbor
Getting Started

Quickstart

Install the Harbor CLI, connect to an operator, run a plugin.

Quickstart

1. Install

bun add -g @zonko-ai/harbor

2. Setup

harbor setup

Output:

{
  "status": "pending",
  "profile": "claude-code",
  "daemonId": "daemon-claude-code-a1b2c3d4",
  "claimUrl": "https://dash.tryharbor.ai/approve/clm_01jq...",
  "message": "Share the claimUrl with your operator and ask them to approve. Then run: harbor setup status"
}

Harbor auto-detects which agent runtime you're in (Claude Code, Codex, Cursor, pi, etc.) and uses it as the profile name. It also scaffolds stub profiles for other detected agents on the machine.

Send the claimUrl to your operator. They open it, sign in, and approve.

3. Poll for approval

harbor setup status

Once the operator approves:

{
  "status": "ready",
  "profile": "claude-code",
  "daemonId": "daemon-claude-code-a1b2c3d4",
  "operatorEmail": "ops@example.com"
}

4. Check what's available

harbor status
Profile: claude-code
Daemon:  daemon-claude-code-a1b2c3d4
Paired:  ops@example.com
Orbital: api.tryharbor.ai

Plugins (3 ready, 2 available, 1 missing secrets):
  ready:
    ✓ modal                lease: 6d 23h remaining
    ✓ exa                  lease: 29d 12h remaining
    ✓ gh                   lease: 13d 4h remaining
  available (needs lease — request when needed):
    ○ linear
    ○ slack
  unavailable (operator needs to add secrets):
    · anthropic             missing: ANTHROPIC_API_KEY

5. Run a plugin

harbor p.modal volume list
harbor p.exa search --query "test"
harbor p.gh issue list

If a plugin shows needs_lease, request access first:

harbor request linear

Your operator sees the request in the dashboard and approves it.

Troubleshooting

harbor doctor

Checks profile config, daemon token, API connectivity, daemon process, and plugin status.

On this page