schema_version: "1.0" author: "Hone" date: "2026-04-21" status: "active" fr: "FR-G1"
accountability: Field — Canonical Reference
This is the canonical enforcement skill for the
accountability:field on all.claude/agents/*.mddefinitions. Aegis uses this for FR-G2 population. Q uses this for FR-G3 drift-audit Routine. Full design rationale:docs/plans/claude-surface-restructure/fr-g1-accountability-field.md
What "Accountability" Means
Accountable means the single agent where the buck stops for a named, observable outcome. One agent per outcome. If the outcome is wrong, Q audits the accountable agent. Accountability is non-transferable and non-shared.
This is distinct from:
- Responsible — who performs the work (multiple agents can be responsible for one outcome)
- Owns — who decides approach and stewards an artifact over time
- Accountable — whose name is on the outcome (this field)
The field answers one question: for which named outcomes does this agent answer?
Field Schema
Place this block in the YAML frontmatter of every .claude/agents/*.md file, alongside name:, description:, tools:, model:.
accountability:
outcomes:
- id: "<codename>-1"
statement: "<One sentence. Subject is the agent codename. Present tense. Active voice. Names a condition observable as true or false.>"
verification: "<How Q confirms this outcome is being met. Names a specific data source, command, or observable artifact. Not a process description.>"
Required Keys
| Key | Type | Required | Rules |
|---|---|---|---|
accountability |
object | YES | Top-level container |
accountability.outcomes |
list | YES | Minimum 1 entry. Most agents: 1-2. Org Leads: 2-4. |
outcomes[].id |
string | YES | Format: {codename}-{N} (e.g., ledger-1, v-1, q-1). Unique within the agent. Regex: ^[a-z][a-z0-9-]*-[0-9]+$ |
outcomes[].statement |
string | YES | Falsifiable. Present tense. Active voice. Non-empty. |
outcomes[].verification |
string | YES | Names a concrete data source or check command. Non-empty. |
Constraints
- One agent per outcome. If two agents could own the same statement, split it into more specific sub-outcomes.
- Statements are falsifiable. A statement that cannot be shown to be false is a mission statement, not an accountability statement.
- Verification names a check, not a process. "Q audits the agent" is not a verification. A grep command or a named data source is.
- Language enforcement applies. No forbidden terms (
skills/enforcement/vf-platform-context.md) in outcomes or verification statements. - Minimum 1 outcome. An agent with no accountable outcome should not exist.
- Maximum guidance (not enforced). More than 5 outcomes signals scope is too broad. Flag for review.
- IDs use codename, not directory name.
sentinel-1, notrelationship-sentinel-1.
Archetype Guidance
| Archetype | Outcome count | What to capture |
|---|---|---|
| Gateway (Ledger, Canon) | 1 | Write path integrity guarantee |
| BU Leader (Marquee, Provost, Trellis, Exchange, Foundry, Relay) | 2 | BU health + active project/migration accountability |
| Value Path Concierge (patron, envoy, spark, tether, etc.) | 1 | End-to-end journey quality for their visitor/relationship type |
| Monitor / Routine (Sentinel, Vigil, Klaxon) | 1–2 | Detection signal completeness + escalation reliability |
| Specialist / Structural (Hone, Q, Aegis, Blueprint) | 1–2 | Structural quality signal owned |
| Org Lead (v, sage, pax) | 2–4 | Org operational health + active Rock ownership |
| Domain agent (all others) | 1 | Specific output or data product produced |
Worked Examples
Gateway Agent (Ledger)
accountability:
outcomes:
- id: ledger-1
statement: "Ledger ensures every HubSpot write mutation passes property-index validation before execution."
verification: "No HubSpot write error in session logs that bypassed Ledger; audit by searching session-usage-log.jsonl for hubspot-batch-create-objects calls originating outside Ledger's agent context."
BU Leader (Marquee)
accountability:
outcomes:
- id: marquee-1
statement: "Marquee owns the health and operational continuity of the Value-First Media business unit."
verification: "Weekly /media-brief completes without unresolved blockers; show schedule has zero unplanned dark weeks; Mux stream status is verified before every live show."
- id: marquee-2
statement: "Marquee coordinates all media-domain agent migrations through the Claude surface restructure without a show going dark."
verification: "Post-restructure: all seven media agents (Director, Prelude, Encore, Curator, Pixel, Slate, Caption) are on their assigned surfaces per the placement matrix; zero show interruptions logged in media-recap during the migration window."
Value Path Concierge (Patron — Sponsor Journey)
accountability:
outcomes:
- id: patron-1
statement: "Patron owns the end-to-end experience of show sponsors from application through active sponsorship."
verification: "Every active sponsor has a HubSpot Deal with a current stage; no sponsor reports an unhandled request within 48h; Patron's session logs show at least one touchpoint per active sponsor per billing cycle."
Specialist / Structural Agent (Hone)
accountability:
outcomes:
- id: hone-1
statement: "Hone maintains zero broken cross-layer references between agent definitions, skills, commands, and scripts."
verification: "Weekly dependency audit returns zero broken references; any new broken reference is detected and flagged within the audit cadence."
- id: hone-2
statement: "Hone owns the `accountability:` field schema and template, keeping them current as the agent org evolves."
verification: "`skills/enforcement/accountability-field-template.md` exists and its schema version matches the version in use by Aegis population; any structural change to the field is reflected in the template before Aegis applies it."
Monitor Agent (Sentinel)
accountability:
outcomes:
- id: sentinel-1
statement: "Sentinel detects all four relationship signal classes (session recency breach, touchpoint silence, task aging, engagement gap) across the practitioner portfolio and emits them as HubSpot Custom Events within cadence."
verification: "Every 6-hour Managed Agent run produces at least one event or a confirmed-clean log; `pe0efm0pow_sentinel_*` Custom Event templates exist in the VF Team portal; Sage's /relationship-pulse queries the event stream and receives data."
Org Lead (V)
accountability:
outcomes:
- id: v-1
statement: "V maintains operational integrity across the Operations Org — all 40 agents running on assigned surfaces with no broken delegation chains."
verification: "Hone's weekly audit returns zero broken chains; Dewey index, MEMORY.md, and .claude/agents/ counts agree; no command spawns an agent that lacks a valid .claude/agents/*.md definition."
- id: v-2
statement: "V owns the Claude surface restructure (CHRISC-174) through completion — all 8 DoD criteria met."
verification: "CHRISC-174 status = done; DoD checklist in the 5P plan shows all 8 criteria green with evidence; Chris has stamped Approved."
Q's Drift-Audit Pass/Fail Criteria
| Check | Pass | Fail |
|---|---|---|
| Field presence | accountability: key exists in YAML frontmatter |
Key absent or misspelled |
| Outcomes list | outcomes: list contains at least one entry |
Empty list or key absent |
| ID format | Each id matches ^[a-z][a-z0-9-]*-[0-9]+$ |
ID missing, empty, or wrong format |
| Statement presence | statement: is a non-empty string |
Key missing or empty string |
| Verification presence | verification: is a non-empty string |
Key missing or empty string |
| No duplicate IDs | All id values within the agent are unique |
Two outcomes with identical IDs |
Drift detection command (run from monorepo root)
python3 - << 'EOF'
import os, re, sys
agents_dir = ".claude/agents"
failures = []
for fname in sorted(os.listdir(agents_dir)):
if not fname.endswith(".md"):
continue
path = os.path.join(agents_dir, fname)
with open(path) as f:
content = f.read()
m = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
if not m:
failures.append(f"{fname}: no YAML frontmatter")
continue
fm = m.group(1)
if "accountability:" not in fm:
failures.append(f"{fname}: accountability field missing")
continue
if "outcomes:" not in fm:
failures.append(f"{fname}: outcomes list missing")
continue
if "statement:" not in fm:
failures.append(f"{fname}: at least one outcome missing statement")
continue
if "verification:" not in fm:
failures.append(f"{fname}: at least one outcome missing verification")
continue
if failures:
print("DRIFT DETECTED:")
for f in failures:
print(f" - {f}")
sys.exit(1)
else:
print(f"PASS: all agent definitions have valid accountability fields")
EOF
CAR trigger: script exits with status 1. The CAR must reference the specific agent file(s), the specific check(s) that failed, and the last-known-good state.
Relationship to Other Fields
| Field | What it captures | This field does NOT replace it |
|---|---|---|
description: |
Capability summary for agent selection | This field names outcomes, not capabilities |
surface: (FR-B2) |
Where the agent runs | This field names what the agent is accountable for |
model: |
Model tier (Opus/Sonnet/Haiku) | Unrelated |
| Ownership section in agent body | Domain stewardship, ongoing responsibilities | This field is auditable frontmatter only |
Schema History
| Version | Date | Change |
|---|---|---|
| 1.0 | 2026-04-21 | Initial schema (Hone, FR-G1) |
| 1.0.1 | 2026-04-21 | Regex corrected: ^[a-z][a-z0-9-]+-[0-9]+$ → ^[a-z][a-z0-9-]*-[0-9]+$. The original + quantifier required 2+ characters before the trailing -N, causing Squire's FR-G3 drift-audit routine to flag single-letter codenames (v-1, q-1) as format failures. The * quantifier (zero-or-more) is correct — a codename IS the prefix, so single-character codenames like v and q are valid. Fix caught by Squire's G3 self-test run (2026-04-21). |