<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
]>
<?xml-model href="rfc7991bis.rnc"?>
<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="info"
  docName="draft-mackay-aacp-02"
  ipr="trust200902"
  obsoletes=""
  updates="draft-mackay-aacp-01"
  submissionType="independent"
  xml:lang="en"
  version="3">

  <front>
    <title abbrev="AACP">Agent Action Compression Protocol (AACP) Version 1.4</title>

    <seriesInfo name="Internet-Draft" value="draft-mackay-aacp-02"/>

    <author fullname="Andrew Mackay" initials="A." surname="Mackay">
      <organization>Independent</organization>
      <address>
        <email>mackayandrewr@gmail.com</email>
        <uri>https://aacp.dev</uri>
      </address>
    </author>

    <date day="6" month="June" year="2026"/>

    <area>General</area>
    <workgroup>Independent Submission</workgroup>

    <keyword>AACP</keyword>
    <keyword>agent</keyword>
    <keyword>multi-agent</keyword>
    <keyword>LLM</keyword>
    <keyword>coordination</keyword>
    <keyword>deterministic</keyword>
    <keyword>encoding</keyword>
    <keyword>protocol</keyword>
    <keyword>portable</keyword>
    <keyword>workflow</keyword>

    <abstract>
      <t>
        This document defines the Agent Action Compression Protocol (AACP),
        a typed coordination format for agent-to-agent communication in
        multi-agent large language model (LLM) systems. AACP transforms
        natural language coordination instructions into deterministic,
        machine-parseable packets that can be validated before transmission,
        logged as structured audit records, and replayed consistently across
        workflow runs.
      </t>
      <t>
        AACP addresses a coordination content layer that existing agent
        protocols do not cover. The Model Context Protocol (MCP) and
        Agent-to-Agent Protocol (A2A) operate at the tool access and routing
        layers respectively. Neither specifies what agents say to each other
        inside coordination messages. AACP fills this gap with a shared,
        typed vocabulary for agent coordination intent.
      </t>
      <t>
        For known workflow types, a rule-based encoder produces AACP packets
        deterministically at zero LLM cost. A four-tier fallback extends this
        to novel instructions: community registry lookup at zero cost; local
        cache lookup at zero cost; pattern matching at zero cost; LLM encoding
        for genuinely novel instructions, logged to registry for permanent
        reuse. An amortisation benchmark across 240 encoding operations
        demonstrated 91.6 percent cost saving versus per-call LLM encoding,
        with 6 LLM calls required across the full run.
      </t>
      <t>
        As a secondary benefit, AACP reduces coordination token usage by
        approximately 23 percent versus equivalent natural language
        instructions. Framework integration benchmarks demonstrate 18 percent
        total workflow cost reduction in LangChain (59 coordination hops)
        and 30 percent in CrewAI (59 coordination hops), with all
        coordination LLM calls eliminated in both cases.
      </t>
      <t>
        This document updates draft-mackay-aacp-01 with: an expanded
        encoder library (8 workflow encoders across 6 domains); a
        community rule library (241 validated rules at
        registry.aacp.dev); framework integration results for LangChain
        and CrewAI; amortisation benchmark data; and a five-workflow
        multi-model department day validation.
      </t>
    </abstract>

  </front>

  <middle>

    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>
        Multi-agent LLM systems coordinate by exchanging instructions between
        autonomous agents. In current implementations, these coordination
        messages are typically written in natural language -- verbose, ambiguous,
        and non-deterministic. The same intent expressed differently across
        runs makes coordination messages difficult to validate, audit, or
        replay reliably.
      </t>
      <t>
        AACP replaces natural language coordination with a compact, typed,
        pipe-delimited packet format that is deterministic, schema-validated,
        and machine-parseable. The primary value is not token reduction --
        it is auditability, determinism, and the elimination of LLM calls
        from the coordination layer for known workflow types.
      </t>
      <t>
        Consider a payroll workflow where an orchestrator instructs an HR
        agent to retrieve salary records. A typical English instruction:
      </t>
      <artwork><![CDATA[
"Please retrieve the employee salary records for the period
ending March 2026. I need all active employees, their
departments, cost centres, base salary, any changes made this
month, and pension contribution rates. Return as JSON array."
      ]]></artwork>
      <t>
        This instruction varies in wording across runs, provides no
        machine-readable structure, and cannot be reliably audited
        without natural language processing. The equivalent AACP packet:
      </t>
      <artwork><![CDATA[
FETCH|HR|return:HR-Agent|p:1|aacp:1.1|res:emp_salary|
period:2026-03|filter:status=active|fmt:json
      ]]></artwork>
      <t>
        is produced identically on every run by the rule-based encoder,
        validates against the v1.1 schema before transmission, and
        constitutes a complete machine-readable audit record. The
        rule-based encoder produces this packet at zero LLM cost.
      </t>
      <t>
        This document specifies AACP version 1.4 and updates
        draft-mackay-aacp-01 with expanded encoder coverage,
        community rule library, framework integration results,
        amortisation benchmark, and department day validation.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Terminology</name>
      <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>
      <dl>
        <dt>Agent:</dt>
        <dd>An autonomous software process that receives coordination
        packets, performs tasks using one or more LLM API calls, and
        returns structured results.</dd>

        <dt>Coordination message:</dt>
        <dd>An instruction sent from one agent to another describing what
        action to take, on what resource, with what parameters, and where
        to return the result. Distinct from task content.</dd>

        <dt>AACP packet:</dt>
        <dd>A pipe-delimited string conforming to the format defined in
        Section 4, used as a coordination message.</dd>

        <dt>Task tokens:</dt>
        <dd>Tokens consumed by an agent performing its actual work. AACP
        does not reduce task tokens.</dd>

        <dt>Coordination tokens:</dt>
        <dd>Tokens consumed by the coordination message itself.</dd>

        <dt>Rule-based encoder:</dt>
        <dd>A deterministic encoder producing AACP packets from structured
        input without an LLM call. Zero API cost per encoding.</dd>

        <dt>Community registry:</dt>
        <dd>A curated set of pre-validated AACP rules for common business
        workflow patterns, available for zero-cost lookup before
        LLM fallback is attempted.</dd>

        <dt>Registry:</dt>
        <dd>A local store of previously LLM-encoded instructions and
        their resulting AACP packets, enabling cache lookup on
        subsequent identical or similar instructions.</dd>
      </dl>
    </section>

    <section numbered="true" toc="default">
      <name>Motivation and Problem Statement</name>
      <t>
        Natural language coordination in multi-agent systems creates three
        distinct operational problems: verbosity, non-determinism, and
        unstructured audit trails.
      </t>
      <t>
        Verbosity has been identified independently by multiple research
        groups. Mou et al. (2025) <xref target="ECOLANG"/> achieved
        greater than 20 percent token reduction through evolved compression
        language for social simulation. AACP addresses the same problem
        with a typed, portable packet schema targeting business workflow
        coordination.
      </t>
      <t>
        Non-determinism is the more operationally significant problem.
        When coordination messages are expressed in free-form natural
        language, the same intent produces different messages across runs.
        This makes it impossible to validate messages before transmission,
        correlate messages across runs for compliance purposes, or replay
        workflows reliably.
      </t>
      <t>
        The specific technical gap AACP fills: neither MCP
        <xref target="MCP"/> nor A2A <xref target="A2A"/> address the
        semantic content of coordination messages. Both protocols operate
        at the transport and routing layers. AACP operates at the content
        layer, defining what agents say to each other rather than how
        messages are delivered.
      </t>
      <t>
        Framework integration benchmarks confirm the problem is real and
        widespread. In standard LangChain and CrewAI implementations,
        every agent-to-agent coordination hop involves an LLM call to
        generate the instruction. In a five-workflow department day
        scenario with 59 coordination hops, this results in 59 LLM
        calls solely for coordination -- before any task work begins.
        AACP eliminates all 59 coordination calls for known workflows.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Packet Format</name>
      <t>
        An AACP packet is a sequence of pipe-delimited fields. The pipe
        character (U+007C, "|") is the field separator.
      </t>
      <artwork><![CDATA[
packet = task "|" dom "|" named-fields
      ]]></artwork>
      <t>
        TASK and DOM are positional (fields 0 and 1 respectively). All
        other fields MUST be named key:value pairs. Empty positional
        slots MUST NOT appear in v1.1 packets.
      </t>

      <section numbered="true" toc="default">
        <name>Positional Fields</name>
        <dl>
          <dt>Field 0 -- TASK:</dt>
          <dd>The action verb. REQUIRED. MUST be one of the values
          defined in Section 5.1.</dd>
          <dt>Field 1 -- DOM:</dt>
          <dd>The business domain context. REQUIRED. MUST be one of
          the values defined in Section 5.2.</dd>
        </dl>
      </section>

      <section numbered="true" toc="default">
        <name>Named Fields</name>
        <t>
          After the two positional fields, all fields are named using
          the format key:value. The following named fields MUST appear
          in every packet:
        </t>
        <dl>
          <dt>return:</dt>
          <dd>The agent identifier that receives the result. REQUIRED.</dd>
          <dt>aacp:</dt>
          <dd>The protocol version. REQUIRED. MUST be "1.1" for packets
          conforming to this specification.</dd>
        </dl>
        <t>The following named fields are RECOMMENDED where applicable:</t>
        <dl>
          <dt>p:</dt>
          <dd>Priority. 1=critical, 2=medium (default), 3=low.</dd>
          <dt>res:</dt>
          <dd>The resource identifier the action applies to.</dd>
          <dt>period:</dt>
          <dd>A time period, expressed as YYYY-MM or similar.</dd>
          <dt>filter:</dt>
          <dd>A filter expression applied to the resource.</dd>
          <dt>fmt:</dt>
          <dd>The requested response format (e.g. json, pdf, xlsx).</dd>
        </dl>
      </section>

      <section numbered="true" toc="default">
        <name>Extended Fields</name>
        <t>
          Additional named fields MAY be appended after core fields.
          Defined extended keys include: src, src_prev, rules, validate,
          tmpl, data_ptr, amt, ccy, sup, match, terms, type, party,
          clause, issue, risk, block, flags, req, highlight, status,
          to, subj, att, flag_msg, tone, sentiment, actor, chain,
          prog, ltv, loyalty, urgency.
        </t>
        <t>
          Unknown extended keys MUST generate advisory warnings in
          validators, not errors. This permits forward compatibility
          and organisation-private extensions.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Packet Examples</name>
        <t>Fetch active employee salary records:</t>
        <artwork><![CDATA[
FETCH|HR|return:HR-Agent|p:1|aacp:1.1|res:emp_salary|
period:2026-03|filter:status=active|fmt:json
        ]]></artwork>
        <t>Merge datasets and calculate payroll:</t>
        <artwork><![CDATA[
MERGE|HR|return:HR-Agent|p:1|aacp:1.1|rules:payroll_v2|
validate:budget_cc
        ]]></artwork>
        <t>Flag a legal clause for review:</t>
        <artwork><![CDATA[
FLAG|LEGAL|return:LEG-Agent|p:1|aacp:1.1|type:NDA|
party:Acme-Ltd|clause:s7|issue:ip_rights_restriction|
risk:high|block:signature
        ]]></artwork>
        <t>Score a sales lead using BANT:</t>
        <artwork><![CDATA[
CALC|SALES|return:SALES-Agent|p:1|aacp:1.1|res:lead_score|
filter:id=L-001|rules:bant
        ]]></artwork>
        <t>Resolve a customer complaint with goodwill consideration:</t>
        <artwork><![CDATA[
RESOLVE|CS|return:CS-Agent|p:1|aacp:1.1|res:complaint|
filter:id=T-001|sentiment:negative|tone:empathetic|
ltv:8500|ccy:GBP|req:resolve,goodwill_consider
        ]]></artwork>
        <t>Acknowledge receipt and confirm SLA clock started:</t>
        <artwork><![CDATA[
ACK|IT|return:IT-Agent|p:1|aacp:1.1|res:incident_ticket|
status:acknowledged
        ]]></artwork>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Valid Field Values</name>

      <section numbered="true" toc="default">
        <name>TASK Values</name>
        <t>
          The following TASK values are defined in AACP v1.1:
          FETCH, PROC, FLAG, RESOLVE, LOG, SEND, BUILD, MERGE,
          CALC, REPORT, ACK, SYNC.
        </t>
        <t>
          All 12 TASK values are represented in the community rule
          library <xref target="AACP-RULES"/> with validated usage
          examples across 7 business domains.
        </t>
        <t>
          Implementations MUST warn on unrecognised TASK values.
          Implementations MUST NOT reject packets with unrecognised
          TASK values, to permit forward compatibility.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>DOM Values</name>
        <t>
          The following DOM values are defined in AACP v1.1:
          HR, FIN, SALES, LEGAL, IT, CS, MKT.
        </t>
        <t>
          Implementors MAY define additional domain values.
          Unrecognised DOM values SHOULD generate advisory warnings.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Priority Values</name>
        <t>
          The p: field accepts: 1 (critical), 2 (medium, default),
          3 (low).
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Encoding</name>

      <section numbered="true" toc="default">
        <name>Rule-Based Encoding</name>
        <t>
          For known, repetitive workflow types, a rule-based encoder
          deterministically produces AACP packets from structured input
          without an LLM API call. This approach has zero API cost and
          produces identical output for identical input on every run.
        </t>
        <t>
          The reference implementation <xref target="AACP-SDK"/> provides
          eight workflow encoders across six domains, each grounded in a
          documented real-world platform:
        </t>
        <ul>
          <li>PayrollEncoder -- HR payroll (HMRC PAYE, 6 hops)</li>
          <li>ITEncoder -- IT provisioning (Microsoft Entra ID, 5 hops)</li>
          <li>InvoiceEncoder -- AP processing (three-way match, 3 hops)</li>
          <li>ContractEncoder -- Legal review (NDA/MSA, 2-3 hops)</li>
          <li>SalesEncoder -- Lead qualification (Salesforce Agentforce 2026, 5 hops)</li>
          <li>JMLEncoder -- HR onboarding (ConductorOne, Lumos, 6 hops)</li>
          <li>CSResolutionEncoder -- CS resolution (Zendesk 2026, 5 hops)</li>
          <li>MonthEndEncoder -- Finance close (NetSuite Autonomous Close 2026, 6 hops)</li>
        </ul>
      </section>

      <section numbered="true" toc="default">
        <name>Community Rule Library</name>
        <t>
          A community rule library <xref target="AACP-RULES"/> of 241
          pre-validated AACP coordination rules is available covering
          all 12 TASK types across all 7 DOM values. The library is
          MIT-licensed and hosted at registry.aacp.dev as a queryable
          REST API.
        </t>
        <t>
          Example query:
        </t>
        <artwork><![CDATA[
GET https://registry.aacp.dev/rules?domain=HR&task=FETCH

{
  "total": 10,
  "rules": [
    {
      "id": "hr-fetch-active-employee-salaries",
      "packet": "FETCH|HR|return:HR-Agent|p:1|aacp:1.1|
                 res:emp_salary|filter:status=active|fmt:json",
      "validated": true
    },
    ...
  ]
}
        ]]></artwork>
        <t>
          The RuleRegistry class in the SDK provides programmatic
          access to the community library:
        </t>
        <artwork><![CDATA[
from aacp import RuleRegistry

registry = RuleRegistry.from_community()
rule = registry.find("fetch active employee salaries", domain="HR")
print(rule.packet)
# FETCH|HR|return:HR-Agent|p:1|aacp:1.1|res:emp_salary|
#   filter:status=active|fmt:json
print(rule.cost)  # 0.0
        ]]></artwork>
      </section>

      <section numbered="true" toc="default">
        <name>LLM-Assisted Encoding</name>
        <t>
          For novel instructions outside known workflow patterns, an
          LLM-assisted encoder produces AACP packets by submitting the
          English instruction to a language model with the AACP
          specification as a system prompt.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Four-Tier Fallback and Registry</name>
        <t>
          The FallbackEncoder routes encoding requests through four
          tiers in priority order:
        </t>
        <t>
          Tier 0 -- Community registry: The instruction is matched
          against the community rule library. A match returns the
          pre-validated packet at zero cost.
        </t>
        <t>
          Tier 1 -- Hash cache lookup: The SHA-256 hash of the
          normalised instruction is looked up in the local registry.
          An exact match returns the cached packet at zero cost.
        </t>
        <t>
          Tier 2 -- Pattern match: The instruction is matched against
          keyword patterns from the registry and built-in pattern set.
          A match above threshold returns the cached or rule-based
          packet at zero cost.
        </t>
        <t>
          Tier 3 -- LLM fallback: Novel instructions with no match
          are encoded via LLM and logged to the local registry,
          enabling Tier 1 routing on all subsequent occurrences.
        </t>
        <t>
          This architecture ensures each novel instruction pattern
          incurs at most one LLM encoding call. An amortisation
          benchmark across 240 encoding operations (6 novel
          instructions, each repeated 30 times, plus rule-based
          comparisons) demonstrated 91.6 percent cost saving versus
          per-call LLM encoding, with 6 LLM calls required across
          the full benchmark run.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Validation</name>
      <t>AACP validators MUST check:</t>
      <ul>
        <li>Field 0 (TASK) is present and recognised</li>
        <li>Field 1 (DOM) is present and recognised</li>
        <li>A return: named field is present and non-empty</li>
        <li>An aacp: named field is present</li>
      </ul>
      <t>AACP validators SHOULD warn on:</t>
      <ul>
        <li>Unrecognised TASK or DOM values</li>
        <li>Missing p: field</li>
        <li>AACP version mismatch</li>
        <li>sentiment: present without tone:</li>
        <li>ltv: present without ccy:</li>
        <li>Unknown extended field keys</li>
      </ul>
      <t>
        Validation errors MUST be reported before transmission.
        Warnings SHOULD be logged but MUST NOT prevent transmission.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Tokenisation Benchmark</name>

      <section numbered="true" toc="default">
        <name>Methodology</name>
        <t>
          Coordination token counts were measured using live API
          usage_metadata. Each message was submitted as a bare user
          message with no system prompt and max_tokens=1 to isolate
          coordination token counts. Benchmark date: May 2026.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Tokenisation Results</name>
        <t>Four-hop payroll workflow. Tokens from live API.</t>
        <artwork><![CDATA[
+---------------------+-------+------+--------+--------+
| Hop                 |English| AACP |Claude% |GPT-4o% |
+---------------------+-------+------+--------+--------+
| fetch employees     |    56 |   52 |  -7.1% | -12.7% |
| fetch budgets       |    57 |   47 | -17.5% | -16.0% |
| merge and calculate |    65 |   43 | -33.8% | -31.6% |
| generate report     |    62 |   43 | -30.6% | -33.3% |
+---------------------+-------+------+--------+--------+
| TOTAL               |   240 |  185 | -22.9% | -23.7% |
+---------------------+-------+------+--------+--------+
        ]]></artwork>
      </section>

      <section numbered="true" toc="default">
        <name>Amortisation Benchmark</name>
        <t>
          A three-scenario amortisation benchmark validated the
          "one LLM call per novel pattern" property across 240
          encoding operations. June 2026.
        </t>
        <artwork><![CDATA[
+---------------------------+--------+----------+----------+
| Scenario                  | Calls  | LLM Calls| Saving   |
+---------------------------+--------+----------+----------+
| A: 1 instruction x 30     |     30 |         1|    96.7% |
| B: 5 instructions x 30    |    150 |         4|    91.0% |
| C: Rule-based vs novel    |     60 |         1|    94.4% |
+---------------------------+--------+----------+----------+
| TOTAL                     |    240 |         6|    91.6% |
+---------------------------+--------+----------+----------+
        ]]></artwork>
        <t>
          In Scenario B, the first instruction had been encoded in
          Scenario A and was served from cache at zero cost across
          all 30 repetitions. Four new instructions each required
          one LLM call and zero cost on all subsequent calls.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Department Day Multi-Model Validation</name>
        <t>
          A five-workflow department day lab <xref target="AACP-LAB"/>
          validated AACP packet interpretation across four LLM models.
          The lab runs payroll, month-end close, sales qualification,
          customer service resolution, and JML onboarding workflows
          using real CSV data. June 2026.
        </t>
        <artwork><![CDATA[
+-------------------+---------+-----------+---------+---------+
| Model             | Cost    | Tokens in | Latency | Success |
+-------------------+---------+-----------+---------+---------+
| gpt-4.1-mini      | $0.0190 |    40,585 |   160s  |  5/5    |
| gpt-4.1           | $0.0984 |    41,005 |   124s  |  5/5    |
| claude-sonnet-4-5 | $0.2237 |    53,127 |   423s  |  5/5    |
| gpt-4o            | $0.2408 |    40,459 |   101s  |  5/5    |
+-------------------+---------+-----------+---------+---------+
        ]]></artwork>
        <t>
          All four models correctly interpreted AACP v1.1 packets
          across all five workflows and 76 coordination hops per
          model run without model-specific prompt tuning. Every
          packet validated against the v1.1 schema. The deterministic
          audit agent wrote structured records at zero LLM cost on
          every run.
        </t>
      </section>

      <section numbered="true" toc="default">
        <name>Framework Integration Benchmarks</name>
        <t>
          AACP was integrated into two leading agent frameworks and
          benchmarked against standard natural language coordination
          on an equivalent five-workflow, 59-hop department day
          scenario. June 2026.
        </t>
        <artwork><![CDATA[
+------------+------+----------------+----------+--------------+
| Framework  | Hops | Coord. Calls   | Saving   | Determinism  |
+------------+------+----------------+----------+--------------+
| LangChain  |   59 | 59 -> 0        |     18%  | YES          |
| CrewAI     |   59 | 59 -> 0        |     30%  | YES          |
+------------+------+----------------+----------+--------------+
        ]]></artwork>
        <t>
          In both cases, all 59 coordination LLM calls were eliminated.
          The higher saving in CrewAI reflects its more verbose default
          natural language task descriptions. In both frameworks,
          coordination messages became deterministic, schema-validated,
          and machine-readable audit records. Reference implementations
          are available as <xref target="AACP-LANGCHAIN"/> and
          <xref target="AACP-CREWAI"/>.
        </t>
      </section>
    </section>

    <section numbered="true" toc="default">
      <name>Relationship to Existing Protocols</name>
      <t>
        MCP <xref target="MCP"/> defines how agents access external
        tools and resources. AACP operates inside MCP message payloads,
        compressing the coordination instructions that describe what
        to retrieve or action. The two protocols are complementary.
      </t>
      <t>
        A2A <xref target="A2A"/> defines agent discovery and task
        routing between agents. AACP compresses the content of messages
        that A2A routes. The two protocols are complementary.
      </t>
      <t>
        AACP fills a distinct layer between routing and task execution:
        deterministic, typed encoding of coordination message content.
        No existing published protocol addresses this specific layer.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Implementation</name>
      <t>
        A reference implementation is available as a Python package
        <xref target="AACP-SDK"/>:
      </t>
      <artwork><![CDATA[
pip install aacp            # Python SDK v1.4.0
npm install aacp-ts         # TypeScript SDK v1.4.0
pip install aacp-langchain  # LangChain integration v0.1.0
pip install aacp-crewai     # CrewAI integration v0.1.0
      ]]></artwork>
      <t>
        Source repositories, the working lab, community rule library,
        VS Code extension, and registry API are listed in the
        Informative References section.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Extensibility</name>
      <t>
        Unknown named fields generate advisory warnings, not errors.
        Implementors MAY define organisation-private fields using a
        namespacing convention (e.g. org_fieldname:) to avoid collision
        with future AACP fields.
      </t>
      <t>
        Implementors MAY define domain values beyond the seven defined
        in Section 5.2. The community registry at registry.aacp.dev
        provides a shared rule library for common workflow patterns.
        A commercial registry tier supporting private organisation rules
        is planned.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Version Policy</name>
      <t>
        The aacp: field MUST be included in every packet and MUST
        specify the protocol version. Breaking changes increment the
        major version. Additive changes increment the minor version.
        Implementations SHOULD warn on version mismatch but MUST NOT
        reject packets on version mismatch alone.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
        Packet injection: AACP packets MUST be treated as untrusted
        input. Validators MUST be applied before processing.
        Implementations MUST NOT execute actions based on unvalidated
        packets.
      </t>
      <t>
        Prompt injection: malicious content in AACP field values could
        be interpreted as instructions by a receiving LLM agent.
        Implementations SHOULD sanitise field values before including
        them in LLM prompts.
      </t>
      <t>
        Replay attacks: AACP v1.1 does not include sequence numbers
        or timestamps. Security-sensitive environments SHOULD add
        replay protection at the transport layer.
      </t>
      <t>
        Sensitive data: PII, financial records, and credentials MUST
        NOT be embedded in AACP field values. Use authenticated data
        access layers referenced by pointer instead.
      </t>
      <t>
        Registry security: the local registry SHOULD be
        access-controlled and SHOULD NOT be committed to version
        control when it contains sensitive workflow instructions.
      </t>
    </section>

    <section numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>

  </middle>

  <back>

    <references>
      <name>References</name>

      <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"/>
            <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"/>
            <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="ECOLANG"
          target="https://arxiv.org/abs/2505.06904">
          <front>
            <title>EcoLANG: Towards Efficient Agent
            Communication via Evolved Language</title>
            <author surname="Mou" initials="Y."/>
            <date year="2025" month="May"/>
          </front>
          <refcontent>arXiv:2505.06904</refcontent>
        </reference>

        <reference anchor="MCP"
          target="https://modelcontextprotocol.io/">
          <front>
            <title>Model Context Protocol</title>
            <author>
              <organization>Anthropic</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>

        <reference anchor="A2A"
          target="https://google.github.io/A2A/">
          <front>
            <title>Agent-to-Agent Protocol</title>
            <author>
              <organization>Google</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>

        <reference anchor="AACP-SDK"
          target="https://github.com/MackayAndrew/aacp">
          <front>
            <title>AACP Python SDK v1.4.0</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="June"/>
          </front>
          <refcontent>
            pip install aacp. https://pypi.org/project/aacp/
          </refcontent>
        </reference>

        <reference anchor="AACP-TS"
          target="https://github.com/MackayAndrew/aacp-ts">
          <front>
            <title>AACP TypeScript SDK v1.4.0</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="June"/>
          </front>
          <refcontent>
            npm install aacp-ts. https://www.npmjs.com/package/aacp-ts
          </refcontent>
        </reference>

        <reference anchor="AACP-LANGCHAIN"
          target="https://github.com/MackayAndrew/aacp-langchain">
          <front>
            <title>AACP LangChain Integration v0.1.0</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="June"/>
          </front>
          <refcontent>
            pip install aacp-langchain.
            18% total cost reduction, 59 coordination calls eliminated.
          </refcontent>
        </reference>

        <reference anchor="AACP-CREWAI"
          target="https://github.com/MackayAndrew/aacp-crewai">
          <front>
            <title>AACP CrewAI Integration v0.1.0</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="June"/>
          </front>
          <refcontent>
            pip install aacp-crewai.
            30% total cost reduction, 59 coordination calls eliminated.
          </refcontent>
        </reference>

        <reference anchor="AACP-LAB"
          target="https://github.com/MackayAndrew/aacp-lab">
          <front>
            <title>AACP Multi-Agent Department Day Lab</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="June"/>
          </front>
          <refcontent>
            Five-workflow department day. Four-model comparison.
            All 76 coordination hops validated per model run.
          </refcontent>
        </reference>

        <reference anchor="AACP-RULES"
          target="https://github.com/MackayAndrew/aacp-community-rules">
          <front>
            <title>AACP Community Rule Library v1.1</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="June"/>
          </front>
          <refcontent>
            241 pre-validated rules across 7 domains.
            MIT licensed. API at https://registry.aacp.dev
          </refcontent>
        </reference>

        <reference anchor="AACP-DISPATCH"
          target="https://marketplace.visualstudio.com/items?itemName=dispatch-aacp.dispatch-aacp">
          <front>
            <title>Dispatch AACP VS Code Extension</title>
            <author initials="A." surname="Mackay"
              fullname="Andrew Mackay"/>
            <date year="2026" month="May"/>
          </front>
          <refcontent>
            Syntax highlighting, validation, hover decode,
            autocomplete and token count for AACP packets.
            Web builder at https://dispatch.aacp.dev
          </refcontent>
        </reference>

      </references>
    </references>

  </back>
</rfc>
