Roadmap
Which RFCs HCP/1.1 holds, which drafts the reference SDK already runs on trial, what is proposed for 1.2 and reserved for 2.0, and which gaps remain.
HCP/1.1 is the current draft, and the reference SDK also implements five draft
RFCs on trial, one of them in part. Everything after that is a proposal that
binds no one until it passes the RFC process,
so open an issue titled RFC idea: <title> on hcp-protocol to move an item
forward.
In the current draft#
The reference SDK and runtime (0.3.0) and the CLI (0.2.0) implement both
versions below. The protocol repository is tagged v0.1.0 with HCP/1 and RFC
0001, and the next tag adds RFC 0003, the RFC 0001 erratum and the RFC 0008
errata.
| Version | Contents |
|---|---|
| HCP/1.0 | Pack model (three files), Execute + isolated Sense, Policy (operation, land), Binding modes and hubs, five capability grants, sandbox default, CLI bootstrap pack (hcp-cli), availability flags, host projections (tool naming, hcp__read_skill) |
| HCP/1.1 | RFC 0001: named commands required for wrap; installer family; land local; confirm defined for writes; health commands never mint; control vs runtime plane. RFC 0003: wrap.workspace exec plane (local driver in the reference runtime). RFC 0008: errata where the specification disagreed with itself and with its working notes, and the write_stimulus lint. |
Drafts the reference SDK implements#
These RFCs are drafts in hcp-protocol. The reference SDK, runtime and CLI
implement them on trial before acceptance, and the
Specification section does not contain them yet.
| RFC | Adds | Explained in |
|---|---|---|
| 0002 Skill four faces | Lint fails on drift between the Skill and the commands, host paths, credentials, and MCP as the install path | Skill |
| 0004 Wrap JSON flag | wrap.json_flag, a per-command json_flag, and no flag when cli[] already selects JSON | CLI projection |
| 0005 Wrap project mode | wrap.workspace.mode: project, and no_project where a runtime has none | Manifest |
| 0006 Access | Modes, allow/ask/deny rules, human approvals, confirm: "always", approval views, audit | Access |
| 0007 Host projection | Command titles, approval options | Titles, Answers a host can offer |
The SDK does not implement the rest of RFC 0007 yet: a call record a host shows
for each exec (call_id, title, effect, status, locations), rules for
cancelling a run (open approvals answered as cancelled, no call started after a
cancel), and an access mode a person picks per session.
Proposed for HCP/1.2#
Each item is a candidate RFC for a minor version, which may only add.
| Item | Why | Shape |
|---|---|---|
Pack version | Upgrades and pinning need it | version: "1.4.0" in manifest; semver; runtimes report it in availability |
| Argument schema | Hosts generate tool parameters by hand today | verbs.<k>.args as JSON Schema; lint validates; hosts project directly |
| Result schema | Agents cannot rely on result shape | verbs.<k>.result as JSON Schema, optional |
| Error codes | The specification has only error strings, matched by regex | Normative code alongside error in the result envelope, with a registry; the reference implementation already returns the codes in Errors |
| Extension namespace | Runtimes need private fields without lint noise | x-* keys ignored by lint, reserved for extensions |
| Trigger payload schema | Sinks cannot validate | stimulusTriggers[].payload as JSON Schema |
Manifest $schema | Editor validation | Optional $schema pointing at the published schema |
| Deprecation markers | Renaming commands is breaking | verbs.<k>.deprecated: "<replacement>" |
Reserved for HCP/2.0#
These change meaning, which only a major version may do.
| Item | Why it is major |
|---|---|
| Registry protocol | Discovery, publish, fetch by pack_id@version; integrity hashes; provenance. The community catalog is a PR-based index and stays separate from it. |
| Pack signing | Signature over the three files; runtimes verify before install |
| Capability wire profile | Grants as a portable token so a runtime can accept an upstream decision |
| Transport adapters | Normative MCP export and A2UI projection with round-trip guarantees |
| Rename wire fields | surface.json → pack.json, verb_key → command, with a compatibility shim |
| Streaming results | Long-running commands, progress events |
What HCP still lacks#
Set against MCP, Agent Plugins, OpenAPI and package ecosystems, HCP still has these gaps.
| They have | HCP status | Plan |
|---|---|---|
| Multi-language SDKs | TypeScript only | Python next; the pipeline is small |
A registry protocol (signed pack_id@version) | None | HCP/2.0 |
| A community catalog (search + share) | Catalog, /api/v1/packs, hcpx search | Grow entries by PR |
| A conformance badge | Vectors exist, no badge | Publish a checklist and self-attestation format |
| A public implementations list | Starting | Implementations |
| A security disclosure process | Starting | Security |
| Versioned spec permalinks | Single draft | Freeze /docs/specification per hcp-protocol tag |
| Changelog | In §13.5 | Dedicated page per version |
| Interactive examples / playground | None | Browser sandbox running the reference runtime on gold packs |
| Editor tooling | The schemas are live; no editor maps them yet | VS Code validation through the published schemas |
| A test-suite runner for third parties | Bun test in the monorepo | Extract vectors to a language-neutral fixture format |
| Governance charter | Governance | Ratify once a second implementer joins steering |
Not planned#
The protocol will not add a verb ontology, tenant identifiers or credentials in packs, a mandatory UI, or polling as Sense. The non-goals give the reasons.