HarborHarbor
DocumentationGuidesPlugins

Why Harbor

Models change. The context layer should not.

Most "agent + tools" stacks force a choice:

  1. Hardcode provider clients into your agent code — fragile, no audit trail, credentials sprayed across machines.
  2. Adopt a hosted black-box that owns your workspace, your identity, and your context — fast to start, painful to leave.

Harbor is built around a third option: a shared workspace that owns the connections, captures the runs, and exposes a small, stable surface to any agent — without locking your data or your agents into one vendor.

Without Harbor / With Harbor

Without HarborWith Harbor
CredentialsCopied into every agent + every machineVaulted once per workspace
SetupEach agent re-implements OAuth, API clients, retriesAny approved agent acts immediately
StateLost when the chat endsWorkspace memory, durable jobs
Tool selectionAgent guesses from a name + descriptionTools are routed, scoped, searched
FailuresBecome more promptingBecome traceable runs
Audit"Who ran this?" — nobody knowsEvery run, every tool call, every artifact
TeamEach engineer reconnects everythingShared workspace
Without Harbor4calls
With Harbor1call
Benchmark — coming soon
Real numbers land when the bench is published.

The 30-second case

// Without Harbor — agent makes 4 round-trips, each with model overhead
const issue   = await sentry.getIssue({ id });
const owner   = await github.searchCode({ query: issue.culprit });
const ticket  = await linear.createIssue({ title: issue.title, ... });
await slack.postMessage({ channel: '#incidents', text: ticket.url });

// With Harbor — one exec, all calls run in a cloud isolate with bound
// plugin namespaces, returns one TOON-formatted result
await hrbr.exec(`
  const issue  = await sentry.getIssue({ id: input.id });
  const owner  = await github.searchCode({ query: issue.culprit });
  const ticket = await linear.createIssue({ title: issue.title });
  await slack.postMessage({ channel: '#incidents', text: ticket.url });
  return { ticket: ticket.url, owner: owner[0]?.path };
`);

Same logic, one round-trip, traced end-to-end, retried with backoff if you add step.* calls.

Who it's for

AI agent builders

You're tired of teaching every model how to authenticate against Linear / GitHub / Sentry / Notion. Harbor does the connection layer once.

Engineering teams

You want shared, audited tool access for the team — not credentials in someone's .env.

Power users of Claude Code / Cursor / Codex

Your IDE agent can now act in your workspace tools through one MCP connection.

Self-hosters

You want the same primitives on your own machine — @hrbr/client, @hrbr/sdk, Python harbor-sdk, Local Harbor, and Cliff are open-source.

Continue → Quickstart or How it's built.