Governance
Who owns each HCP repository, who decides, how a normative change moves from RFC idea to release, and when you may say you implement HCP.
HCP is an open specification kept by its maintainers in three repositories.
Editorial fixes merge directly, and every normative change goes through an RFC
so the reason for each rule stays on record; to propose one, open an issue
titled RFC idea: <title> on hcp-protocol.
Repositories#
| Repository | Holds | Licence |
|---|---|---|
hcp-protocol | Normative specification, RFCs, conformance vectors | Apache-2.0 |
hcp | Reference SDK, the hcpx CLI, gold packs, executable conformance | MIT |
hcp-docs | This site | Apache-2.0 |
The specification in hcp-protocol/spec is the source of truth. This site's
Specification section is regenerated from it, so where
the two differ, the repository wins. Security reports follow
Security, and everything else goes in an issue on
the repository it concerns.
Roles#
| Role | Does | How you become one |
|---|---|---|
| Contributor | Opens issues, PRs and RFCs | Open one |
| Maintainer | Reviews and merges in one repository; triages RFCs | Sustained contribution; nominated by maintainers |
| Spec editor | Owns the text of spec/; lands RFC decisions verbatim | Appointed by maintainers |
| Steering | Resolves disputes; approves major versions; owns the roadmap | The founding maintainers at first; expands with implementers |
Once two conforming runtimes exist, the plan is for steering to include at least one independent runtime implementer.
Decision making#
- Any maintainer may merge an editorial change: a typo fix or a clarification that keeps the meaning.
- A normative change needs an accepted RFC. When you need an RFC lists what counts.
- A minor version is an accepted RFC that adds optional fields or tightens lints, with two maintainer approvals.
- A major version is an accepted RFC that changes meaning or removes fields, with steering approval and a migration note.
- Disputes run on lazy consensus for seven days and then go to steering, which decides by simple majority and records its reasoning in the RFC.
These principles from Design principles are constitutional, so changing one takes a major version:
- The pack is the unit, and a pack is three files.
- Packs declare; runtimes decide.
- No credentials in packs.
- Sense never executes.
- Sandbox by default.
- Vendor-neutral text.
RFC process#
When you need an RFC#
You need one to add, remove or change the meaning of a field in
surface.json or policy.json, to add or change a MUST, SHOULD or MAY in the
Specification, to add a capability, Binding mode,
adapter kind or land, or to change the exec or result envelope, a lifecycle
stage or an availability flag. Typo fixes, clearer prose, new examples, new
informative sections and SDK-only changes that leave conformance alone need
none.
Before writing#
- Search the existing RFCs in
hcp-protocol/rfcs/. - Check the non-goals. If your proposal touches one, say so and argue the cost of that boundary.
- Open an issue titled
RFC idea: <title>to test interest. Two thumbs from maintainers, or one from an implementer, is enough to go ahead.
Template#
Copy rfcs/0000-template.md to rfcs/NNNN-<kebab-title>.md:
# RFC NNNN — <Title>
- **Status:** Draft
- **Authors:**
- **Replaces:** <spec section or prior RFC, if any>
- **Tracking:** <issue link>
## Summary
One paragraph.
## Motivation
What breaks today. Evidence: a pack, a runtime, or a corpus.
## Specification
Normative text, using RFC 2119 keywords, written so it can be pasted into spec/.
## Conformance
Which vectors change or are added (§14.5).
## Compatibility
Minor or major? What happens to 1.x packs and runtimes?
## Drawbacks
## AlternativesThe Specification section must be spec text you can paste as it stands, every new MUST needs at least one conformance vector, and the RFC states its version impact.
Lifecycle#
Draft ──▶ Review ──▶ Final comment (7 days) ──▶ Accepted ──▶ Implemented ──▶ Active
│ │ │
└──────────┴───────────── Rejected / Withdrawn ──┘| Status | Meaning |
|---|---|
| Draft | PR open; author iterating |
| Review | A maintainer is sponsoring; discussion on the PR |
| Final comment | Seven days; any maintainer may object with reasons |
| Accepted | Merged into rfcs/; spec editor lands text in spec/; docs regenerate |
| Implemented | Reference SDK ships it; vectors pass |
| Active | Released in a protocol version |
| Rejected | Closed with reasons recorded in the RFC |
| Withdrawn | Closed by the author |
An RFC is accepted when it leaves Final comment with no unresolved objection
and the approvals Decision making sets for its version.
Its conformance vectors then go into packages/sdk/src/conformance.test.ts,
Versioning §13.5 lists the change, and the
RFC's status is updated in place.
Accepted RFCs#
| RFC | Title | Version | Status |
|---|---|---|---|
| 0001 | Wrap hardening: named commands, installer family, land local, confirm | HCP/1.1 | Accepted, Implemented |
| 0003 | Wrap exec plane: wrap.workspace and the local driver | HCP/1.1 | Accepted, Implemented |
| 0008 | HCP/1.1 errata and the write_stimulus lint | HCP/1.1 | Accepted, Implemented |
The Roadmap tracks the drafts and open proposals.
Vendor neutrality#
The specification names roles (host, runtime, hub), never products, and no company holds a special position in its text. Host guides under Adopt in hosts document integration, so they may name products as examples.
Trademark#
"Harness Context Protocol" and "HCP" as applied to this protocol, the hcpx_
wordmark and the h_ symbol identify the project and conforming
implementations. You may say your implementation "implements HCP/1.1" once it
passes §14, and you may not imply
endorsement.