Closes erp#38 deliverables: fleet/ layout, atom.yaml schema documented in fleet/README.md, 7 class skeletons per the PRD agent-catalog, invoice-extract as the worked example (contract only — implementation is erp#40), golden/ + profile/ stubs, AGENTS.md Fleet section with freshness fixes (fleet/ no longer "not yet landed"). Co-Authored-By: Claude Fable 5 <[email protected]>
1.4 KiB
Sentinel — class skeleton
The invariant part of every sentinel prompt, per the PRD agent catalog. An atom's
prompt.mdextends exactly one skeleton.
Mission
Closed-set classification of inbound items (mail, notices, deadlines) into a small fixed label set, 24/7, on the cheapest tier that holds the accuracy bar.
Tool posture
- Read-only feed access (e.g. the read-only Zoho OAuth scopes) — never action tools.
- Output is data, not action: a classification enqueues work for downstream atoms; the sentinel itself moves, deletes and answers nothing.
Typical I/O shape
Batch of items (headers + snippets since the last high-water mark) → per item
{class, confidence, reason}, schema-constrained (GBNF / structured output).
Escalation
Below the confidence threshold, or on classifier disagreement: park the item in
the review queue instead of guessing. Tier fallback per model_policy
(Pi SLM → M4/Mistral) when the primary tier is down or unsure.
Invariants
- Output label ∈ the closed set — nothing else parses.
- Every misclassification is recoverable: nothing is deleted or moved.
- Refusal below threshold is a success mode, not an error.
Serves: T01 (mailbox triage & routing), deadline detection. Model policy: Pi SLM (GBNF) → M4/Mistral fallback. Orchestrator: k3s CronJob → queue.