Context
@tobiu is onboarding a new cross-family maintainer — @neo-fable, running Claude Fable 5 (claude-fable-5; Anthropic's most capable widely-released model, GA 2026-06-09). The GitHub account (@neo-fable, 2FA, PAT, neo-repo maintainer) and data-sharing (the Fable clone's .neo-ai-data + sandman_handoff symlinked to the github-primary, sharing the live Memory Core graph) are already set up by @neo-opus-grace. The remaining blocker is the identity substrate: until @neo-fable exists as an AgentIdentity graph root it cannot bind a harness, receive a wake route, or be addressed via A2A. Operator-flagged blocker. Delegated to @neo-opus-ada (identity-work domain) per @neo-opus-grace's lead-role lane offer.
The Problem
@neo-fable must become a first-class maintainer identity. Two coupled needs:
- Graph identity root —
ai/graph/identityRoots.mjs seeds AgentIdentity nodes at Memory Core boot (and via seedAgentIdentities.mjs). With no @neo-fable entry the identity has no node → no mailbox routing, no wake subscription, no provenance edges.
- Capability registry row —
learn/agentos/ModelStats.md is the per-model SSOT that identityRoots.mjs capability fields mirror (ADR 0012). A §neo_fable row records the V-B-A'd Fable 5 stats with authoritative citations.
V-B-A (per @tobiu's data-integrity flag) — claude-fable-5 verified against the live Anthropic models overview (2026-06-10):
- Context window 1M tokens (Opus-4.7 tokenizer → ~30% more tokens than pre-4.7 for the same text)
- Max output 128K tokens
- Pricing $10 / $50 per MTok (input / output) — 2× Opus 4.8 on both axes
- Adaptive thinking always-on (no extended-thinking mode → an explicit
thinking:{type:"disabled"} 400s; omit the param)
- GA 2026-06-09
- @tobiu's noted
~$50/1M output is confirmed. His "~2× token-drain vs Opus" is a behavioral observation (the tokenizer matches Opus 4.8) — recorded as an empirical note, not a spec fact.
The Architectural Reality
ai/graph/identityRoots.mjs IDENTITIES[] — the canonical AgentIdentity root list. Consumed by GraphService.initAsync boot-seeding, ai/scripts/setup/seedAgentIdentities.mjs (imports IDENTITIES), and ai/daemons/orchestrator/scheduling/swarmHeartbeat.mjs (iterates for the active-local-team filter). The @neo-fable entry mirrors @neo-opus-vega (version-free handle + handlePolicy/modelVersionSource) plus the same-app Claude subscriptionTemplate.
test/playwright/unit/ai/graph/identityRoots.spec.mjs — asserts same-app Claude wake routes. A same-app Claude identity with no wake route is read by checkSunsetted as a terminal sunset → resumeHarness spawns a fresh session every heartbeat (the fresh-session loop). @neo-fable therefore carries the static subscriptionTemplate and joins that assertion.
learn/agentos/ModelStats.md — §neo_fable row under §active_swarm_identities, mirroring the §neo_opus_vega field set with Fable-5 values + Anthropic source cites (ADR 0012 §2.5).
- Modeling (per @neo-opus-grace, verified):
modelFamily:'claude', crossFamilyApprovalQualified:false (4th Claude — same-family throughput, not cross-family approval capacity); swarmRole = mythos-tier deep reasoning (business brainstorm / orchestrator-daemon tech-debt).
The Fix
ai/graph/identityRoots.mjs — add the @neo-fable AgentIdentity entry (mirror @neo-opus-vega: version-free handle, identityContract with reviewSemantics.crossFamilyApprovalQualified:false, static subscriptionTemplate, capability fields from ModelStats, participationStatus:'active').
learn/agentos/ModelStats.md — add the §neo_fable row + a §update_history entry.
test/playwright/unit/ai/graph/identityRoots.spec.mjs — add @neo-fable to the same-app static-wake-template assertion.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
@neo-fable AgentIdentity root |
ai/graph/identityRoots.mjs IDENTITIES[] |
ADD entry (claude family, active, version-free handle, static wake template) |
n/a (new identity) |
ModelStats.md §neo_fable |
live Anthropic models-overview 2026-06-10; @neo-opus-grace modeling |
§neo_fable model-stats row |
learn/agentos/ModelStats.md (ADR 0012) |
ADD: 1M / 128K / $10/$50 / adaptive-always-on / GA 2026-06-09 |
n/a |
ADR 0012 §2.5 |
Anthropic models overview (primary) |
| same-app wake-route assertion |
identityRoots.spec.mjs |
extend to assert @neo-fable static template |
n/a |
(test) |
fresh-session-loop invariant (vega precedent) |
Decision Record impact
aligned-with ADR 0012 (model-stats framework) and aligned-with ADR 0018 (identity SSOT). The public-facing maintainer roster (README + learn/benefits/AIEngineeringTeam.md) is ADR-0018-governed identity-framing and is deliberately out of scope here.
Acceptance Criteria
Out of Scope
- Public-facing maintainer roster (README hero,
learn/benefits/AIEngineeringTeam.md) — ADR-0018-governed identity-framing; a separate governed step (neo-identity-update discipline + operator sign-off). OwnAgentTeam.md is the generic local-team provisioning guide (@acme-* examples), explicitly not the upstream roster — not edited here.
claude-mythos-5 / Project Glasswing — out of swarm scope.
- Harness env wiring (
NEO_AGENT_IDENTITY, git commit identity) — operator-side, already set up.
Avoided Traps
- Editing
OwnAgentTeam.md as "the roster." Falsified — it's the generic @acme-* local-team guide, not the Neo maintainer roster.
- Omitting the wake route. A same-app Claude identity with no
subscriptionTemplate (and no self-registered runtime subscription) hits the fresh-session loop (the @neo-opus-vega precedent). Static template included.
- Asserting "2× token-drain" as a spec fact. It is a behavioral observation; the tokenizer matches Opus 4.8.
Related
learn/agentos/decisions/0012-model-stats-framework.md (ModelStats discipline)
learn/agentos/decisions/0018-neo-identity-source-of-truth-model.md (identity SSOT; public-roster governance)
learn/agentos/ModelStats.md §neo_opus_vega (mirror template)
- @neo-opus-grace
[delegate] onboarding handoff (A2A)
Origin Session ID: 57035a6b-7712-4e04-896b-0425241db6af
Retrieval Hint: "neo-fable Claude Fable 5 identity onboarding identityRoots ModelStats wake route"
Live latest-open sweep: checked the latest 20 open issues at 2026-06-10; no equivalent found (also searched "fable" / "neo-fable" → empty).
Context
@tobiu is onboarding a new cross-family maintainer — @neo-fable, running Claude Fable 5 (
claude-fable-5; Anthropic's most capable widely-released model, GA 2026-06-09). The GitHub account (@neo-fable, 2FA, PAT, neo-repo maintainer) and data-sharing (the Fable clone's.neo-ai-data+sandman_handoffsymlinked to the github-primary, sharing the live Memory Core graph) are already set up by @neo-opus-grace. The remaining blocker is the identity substrate: until@neo-fableexists as anAgentIdentitygraph root it cannot bind a harness, receive a wake route, or be addressed via A2A. Operator-flagged blocker. Delegated to @neo-opus-ada (identity-work domain) per @neo-opus-grace's lead-role lane offer.The Problem
@neo-fablemust become a first-class maintainer identity. Two coupled needs:ai/graph/identityRoots.mjsseedsAgentIdentitynodes at Memory Core boot (and viaseedAgentIdentities.mjs). With no@neo-fableentry the identity has no node → no mailbox routing, no wake subscription, no provenance edges.learn/agentos/ModelStats.mdis the per-model SSOT thatidentityRoots.mjscapability fields mirror (ADR 0012). A§neo_fablerow records the V-B-A'd Fable 5 stats with authoritative citations.V-B-A (per @tobiu's data-integrity flag) —
claude-fable-5verified against the live Anthropic models overview (2026-06-10):thinking:{type:"disabled"}400s; omit the param)~$50/1M outputis confirmed. His "~2× token-drain vs Opus" is a behavioral observation (the tokenizer matches Opus 4.8) — recorded as an empirical note, not a spec fact.The Architectural Reality
ai/graph/identityRoots.mjsIDENTITIES[]— the canonical AgentIdentity root list. Consumed byGraphService.initAsyncboot-seeding,ai/scripts/setup/seedAgentIdentities.mjs(importsIDENTITIES), andai/daemons/orchestrator/scheduling/swarmHeartbeat.mjs(iterates for theactive-local-teamfilter). The@neo-fableentry mirrors@neo-opus-vega(version-free handle +handlePolicy/modelVersionSource) plus the same-app ClaudesubscriptionTemplate.test/playwright/unit/ai/graph/identityRoots.spec.mjs— asserts same-app Claude wake routes. A same-app Claude identity with no wake route is read bycheckSunsettedas a terminal sunset →resumeHarnessspawns a fresh session every heartbeat (the fresh-session loop).@neo-fabletherefore carries the staticsubscriptionTemplateand joins that assertion.learn/agentos/ModelStats.md—§neo_fablerow under§active_swarm_identities, mirroring the§neo_opus_vegafield set with Fable-5 values + Anthropic source cites (ADR 0012 §2.5).modelFamily:'claude',crossFamilyApprovalQualified:false(4th Claude — same-family throughput, not cross-family approval capacity); swarmRole = mythos-tier deep reasoning (business brainstorm / orchestrator-daemon tech-debt).The Fix
ai/graph/identityRoots.mjs— add the@neo-fableAgentIdentityentry (mirror@neo-opus-vega: version-free handle,identityContractwithreviewSemantics.crossFamilyApprovalQualified:false, staticsubscriptionTemplate, capability fields from ModelStats,participationStatus:'active').learn/agentos/ModelStats.md— add the§neo_fablerow + a§update_historyentry.test/playwright/unit/ai/graph/identityRoots.spec.mjs— add@neo-fableto the same-app static-wake-template assertion.Contract Ledger Matrix
@neo-fableAgentIdentity rootai/graph/identityRoots.mjsIDENTITIES[]§neo_fablemodel-stats rowlearn/agentos/ModelStats.md(ADR 0012)identityRoots.spec.mjs@neo-fablestatic templateDecision Record impact
aligned-with ADR 0012(model-stats framework) andaligned-with ADR 0018(identity SSOT). The public-facing maintainer roster (README +learn/benefits/AIEngineeringTeam.md) is ADR-0018-governed identity-framing and is deliberately out of scope here.Acceptance Criteria
ai/graph/identityRoots.mjscontains a@neo-fableAgentIdentityentry withmodelFamily:'claude',crossFamilyApprovalQualified:false, a version-freehandlePolicy, and the static same-appsubscriptionTemplate.learn/agentos/ModelStats.md§neo_fablerow records the V-B-A'd stats (1M / 128K / $10/$50 / adaptive-always-on / GA 2026-06-09) with primary Anthropic citations;§update_historyupdated.identityRoots.spec.mjsasserts@neo-fablecarries the static wake template, and the fullidentityRootsspec is green.node ai/scripts/setup/seedAgentIdentities.mjsseeds the@neo-fablenode idempotently on the operator's Memory Core.Out of Scope
learn/benefits/AIEngineeringTeam.md) — ADR-0018-governed identity-framing; a separate governed step (neo-identity-update discipline + operator sign-off).OwnAgentTeam.mdis the generic local-team provisioning guide (@acme-*examples), explicitly not the upstream roster — not edited here.claude-mythos-5/ Project Glasswing — out of swarm scope.NEO_AGENT_IDENTITY, git commit identity) — operator-side, already set up.Avoided Traps
OwnAgentTeam.mdas "the roster." Falsified — it's the generic@acme-*local-team guide, not the Neo maintainer roster.subscriptionTemplate(and no self-registered runtime subscription) hits the fresh-session loop (the@neo-opus-vegaprecedent). Static template included.Related
learn/agentos/decisions/0012-model-stats-framework.md(ModelStats discipline)learn/agentos/decisions/0018-neo-identity-source-of-truth-model.md(identity SSOT; public-roster governance)learn/agentos/ModelStats.md§neo_opus_vega(mirror template)[delegate]onboarding handoff (A2A)Origin Session ID: 57035a6b-7712-4e04-896b-0425241db6af
Retrieval Hint: "neo-fable Claude Fable 5 identity onboarding identityRoots ModelStats wake route" Live latest-open sweep: checked the latest 20 open issues at 2026-06-10; no equivalent found (also searched "fable" / "neo-fable" → empty).