<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" ipr="trust200902" docName="draft-cassandres-hacp-agency-arch-00" version="3" submissionType="independent">
  <front>
    <title abbrev="HACP Architecture">Human Agency Continuity Protocol (HACP) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-cassandres-hacp-agency-arch-00"/>
    <author fullname="Sergio Cassandres" initials="S." surname="Cassandres">
      <organization>Digital Humanism Collective</organization>
      <address><email>digital.humanism.collective@protonmail.com</email></address>
    </author>
    <abstract>
      <t>This document describes the architecture of the Human Agency Continuity Protocol (HACP): a pre-execution authorization contract for tool-using agents. HACP separates human intent, deterministic evaluation, cryptographic decision binding, and enforcement so that an agent cannot silently reinterpret authorized action after a decision is issued.</t>
      <t>This document is Informational. It is not an Internet Standard. It does not activate Enforcement revision 2 and does not claim general URI-normalization conformance.</t>
      <t>The acronym HACP in this series means Human Agency Continuity Protocol. A separately posted individual Internet-Draft, draft-sunyi-hacp-protocol, uses the same four letters for a different protocol (Hardware Agent Capability Protocol) by a different author. The present author has no affiliation with that document.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro" title="Introduction">
      <t>Agent systems can call tools, HTTP APIs, and other machine interfaces faster than a human can continuously supervise each call. Existing application protocols authenticate a session or sign a message. They do not, by themselves, bind a later tool invocation to the exact authorized action semantics.</t>
      <t>HACP addresses that gap with a language-agnostic evaluate-before-execute path:</t>
      <artwork>intent envelope
        |
        v
proposed action
        |
        v
deterministic evaluate()
        |
        +--&gt; ALLOW + DecisionToken
        +--&gt; DENY
        `--&gt; CHECKPOINT
        |
        v
enforcement point
        |
        v
action</artwork>
      <t>The authoritative published contract is HACP Specification v1.0.0 Variant A <xref target="HACP-SPEC-1.0.0"/>. Independent implementations in Python, TypeScript, and Go reproduce the same 38-vector decision-level HACP-Core suite. This draft restates the architectural boundary for review. It does not replace the published specification.</t>
      <section anchor="requirements" title="Requirements Language">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Normative protocol detail lives in <xref target="I-D.cassandres-hacp-agency-core"/>. This document uses BCP 14 language only for architectural constraints.</t>
      </section>
    </section>
    <section anchor="problem" title="Problem">
      <t>Without a pre-execution authority contract, a delegated agent can:</t>
      <ul>
        <li><t>reuse a prior approval against a different action;</t></li>
        <li><t>widen audience, destination, quantity, or reversibility after approval;</t></li>
        <li><t>continue after envelope, token, or key revocation if the enforcement point is advisory;</t></li>
        <li><t>treat URI-equivalent or application-equivalent spellings as automatically authorization-equivalent; or</t></li>
        <li><t>hide the decision path inside a probabilistic model.</t></li>
      </ul>
      <t>HACP treats those as authorization failures, not as product UX issues.</t>
    </section>
    <section anchor="non-goals" title="Non-Goals">
      <t>HACP does not:</t>
      <ul>
        <li><t>watermark or label generated content;</t></li>
        <li><t>inspect raw prompts or act as a prompt-injection firewall;</t></li>
        <li><t>define an identity mesh, SSO, or IdP;</t></li>
        <li><t>perform DLP or payload content filtering;</t></li>
        <li><t>provide OS/kernel sandboxing or a service mesh;</t></li>
        <li><t>require global consensus (Raft/Paxos) for revocation;</t></li>
        <li><t>train, align, or moderate models; or</t></li>
        <li><t>certify regulatory compliance.</t></li>
      </ul>
      <t>Anything not required by a published HACP-Core invariant is out of scope until added through the specification versioning policy.</t>
    </section>
    <section anchor="components" title="Architectural Components">
      <section anchor="intent-envelope" title="IntentEnvelope"><t>A signed declaration of principal, scope grant, optional autonomy budget, and validity interval. The human-readable <tt>intent_statement</tt> is informational. Scope and signatures are authoritative.</t></section>
      <section anchor="proposed-action" title="ProposedAction"><t>A schema-constrained description of one intended act: verb, resource, audience, reversibility, externality, data class, optional quantity, destination, and tool name.</t></section>
      <section anchor="evaluate" title="evaluate()"><t>A deterministic function from envelope, action, policy digest, revocation state, and clock to ALLOW, DENY, or CHECKPOINT. It MUST NOT require an LLM on the hot path.</t></section>
      <section anchor="decision-token" title="DecisionToken"><t>Issued only on ALLOW. Bound to the SHA-256 of the canonical ProposedAction. Verification against any other action MUST fail.</t></section>
      <section anchor="provenance" title="Provenance"><t>Append-only, hash-chained, signed events for evaluation, issuance, denial, checkpoint, revocation, and optional execution.</t></section>
      <section anchor="enforcement-point" title="Enforcement Point"><t>An ALLOW without an enforcement point is advisory. A compliant deployment places mediation between the agent and enforceable transports (for the current active profile: mediated tool calls and explicit HTTP proxy). Fail-closed is mandatory when authority or control state cannot be established.</t></section>
    </section>
    <section anchor="versions" title="Version Domains">
      <t>HACP 1.0.0 keeps domains separate on purpose:</t>
      <artwork>Specification release     1.0.0
Canonical HACP-Core       0.9.2
Canonical vector set      core-0.9.2
Wire/object hacp_version  0.9
Runner Protocol           1
humanist-core package     0.5.0</artwork>
      <t>Specification release 1.0.0 does not migrate wire objects to hacp_version 1.0 and does not activate Enforcement revision 2.</t>
    </section>
    <section anchor="implementation" title="Implementation Status">
      <t>Published evidence at the specification tag v1.0.0:</t>
      <artwork>Go, TypeScript, Python HACP-Core     38/38 decision-level PASS
Sidecar decision outcomes            38/38 correct
Sidecar exact reason codes           15/38 PASS, 23/38 classified
Python &lt;-&gt; Go external E2E           5/5 PASS
Clean-clone validation               PASS</artwork>
      <t>Exact reason-code 38/38 is not a HACP 1.0.0 Variant A claim. Successor request-binding work (HC2) exists as draft evidence and is not the advertised 1.0 Enforcement contract.</t>
      <t>Vector set digest (SHA-256):</t>
      <artwork>1e167887106463cf89c81f3898e1f3ae4fd905bc807084959c787287f6575d58</artwork>
      <t>The conformance Ed25519 identity derived from SHA-256("hacp-conformance-v0.9-key-001") is TEST ONLY and MUST NOT be used in production.</t>
    </section>
    <section anchor="related" title="Related Work">
      <t>This section distinguishes HACP from nearby work. It does not rank products.</t>
      <ul>
        <li><t><xref target="I-D.sunyi-hacp-protocol"/> (Hardware Agent Capability Protocol, Yi Sun) shares only the four-letter acronym. It is a different individual Internet-Draft and is not a predecessor of this work. The author of this series is not affiliated with that draft.</t></li>
        <li><t>HTTP <xref target="RFC9110"/>, HTTP Message Signatures <xref target="RFC9421"/>, and OAuth protect messages, resources, or delegated access tokens. They do not define HACP evaluate() semantics.</t></li>
        <li><t>UCAN and ZCAP-LD provide capability attenuation. HACP is an evaluate-and-bind decision protocol with a published 38-vector suite, not a DID capability stack.</t></li>
        <li><t>MCP and similar tool buses are transports. HACP sits in front of tool execution; it is not a replacement tool protocol.</t></li>
        <li><t>Other work on agent delegation, certification, or governance may overlap in motivation. HACP's testable core is IntentEnvelope / ProposedAction / DecisionToken / fail-closed evaluate().</t></li>
      </ul>
      <t>URI resource equivalence <xref target="RFC3986"/> is not automatic HACP authorization-binding equivalence. That distinction is architectural and is not general URI normalization.</t>
    </section>
    <section anchor="security" title="Security Considerations">
      <t>HACP reduces silent reinterpretation of authority. It does not protect against:</t>
      <ul>
        <li><t>a compromised enforcement host;</t></li>
        <li><t>an operator who grants an envelope that is too wide;</t></li>
        <li><t>physical access to signing keys; or</t></li>
        <li><t>model quality, memory hygiene, or multi-model session confusion in an agent product.</t></li>
      </ul>
      <t>Fail-closed is the required reaction to signature failure, unknown keys, expiry, revocation, scope crossing, budget exhaustion, unknown security-relevant attributes, and stale distributed control state.</t>
      <t>Confused-deputy risk at the tool name and request-target representation is in scope for enforcement profiles. Content of payloads is not inspected.</t>
    </section>
    <section anchor="iana" title="IANA Considerations"><t>This document has no IANA actions.</t></section>
    <section anchor="licenses" title="Relationship to Implementation Licenses"><t>Known implementations are published under licenses distinct from the IETF Trust terms that will apply to this document after posting. Posting this Internet-Draft does not change the licenses of the separately published specification or implementation repositories.</t></section>
  </middle>
  <back>
    <references><name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner"><organization/></author>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba"><organization/></author>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
      </reference>
    </references>
    <references><name>Informative References</name>
      <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee"><organization/></author>
          <author initials="R." surname="Fielding" fullname="R. Fielding"><organization/></author>
          <author initials="L." surname="Masinter" fullname="L. Masinter"><organization/></author>
          <date year="2005" month="January"/>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
      </reference>
      <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
        <front>
          <title>HTTP Semantics</title>
          <author initials="R." surname="Fielding" fullname="R. Fielding"><organization/></author>
          <author initials="M." surname="Nottingham" fullname="M. Nottingham"><organization/></author>
          <author initials="J." surname="Reschke" fullname="J. Reschke"><organization/></author>
          <date year="2022" month="June"/>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
      </reference>
      <reference anchor="RFC9421" target="https://www.rfc-editor.org/info/rfc9421">
        <front>
          <title>HTTP Message Signatures</title>
          <author initials="A." surname="Backman" fullname="A. Backman"><organization/></author>
          <author initials="J." surname="Richer" fullname="J. Richer"><organization/></author>
          <author initials="M." surname="Sporny" fullname="M. Sporny"><organization/></author>
          <date year="2024" month="February"/>
        </front>
        <seriesInfo name="RFC" value="9421"/>
      </reference>
<reference anchor="HACP-SPEC-1.0.0" target="https://github.com/digital-humanism/hacp-spec/releases/tag/v1.0.0">
  <front>
    <title>Human Agency Continuity Protocol (HACP) Specification v1.0.0, Variant A</title>
    <author fullname="Digital Humanism Collective"><organization>Digital Humanism Collective</organization></author>
    <date year="2026" month="September"/>
  </front>
  <seriesInfo name="Version" value="1.0.0"/>
  <annotation>Frozen source commit c468c9bb0427448e564bcf3e7d9c8a3a004b8513.</annotation>
</reference>
<reference anchor="I-D.cassandres-hacp-agency-core">
  <front>
    <title>Human Agency Continuity Protocol (HACP) Core</title>
    <author fullname="Sergio Cassandres" initials="S." surname="Cassandres"><organization>Digital Humanism Collective</organization></author>
    <date year="2026" month="November"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-cassandres-hacp-agency-core-00"/>
</reference>
<reference anchor="I-D.sunyi-hacp-protocol" target="https://datatracker.ietf.org/doc/draft-sunyi-hacp-protocol/">
  <front>
    <title>Hardware Agent Capability Protocol</title>
    <author fullname="Yi Sun" initials="Y." surname="Sun"><organization/></author>
    <date year="2026"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-sunyi-hacp-protocol"/>
</reference>
    </references>
  </back>
</rfc>
