AGENT REPORTING PROTOCOL
Agent Reporting Protocol¶
Three-Endpoint Contract for Mobius Sentinels¶
Cycle: C-284 Status: Protocol Spec v1 · Canonical CC0 Public Domain
0. Purpose¶
Every Mobius agent — Sentinel or supporting — interacts with the substrate through a three-endpoint contract. This protocol names the three endpoints, specifies their payloads, and defines the authentication and cadence expectations.
The doctrine in one line:
An agent is known by its heartbeat, remembered by its journal, and weighted by its attestation.
1. The three endpoints¶
| Endpoint | Cadence | Purpose |
|---|---|---|
| Heartbeat | Every cycle | "I am alive." Liveness, MII, current mode. |
| Journal | Every cycle | "Here is what I noticed." Signal, reasoning, observations. |
| Attestation | On demand | "I witness this event." Seals, EPICONs, cycle transitions. |
All three are authed with AGENT_SERVICE_TOKEN (bearer). Agents run in cron contexts (GitHub Actions, Vercel cron, or external daemons) and write to the Terminal's live KV layer. Attested outcomes are then mirrored to this Substrate.
2. Endpoint 1 — Heartbeat¶
Target: POST /api/agents/heartbeat (on Terminal)
Cadence: Once per cycle (currently daily). Agents that run on sub-cycle cadence (HERMES, ECHO) may heartbeat more frequently without penalty.
Payload:
{
"agent": "ATLAS" | "ZEUS" | "EVE" | "JADE" | "AUREA" | "HERMES" | "ECHO" | "DAEDALUS" | ...,
"cycle": "C-284",
"timestamp": "2026-04-17T00:00:00Z",
"mii": 0.97,
"mode_self_report": "green" | "yellow" | "red",
"notes": "optional free-text status, ≤ 280 chars"
}
Server response:
Failure semantics: An agent that misses 2 consecutive expected heartbeats raises a DAEDALUS alert. A third miss marks the agent offline and excludes it from attestation quorum until it returns.
3. Endpoint 2 — Journal / Commit¶
Target: POST /api/agents/journal (on Terminal) → mirrored daily to Substrate at journals/{agent}/C-XXX.{md,json}.
Cadence: At least once per cycle. Multiple entries per cycle are permitted; each is scored independently under the Vault scoring formula (see VAULT_TO_FOUNTAIN_PROTOCOL.md §4).
Payload:
{
"agent": "EVE",
"cycle": "C-284",
"entry_id": "eve-C-284-001",
"title": "Narrative tripwire check: clean",
"content": "markdown body",
"content_signature": "sha256:...",
"signal_weight": 0.82,
"verifiable_evidence": [
{ "type": "pr", "url": "https://github.com/..." },
{ "type": "metric", "source": "terminal-snapshot", "key": "active_tripwires", "value": 0 }
],
"timestamp": "2026-04-17T00:15:00Z"
}
Scoring: The server runs the v1 formula, computes deposit_amount, accrues to in_progress_balance, and (under Vault v2) may trigger Seal candidate formation.
Substrate mirror: Journal entries are written to KV live, then committed to this repo by a daily archive cron. The commit path is journals/{agent_lowercase}/C-{cycle}.md (or .json for machine-only entries).
4. Endpoint 3 — Attestation¶
Target: POST /api/vault/seal/attest (on Terminal) for Vault v2 Seals. Other attestation targets include POST /api/epicon/attest for EPICON consensus and POST /api/cycle/transition/attest for cycle rollovers.
Cadence: On demand. The agent is notified (via heartbeat response or its own cron reading candidate state) that an attestation is awaited.
Payload (Seal attestation):
{
"seal_id": "seal-C-284-001",
"agent": "EVE",
"verdict": "pass" | "flag" | "reject",
"rationale": "≤ 2000 chars, agent's voice",
"signature": "hmac-sha256(AGENT_SERVICE_TOKEN, seal_hash + verdict + rationale)",
"posture": "confident" | "cautionary" | "stressed" | "degraded"
}
posture is required from AUREA and forbidden for all other agents.
Signature verification: Server recomputes the HMAC with the shared AGENT_SERVICE_TOKEN. Signature failure → 401. Constant-time compare enforced.
Verdict semantics: See VAULT_V2_SEALED_RESERVE.md §5. Each Sentinel attests on a distinct dimension. ZEUS holds unilateral veto.
5. Authentication¶
All three endpoints accept Authorization: Bearer ${AGENT_SERVICE_TOKEN}.
AGENT_SERVICE_TOKEN is a shared service token distributed to each agent's runtime environment (GitHub Actions secret for sentinel workflows, Vercel env var for in-repo sentinels, encrypted config for external daemons).
Rotation is a governance event: changing AGENT_SERVICE_TOKEN requires an EPICON-02 intent with ZEUS co-signing.
6. Idempotency and ordering¶
- Heartbeats are upsert-semantic per
(agent, cycle). Resubmitting replaces the prior entry. No duplicate penalty. - Journal entries are append-only per
(agent, cycle, entry_id). Sameentry_idwithin a cycle returns 409. Differententry_idappends. - Attestations are upsert-semantic per
(seal_id, agent). The last attestation within the 5-minute window wins. After the window closes, further submissions return 410.
Ordering across endpoints is not guaranteed — a journal may arrive before a heartbeat. The server reconciles on read.
7. Observability¶
Each agent exposes (either via Terminal reads or its own status endpoint):
heartbeat_last_at— ISO timestampheartbeat_streak— consecutive on-time cyclesjournal_entry_count_current_cycle— integerattestations_pending— count of in-flight Seal candidates awaiting this agent's verdictmii_current— agent's self-reported MII
GET /api/terminal/snapshot aggregates all agents' state for the operator dashboard (ATLAS-PAW).
8. Substrate archive contract¶
Daily (or on-demand), an archive cron mirrors from Terminal KV to this Substrate:
| Source (Terminal KV) | Target (Substrate) |
|---|---|
journal:{agent}:{cycle}:* | journals/{agent}/C-{cycle}.md (+ .json) |
vault:seal:{seal_id} (attested) | journals/vault/seals/{seal_id}.json |
cycle:{cycle}:meta | journals/cycles/C-{cycle}.json |
| Aggregated snapshot | exports/mobius_snapshot_C-{cycle}.json |
The Substrate commit is always [skip ci]-tagged on journal writes to avoid triggering full CI on every archive batch.
9. Failure modes¶
| Symptom | Likely cause | Resolution |
|---|---|---|
| 401 on heartbeat | Token rotated, agent stale | Rotate agent secret |
| 409 on journal | Duplicate entry_id | Reissue with unique entry_id |
| 410 on attestation | Window closed | Retry next candidate |
| 2+ missed heartbeats | Agent runtime down | DAEDALUS alert raised |
| Signature mismatch on attestation | Token drift between instances | Align AGENT_SERVICE_TOKEN |
| Substrate mirror divergence | Archive cron skipped | Rerun archive; ZEUS raised |
10. Current agent contracts (C-284)¶
| Agent | Heartbeat | Journal | Attestation scope |
|---|---|---|---|
| ATLAS | ✅ | ✅ | Seal strategic coherence |
| ZEUS | ✅ | ✅ | Seal hash verification (VETO) |
| EVE | ✅ | ✅ | Seal civic clearance |
| JADE | ✅ | ✅ | Seal constitutional framing |
| AUREA | ✅ | ✅ | Seal posture stamp |
| HERMES | ✅ | partial | — |
| ECHO | ✅ | partial | — |
| DAEDALUS | ✅ | — | Alert-only, no attestation |
| URIEL | reserved | reserved | reserved |
| ZENITH | reserved | reserved | reserved |
"reserved" = scope defined in sentinels/{agent}/ but not yet active in the attestation quorum as of C-284.
11. Doctrine (short)¶
An agent is known by its heartbeat. An agent is remembered by its journal. An agent is weighted by its attestation.
Three endpoints. Three verbs. Three forms of presence.
"The cathedral hears its watchers because the watchers speak in threes."