agent-ops-specs

Principal Handoff: Decisions 0.3

   
Status Draft
Version 0.3 (2026-10-27); formerly Questions 0.1
Extension decisions/0.3, an extension of Principal Handoff Core 0.3
License Apache-2.0
Schemas schemas/ (record schema in ../core/schemas/)
Conformance suite conformance/
Reference ../reference/

Abstract

Agents working for someone often reach a choice only that someone may make: which of two designs, whether to spend money, what a customer was promised. The agent’s session may end long before the answer comes. This extension of Principal Handoff covers such decisions: how an agent raises one with options and a working assumption, how the principal side records the principal’s answer (or that no answer is needed) with the authority it was made under, how an answer is revised, and how the answer reaches the project rather than a session that may be gone. It builds on the core registers; work only the principal can do is the Acts extension.

Table of contents

  1. Conventions and terminology
  2. Model
  3. Records
  4. Lifecycle
  5. Receiving decisions
  6. Mapping from Questions 0.1
  7. Conformance
  8. Security considerations
  9. Relation to the Acts extension and other specifications
  10. Open issues

1. Conventions and terminology

The key words in this document are to be interpreted as in the core, which also defines principal, principal side, requester, delegate, item, key, terms, record, claim, relation and note. This extension adds:

Decision
An item of kind decide: an answer or choice only the principal may make.
Answer
{"text": …, "option"?: …}: free text, and the chosen option’s id if the decision has options.
Working assumption
What the requester proceeds on while the decision is open (terms.default). It is never an answer (core R4).

2. Model

3. Records

Records use the core record with ext: "decisions/0.3".

type origin Schema Additional requirements
raised requester raised terms.text, terms_rev: 1
amended requester amended terms, terms_rev
withdrawn requester withdrawn reason
settled principal settled outcome; answer when decided; authority; terms_rev
reopened principal reopened supersedes
claimed agent, requester claimed outcome: "decided", answer, evidence.basis
related principal (same_as), requester (derived_from) related relation
note any note about

If answer.option is present, the principal side MUST make it one of the options at the terms_rev it records. A receiver that finds it is not, or cannot check because it never saw the terms, MUST still accept the settlement, treat answer.text as authoritative, and SHOULD report the mismatch: the principal’s answer must not be lost to a validation error.

4. Lifecycle

  1. Raising. The requester sends raised with id r:<key>, so that a repeated raised is a duplicate of the first (core §10). A second raised for the same key under another id is a need-register conflict (core §6), which the principal side SHOULD report. Other record ids are any ids unique per core §10.
  2. Amending. The requester changes the question, its options or its working assumption with amended, listing its current need record in supersedes and increasing terms_rev by one. A settlement made against older terms is stale (core §6).
  3. Deciding. The principal side records settled with outcome: "decided" and an answer, naming the decider and authority kind (core §5):
    • principal: the principal answered.
    • confirmed: the principal confirmed an answer the assistant proposed.
    • delegated: the assistant answered under a standing instruction or mandate (under), without the principal.
    • attested: the answer is taken from evidence, for example something the principal wrote elsewhere.
  4. Dismissing. settled with outcome: "dismissed": the principal decided no answer is needed. The requester MUST NOT keep waiting and SHOULD raise a new decision if the need returns.
  5. Revising. The principal side MAY replace an earlier settlement (the principal changed their mind, or answers a decision they had dismissed) with a new settled that lists it in supersedes, or reopen it with reopened. Which settlement is current is defined by core §6.
  6. Withdrawing. The requester sends withdrawn when it no longer needs an answer. If the principal answered in the requester’s own session, the requester SHOULD first send a claimed with that answer and evidence.basis, so that the principal side can record who decided, and then withdraw with reason: "settled". The principal side MAY adopt the claim (core §7).

5. Receiving decisions

6. Mapping from Questions 0.1

Questions 0.1 event Decisions 0.3 record
asked raised, terms from text, options, default, due; terms_rev: 1
answered, decided_by: principal settled, outcome: "decided", authority.kind: "principal"
answered, decided_by: assistant settled, outcome: "decided", authority.kind: "delegated" with under, or "attested" with evidence.basis
dismissed settled, outcome: "dismissed"
supersedes (one id) supersedes (array)
withdrawn, reason: settled claimed with the answer, then withdrawn, reason: "settled"
withdrawn, reason: not_needed withdrawn, reason: "not_needed"

7. Conformance

7.1 Conformance classes

7.2 Conformance suite

conformance/ holds JSON fixtures; its README documents the formats.

File Exercises
records.json §3: record → schema it validates against, or invalid
lifecycle.json core §6 and §4 here: the records one receiver holds for one decision (with duplicates, reordering, revisions, forks, ties, cycles, withdrawals, stale terms and invalid records) → the decision’s state

8. Security considerations

The core considerations apply. In addition:

9. Relation to the Acts extension and other specifications

Non-normative.

10. Open issues

References