Skip to content
Skip to content
HCP

What is HCP?

An open standard for installing a capability into any agent harness, as a portable pack that a runtime can authorise, sandbox, and execute.

Harness Context Protocol (HCP) is an open standard for installing capabilities into agent harnesses.

A harness is whatever drives an agent: a coding assistant, a chat product, an automation runner, a TypeScript tool loop. A capability is something the agent should be able to do in the world: plan a route, list a mailbox, send a transfer. Today each harness has its own way of adding capabilities: a config file, an MCP server, a table of setup steps pasted into an instructions file. HCP replaces that with one portable unit, the Harness Pack, and a small set of rules for what a runtime does with it.

Skills tell an agent how to behave. MCP carries tool calls between a model and a server. HCP installs the capability itself: versioned, authorised, and the same command whether a human types it, an agent calls it, or a UI button fires it.

The unit: a Harness Pack

A pack is a directory containing three files.

FileRoleWhat you write
surface.jsonManifestPack id, adapter kind, Binding mode, and 5 to 12 named commands
policy.jsonPolicyOne row per command and per trigger: read or write, which land it touches, whether it needs confirmation
HARNESS.mdSkillOne screen that teaches the hot path and the anti-patterns

Those three files are the authoring surface. A pack contains no secrets, no user allow-lists, no tenant ids, and no server. It describes a CLI or API that already exists and declares what it may do.

packs/transit/surface.json
{
  "id": "transit",
  "kind": "wrap",
  "cliBin": "transit",
  "binding": { "mode": "public" },
  "verbs": {
    "plan": {
      "description": "Time-first options between two places.",
      "cli": ["transit", "plan", "{{from}}", "{{to}}"]
    }
  }
}

Two loops on one pack

Every pack participates in two directions, and HCP keeps them isolated.

  • Execute is inbound. Someone asks the pack to do something by running a named command. Commands have a twin face: a CLI form (transit plan A B --json) and a JSON form ({ "pack_id": "transit", "verb_key": "plan", "args": {…} }). Both are the same command under the same Policy.
  • Sense is outbound. The pack may announce that the world changed (a new message arrived, a credential went stale). Triggers are declared in the same Policy file, delivered only under an explicit grant, and can never mint credentials or spend money.

A recorded trigger may lead an Invoker to run Execute; that Execute still has to pass the inbound pipeline under its own grants. See Architecture.

What HCP enables

  • Wrap a domain CLI in an afternoon. Describe the commands you already ship, add a policy row for each, and the same binary is available to a terminal, an agent, and a product UI as one command.
  • Give an agent a discovery surface without a hand-built tool catalog. A public pack with find, plan, show, status, follow needs no login and no secrets.
  • Gate a write so it fails closed. A transfer without an explicit confirm is refused before any adapter runs, whoever or whatever asked.
  • Announce change safely. A pack can raise new_item or binding.degraded into a runtime sink without gaining the ability to act.
  • Adopt natively in hosts. hcp adopt cursor or hcp adopt opencode generates host-native surfaces from the activated packs, without bridging through MCP.

Why it matters, by role

  • Pack authors publish one folder, and any runtime that speaks HCP can activate it. You do not maintain a Skill, an MCP server, and a private connector schema for the same CLI.
  • Runtime and harness builders activate packs instead of hand-registering tools. Availability is four observable flags (installed, activated, connected, executable), and every denial has a reason.
  • Operators and end users get one Policy and one Binding regardless of invoker. Secrets never live in Skills, manifests, or host configs. Packs stay valid if the transport or UI changes.

Where it sits

StandardLayerUnit
Agent SkillsTeachingSKILL.md
MCPModel ↔ tool transportMCP server
Agent PluginsPackaging Skills + MCP servers for clientsPlugin directory
A2UIAgent → declarative UIUI messages
HCPInstallable capability with Policy, Binding, and SenseHarness Pack

HCP does not replace any of these. It covers the step none of them address: getting a capability installed into a harness, with authorisation, credentials, sandboxing, and an outbound loop. Full comparison: Landscape.

Status

HCP/1 is implemented by the reference TypeScript runtime and CLI. HCP/1.1 (wrap hardening, installer commands, land local) is accepted and shipping. The normative text lives in the protocol repository; this site is its public projection. See Versioning and the Specification.

Next