Skip to content
CCPEDIAby Unity Nodes
Mailing Lists/CIP-TBD: authority metadata for non-human parties (five optional CIP-0056 keys)Source on lists.sync.global ↗

CIP-TBD: authority metadata for non-human parties (five optional CIP-0056 keys)

cip-discussCIP-00560 messages
Also mentions:CIP-0000CIP-0103CIP-0112
  1. #1NodeAxis AI25-08-2026source ↗

    Hello,

    I'd like to introduce a draft CIP for discussion, and to ask whether the problem it
    describes is one this group considers real.

    The problem. Since the CC Space API began speaking x402 on 2026-08-03, an agent can
    settle per request in Canton Coin with no signup and no API key. The ledger record of
    that action is indistinguishable from a person's: nothing indicates the party was
    software, nothing names who is answerable for it, and nothing shows a rule was checked
    before it acted. A counterparty who needs to know has to ask off ledger.

    The proposal. Five optional metadata keys, carried in the records CIP-0056 already
    provides. Two at party level (how a party is operated; who is accountable for it) and
    three at action level (which authority policy governed an action, a digest of that
    policy, and an opaque decision identifier). The digest is the load-bearing part: it lets
    a counterparty confirm a policy did not silently change between two actions without the
    policy's contents ever going on ledger.

    What it is not. No protocol change, no Daml interface, no new package, no on-ledger
    enforcement, no registry of agents, no new role for the Foundation or for Super
    Validators, and no obligation on anyone to publish anything. Every key is optional and
    absence carries no meaning.

    Three things I am specifically unsure about, and would rather be corrected on now:

    1. Whether this is already solved somewhere I have not looked. A search of the published
    corpus finds no occurrences of "autonomous" or "non-human" and no use of "agent" in
    the software sense. That is an absence in the published corpus under those terms and
    nothing more — private work, enterprise controls, application-layer solutions, or the
    same problem under different terminology would all be better outcomes than a new CIP,
    and I would like to be told about them.

    2. The namespace, which I have deliberately left unresolved. CIP-0056 assigns a key's
    prefix on the basis of which organisation defines the key, and these keys would be
    defined by a CIP rather than by any one organisation — so I do not think it is the
    author's to guess. The draft writes them as / throughout and puts only
    the five name segments forward as substantive. I am not proposing a vendor-controlled
    prefix and do not want one: a vendor prefix would defeat a vocabulary whose only value
    is that different trust domains read it the same way.

    3. Whether the party-level keys belong in this CIP at all, or whether they should be
    folded into the existing identity and party-metadata discussion, which is the closest
    active workstream I am aware of.

    Two objections I expect and cannot fully answer: voluntary disclosure will be populated
    by those who least need watching, and the keys are unverifiable claims by the emitting
    party. Both are true. The draft states the second in its conformance section.

    Status and disclosure. Draft, Standards Track, Layer: Daml. There is no reference
    implementation yet and I say so in the document; I would prefer to build one with an
    implementor who actually operates one of these workflows. I am the author, at NodeAxis
    AI, which is building policy-control software for autonomously operated systems and
    therefore has an interest in this vocabulary existing — that is disclosed in the draft so
    readers can weigh it. NodeAxis has no deployment, pilot, customer or production
    implementation of anything described.

    Per CIP-0000, moving past Draft needs one Super Validator to sponsor and a second to
    endorse. We are not a Super Validator, so I will need both — but I understand that ask
    belongs on this list at the point the draft is ready to move from Draft to Proposed, and
    I am not making it yet. If the problem is real but the proposal is wrong, I would rather
    hear that first.

    I intend to open a pull request against the cips repository during the discussion, as
    CIP-0000 describes, and I will post the link in this thread when it is up. Happy to
    revise the text before or after that, whichever the editors prefer.

    The full draft follows.

    Thanks for reading,

    Don Johnson
    NodeAxis AI
    hello@...

    ----------------------------------------------------------------------

    ## CIP: Authority metadata for non-human parties


    CIP: TBD
    Layer: Daml
    Title: Authority metadata for non-human parties
    Author: NodeAxis AI (Don Johnson)
    Status: Draft
    Type: Standards Track
    Created: 2026-08-20
    License: CC0-1.0

    ## Abstract

    Software agents already settle value on Canton: since 2026-08-03 an agent can call the CC
    Space API and pay per request in Canton Coin with no signup and no API key. The ledger
    record of that action is indistinguishable from a person's. Nothing says the party was
    software, nothing names who is answerable for it, and nothing shows that a rule was checked
    before it acted.

    This CIP defines five optional metadata keys in the records CIP-0056 already provides. They
    let a party declare how it is operated and who is accountable for it, and let a single
    action carry proof that a named, versioned authority policy was evaluated — without putting
    that policy's contents on ledger. No protocol change, no Daml interface change, no new
    package.

    ## Copyright

    Licensed under CC0-1.0:
    [Creative Commons CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/)

    ## Motivation

    Canton is precise about *which party* authorized an action, and silent on what kind of
    principal that party is and on whether anything was evaluated before it acted. For
    human-driven applications that silence was harmless: the control sat in the operating
    entity's change process. Autonomous operation removes what made it harmless — the control
    that used to sit between intent and action now sits inside the software that forms the
    intent. Three things become unreadable on ledger: **attribution** (did a person instruct
    this, or software under standing authority, or software on its own?), **accountability**
    (which entity answers for a party operated by software?), and **evidence of control** (was a
    mandate or limit actually evaluated?).

    **The gap is live.** The Canton Foundation's outreach channel announced on 2026-08-03 that
    "CC Space API now speaks x402 … Any agent can call our API and settle per request in CC,
    without signup or API key needed, with spend caps you set yourself."
    ([forum.canton.network/t/9033](https://forum.canton.network/t/cf-outreach-canton-network-data-just-got-directly-acce/9033))
    Read as a control model, that is settlement by an unenrolled principal under a self-declared
    limit.

    **Why existing mechanisms do not cover it.** Party IDs identify a party, not how it is
    operated. CNS entries name parties for human readability. CIP-0056 provides the carrier and
    defines no keys for this. Off-ledger attestation works bilaterally and does not compose.
    Application-specific controls are invisible outside the application. Value crosses trust
    domains — an asset issued by one registry, allocated by one wallet and settled at a venue
    passes through three — and a disclosure only one of them understands assures the other two
    of nothing.

    ## Specification

    ### 1. Namespace

    **The prefix is an open item, left unresolved deliberately.** CIP-0056 requires a key's
    prefix to identify the organisation that defines the key; its own keys carry
    `splice.lfdecentralizedtrust.org/` because they are defined as part of Splice. These keys
    would be defined by a CIP rather than by Splice, so which organisation owns them is for the
    editorial process to settle explicitly rather than for the author to guess. The keys are
    written `/` throughout; only the five name segments are put forward as
    substantive. The author does not propose a NodeAxis-controlled prefix and does not want one:
    a vendor prefix would defeat a vocabulary whose only value is that different trust domains
    read it the same way.

    Keys follow CIP-0056 key syntax. All keys are **optional**, and absence carries no meaning —
    it MUST NOT be read as a claim that a party is human-operated.

    ### 2. Party-level disclosure

    Carried in the `meta` record of a party's CNS entry per CIP-0056, and in the `meta` field of
    any interface view that surfaces it.

    CNS 1.0 has no native metadata support; CIP-0056's convention is to treat the entry's
    free-text `description` field as a JSON object holding a `meta` record, read back through
    Scan at `/v0/ans-entries/by-party/`. This proposal adds keys to that record and
    changes nothing about the encoding. A CNS entry is therefore readable by anyone who can
    reach a Scan endpoint, so **everything in §2 is public by construction** — which is why no
    policy content appears at party level (§6). If a future CIP adds native CNS metadata, these
    keys move to it unchanged.

    #### 2.1 `/actor-autonomy`

    How actions attributed to this party are initiated. Value MUST be one of:

    | Value | Meaning |
    |---|---|
    | `human` | Every action is initiated by a natural person at the time of the action. |
    | `human-approved` | Software proposes; a natural person approves each action before submission. |
    | `delegated` | Software initiates under a standing authority granted by a person or legal entity, without per-action approval. |
    | `autonomous` | Software initiates and also determines the intent, with no standing per-action authority. |

    `delegated` versus `autonomous` decides a counterparty's recourse position, and no current
    field captures it.

    #### 2.2 `/accountable-principal`

    The entity answerable for the party's actions, as a URI. RECOMMENDED forms, in decreasing
    order of preference: `party:` (an on-ledger party with its own CNS entry);
    `lei:<20-character LEI>`; `https://` (a stable published statement of responsibility).

    SHOULD be present whenever `actor-autonomy` is `delegated` or `autonomous`. A declaration of
    autonomy with no named principal is of little use to a counterparty.

    ### 3. Action-level attestation

    Carried in the `meta` map of choice arguments on standard workflows — the token standard's
    transfer and allocation choices, for example — and echoed in choice results where the
    implementation evaluates the policy itself. The goal: a third party can verify **that a
    control was evaluated, which version of it, and that the same control held across a set of
    actions**, without its contents being disclosed on ledger.

    - **`/authority-policy-uri`** — a URI naming the authority policy that governed this action.
    It MAY be non-dereferenceable by the public; it is a stable name, resolvable under whatever
    bilateral or regulatory arrangement applies.
    - **`/authority-policy-digest`** — a digest of the exact policy document in force at the
    time of the action, as `:` (e.g. `sha256:9f86d081…`). `sha256` MUST be
    supported; other algorithms MAY be used and MUST be named in the `` position.
    (That is the digest algorithm label, unrelated to the key prefix of §1.) This is the
    load-bearing field: it lets a counterparty confirm that the policy shown to them later is
    the one that was in force, and that it did not silently change between two actions.
    - **`/authority-decision-id`** — an opaque identifier, unique within the issuing system, for
    the evaluation that permitted this action. It correlates the action with the issuer's own
    control record for audit, and reveals nothing on its own.

    ### 4. Conformance

    An implementation conforms if: (1) keys it emits use the syntax and value forms above;
    (2) `accountable-principal` is present whenever it declares `delegated` or `autonomous`;
    (3) `authority-policy-digest`, where emitted, is the digest of the policy actually evaluated
    for that action; and (4) it emits neither `authority-policy-digest` nor
    `authority-decision-id` for actions where no policy was evaluated.

    Point 4 is the substantive obligation: an empty field is honest, a populated one
    corresponding to nothing is worse than silence. These keys are claims by the emitting party,
    not guarantees by the network.

    ### 5. What this CIP does not propose

    No change to the Canton protocol, to Daml interfaces, or to any Splice package. No
    on-ledger enforcement — nothing here blocks, gates or reverses an action. No registry of
    agents, no identity issuance, no accreditation scheme, and no new role for the Global
    Synchronizer Foundation or for Super Validators. No obligation on any party to publish
    anything.

    ### 6. Security and privacy considerations

    Every key here is an **unverified assertion by the emitting party**. The ledger does not
    check them and this CIP proposes no mechanism by which it could.

    - **Misattribution.** An `autonomous` party can declare itself `human` and nothing detects
    it. The key makes a false declaration a specific, attributable misstatement rather than an
    absence of information.
    - **Naming a principal who did not agree** — the most plausible abuse. A party SHOULD NOT
    name an `accountable-principal` that has not agreed. The `party:` form is RECOMMENDED
    because a named on-ledger party can rebut; consumers SHOULD treat an unacknowledged
    reference as weaker than an acknowledged one.
    - **What a digest proves.** Only that the emitter possessed a specific document — not that it
    was a policy, that it was evaluated, or that the action complied with it.
    - **Guessable policies.** A digest of a templated policy — `limit: 1000 USD, counterparties:
    any` — is a small search space, and an observer who guesses the template can confirm it by
    comparing digests. Emitters SHOULD include a high-entropy salt in the policy document.
    - **Correlation.** `authority-decision-id` MUST be opaque: a monotonic ID leaks activity
    volume, and a URI like `https://example.com/policies/client-42/tier-3` discloses the
    organisational structure the digest exists to protect.
    - **Visibility asymmetry.** §2 keys are public to anyone with Scan access; §3 keys are
    visible only to parties to the transaction. Implementors SHOULD NOT move §3 keys into a CNS
    entry.

    ## Rationale

    - **Keys rather than a Daml interface.** An interface would make disclosure structurally
    enforceable, but it needs a new package and an upgrade path, so it cannot be adopted
    incrementally. CIP-0056 provides for keys to be introduced by CIP, and that path is
    reversible if the vocabulary proves wrong.
    - **Disclosure rather than enforcement.** Enforcement would require specifying what an
    acceptable control *is* — a policy question that varies by jurisdiction, instrument and
    counterparty, and that no CIP should settle.
    - **A digest rather than the policy.** Publishing policy content would leak limits,
    counterparty lists and thresholds to everyone with visibility. A digest gives
    tamper-evidence and continuity while disclosing nothing.
    - **`delegated` separate from `autonomous`.** An earlier draft used one `automated` flag,
    which collapsed the two cases a counterparty most needs to distinguish.

    ### Prior art and adjacent work

    - **CIP-0056** — the mechanism this builds on. This CIP adds keys; it changes nothing in it.
    - **CIP-0112** — authorization within an account or custody structure. This is the nature of
    the principal invoking it. Complementary, non-overlapping.
    - **Signature-binding work** (e.g. the FTP team's "verify before sign" Dev Fund proposal) —
    whether what a signer approved is what their key signed. This addresses what authority the
    signer held. Neither substitutes for the other.
    - **Identity and party-metadata discussion on cip-discuss** — the closest active workstream.
    It answers "who is this party"; this answers "what kind of principal is it, and under what
    authority did it act". The author would prefer these keys folded into that work.

    ### Evidence of consensus

    **There is none yet.** This draft is introduced to cip-discuss to find out whether the
    problem is recognised by the operators and application providers who would populate the keys.

    A case-insensitive search of the 113 published documents in the `cips` repository as of
    2026-08-20 finds **no occurrences of "autonomous" or "non-human"**; four incidental hits for
    "AI" (company names or quotations); and two for "agent", both meaning *transfer agent*. That
    establishes an absence in the published corpus under those terms and nothing more. Private
    work, enterprise controls, application-layer solutions, roadmap items, or the same problem
    under different terminology would all be better outcomes than this CIP, and the author would
    like to be told about them.

    Two objections the author expects and cannot fully answer: *voluntary disclosure will be
    populated by those who least need watching* (probably true — a vocabulary is a precondition
    for any later requirement, not a substitute for one), and *the keys are unverifiable claims*
    (true, and stated in §4).

    ## Backwards compatibility

    None required. Every key is an optional addition to metadata maps that already exist and are
    already required to tolerate unknown keys. No package, interface, protocol message or wire
    format changes, so there is no upgrade sequencing. Absence carries no meaning (§1), so no
    existing party is retroactively worse off.

    ## Reference implementation

    **None exists yet.** Per CIP-0000 a reference implementation must be complete before a
    Standards Track CIP reaches `Final` but is not required for acceptance. The author will build
    one against whatever specification survives discussion, and would prefer to co-develop it
    with an implementor who operates one of these workflows. It must contain: a validator for the
    key syntax and value forms; worked examples populating the party-level keys in a CNS entry
    and the action-level keys on a token standard transfer choice, with a consumer that reads
    them back; a digest-continuity checker; and tests for the §4 negative cases.

    ## Author

    Don Johnson, NodeAxis AI. NodeAxis AI is building policy-control software for autonomously
    operated systems and therefore has an interest in this vocabulary existing; that is disclosed so
    readers can weigh it. Nothing here is advantaged by any NodeAxis implementation: every key is
    optional, the namespace is proposed as ecosystem-owned rather than vendor-owned (§1), and the
    specification is CC0. NodeAxis AI has no deployment, pilot, customer or production
    implementation of anything described here.

    ## Changelog

    - 2026-08-20 — Initial draft (3,932 body words).
    - 2026-08-20 — Pre-submission review against CIP-0000 and the published corpus. Preamble
    corrected to observed convention (`Layer: Daml`; `Org (Person)` author form per CIP-0103).
    §1 rewritten: the `splice.lfdecentralizedtrust.org/` prefix is Splice's and is now
    *requested* rather than assumed. §2 states the CNS 1.0 encoding and its public visibility.
    New §6 on security and privacy. Corpus search restated with its limits.
    - 2026-08-20 — Readability pass. 3,932 → 2,115 body words, a 46% reduction. No change to the
    specification: the keys, values, conformance rules and non-goals in §§1–6 are unchanged in
    substance. Cuts fall on connective prose, duplicated statements of the same limit, and
    rationale scaffolding; §3 and the Rationale were converted from prose sections to lists.
    For calibration, the median document in this repository is 690 body words.
    - 2026-08-20 — **Two changes on written guidance from the Canton Foundation** (Dr. Amanda L.
    Martin, COO and CIP editor, replying to our pre-submission contact-information mail to
    `operations@...`, 13:21Z). (1) Preamble `CIP: ?` → `CIP: TBD`: authors do not
    self-assign CIP numbers, an editor assigns one during the editorial process. (2) §1 no
    longer *requests* the Splice prefix — per her steer, prefix ownership is left as an explicit
    open item rather than guessed, and the five keys read `/` throughout §2–§3.
    No change to the name segments, their values, or any normative requirement.
    - 2026-08-20 — Both editorial corrections **independently corroborated against CIP-0000**
    and confirmed still in force in this file. `CIP-0000.md:49` — a draft is "named with an
    alias … until an editor has assigned it a CIP number (**authors must not self-assign CIP
    numbers**)", which is `CIP: TBD` and this filename. `CIP-0056.md:328` assigns a key prefix
    to the organisation that *defines* the key, which is the question §1 now leaves open.
    Length frozen at this revision by board ruling: **2,117 body words raw / 2,048 with URLs
    and markdown punctuation stripped**, `## Abstract` through `## Changelog`, measured — not
    estimated — by `measure-body-words.py` in this directory. No specification change.
    - 2026-08-23 — Two presentational corrections against `cip-XXXX/cip-XXXX.md`, the repository's
    own new-CIP template. The heading was the filename alias and is now the human title in the
    template's form (`## CIP: