Asphodel · Agent — Content Editor

The agent that drafts, but never publishes.

A governed content-editor that turns upstream intelligence into grounded, attributable drafts — proposed to humans, shipped by no one but them.

Asphodel + Tiresias-ZT · ACME Corporation
The Stakes

Messaging is the one thing you cannot un-say.

Every other agent produces an artifact you can quietly revise. The content-editor produces words that carry the company's voice — and a model that both writes and ships is a brand incident with no seatbelt.

Ungoverned

A drafting model with a publish key. No provenance on what it grounded on, no human gate, no signed record of who authored the claim. Fast — and unaccountable.

Governed here

Barbara owns messaging. Agents propose; humans publish. Every draft is grounded, attributed, policy-checked at the enforcement plane, and written into an audited, tenant-isolated store.

The Workforce

367 agents doing real work under one zero-trust policy.

The content-editor is not a lone assistant. It is one governed tenant inside a live fleet mapped like-for-like to the real ACME organization.

367
governed agents
360
fleet agents
7
showcase agents
325,154
directory principals
28
departments
10
regions
SOURCE · CP registry (367 agent tenants, postgres) · tzt_principal identity store · 120,120 humans + 205,034 NHI
Where It Sits

Sixth in a 14-edge hand-off DAG.

The content-editor takes finished analysis from upstream and turns it into a draft — then hands that draft down to compliance. It never originates raw intelligence, and it never closes the loop alone.

threat-intel security-analyst soc-lead research-lead data-analyst content-editor compliance-officer
SOURCE · personas.json · acme-runner-sched · runner.py schedule --interval 3600 · 7 showcase agents
The Architecture Slice

Deny-by-default, then a verbatim forward.

Nothing the content-editor writes reaches the store without passing the enforcement plane. Policy is deny-by-default; on allow, the call is forwarded verbatim to this agent's own isolated data tenant.

runner (cap-token) PEP :8343 soul-svc tenant PostgREST acme_soul · RLS
AUTH
Every call carries X-Tiresias-Api-Key + HS256 X-Capability-Token Minted per-agent from a 64-hex capability secret; validated at the PEP before policy eval.
HS256
GROUND
ContentInspection (enforce) requires source_type + authored_by on every write A draft with no cited source and no author simply does not persist.
enforce
ISOLATE
Cloud SQL acme_soul with RLS forced; each agent is its own soul-svc tenant Cross-tenant reads require SET ROLE service_role — even postgres is subject to FORCE RLS.
RLS
SOURCE · Plane 3 PEP (acme-tiresias-zt) · Plane 4 soul-svc (image soul-svc:rls-complete-20260717) · Cloud SQL acme_soul
Live Proof

Real jobs, real tokens, real cost — on the board right now.

This is not a mock. The content-editor runs on a schedule, homes to a free tier, and every job lands in the usage table behind the Grafana ROI dashboard.

fast_free
home tier
~1–2
governed jobs / day / agent
9
model tiers · 3 providers
$0
gemma:free per call
SOURCE · fleet cadence (FLEET_BATCH=6, INTERVAL=300s, MIN_GAP=10h) · config.json 9-tier roster · ROI board uid acme-roi-economics
A Real Job · Step 1

From upstream brief to grounded draft.

One scheduled job, start to finish. The editor does not free-associate — it consumes a domain brief and produces a chain-of-thought and a memory write that both carry their sources.

01
Receive domain brief Upstream analysis (research-lead, data-analyst) arrives as this job's grounding context.
intake
02
Route to tiered LLM Home fast_free; favors free / Ollama before any paid model is considered.
fast_free
03
Governed CoT capture + memory write POST /v1/cot/capture and /v1/memory/write — each stamped with source_type + authored_by.
soul-svc
04
Usage report Tokens in/out, model, cost → /cp/usage/report → tzt_usage → Grafana ROI board.
tzt_usage
SOURCE · fleet_runner.py job shape (brief → tiered LLM → governed CoT + memory write → usage report)
A Real Job · Step 2

The tier ladder: cheap by default, capable on cue.

The editor homes low to keep routine drafting near-free, but the same policy that keeps it cheap also lets it climb when the material demands it — and degrade safely when a model fails.

HOME
fast_free Default tier for routine drafts; routing favors free / Ollama models.
default
CEILING
Keyword escalation on +incident / +breach / +critical Sensitive material pulls the job up the tiers rather than under-serving it.
escalate
FLOOR
Fallback-to-floor on LLMError A model failure degrades to the floor tier instead of dropping the job.
degrade
SOURCE · personas.json per-agent home/ceiling/floor tiers + keyword escalation · fallback-to-floor on LLMError
A Real Job · Step 3

Every draft is attributable, or it does not persist.

The write is the moment governance bites. The enforcement plane validates the caller, the data plane validates the bearer, and the store refuses anything unattributed.

What the write must carry

source_type — what it grounded on. authored_by — which agent produced it. A tenant bearer hashed as sha512 against _soul_api_keys. Without these, ContentInspection (enforce) blocks the write.

Where it lands

The agent's own row-level-security tenant in acme_soul. _memories and _soul_api_keys run FORCE RLS, so one editor can never read or overwrite another agent's drafts.

SOURCE · Plane 4 soul-svc · POST /v1/memory/write · ContentInspection enforce (source_type + authored_by) · FORCE RLS
Governance · The Line That Matters

Agents propose. Humans publish.

This is the whole design in five words. The content-editor's output is a proposal that a person reviews and releases — the machine never crosses that line on its own.

REVIEW
Asphodel management console reviews memory + CoT before anything is acted on acme-asphodel-ui :3001 · console.asphodel.ai · agents, memory/CoT review, mindsets, access/route policy.
:3001
AUDIT
Every governed call is signed into a SoulKey Ed25519 audit chain, shipped to CP Durable WAL at /data/audit-wal; the record is tamper-evident, not a log line.
Ed25519
DRIFT
SoulWatch detects behavioral drift and auto-quarantines Shared postgres quarantine store; SIEM via RFC5424 syslog → Promtail:1514 → Loki.
quarantine
SOURCE · Plane 3 audit chain + SoulWatch · Management console (Asphodel) · Review console PEP /admin/* (pdp.tiresias.watch)
Economics

Why homing free is the right default.

The ROI board answers the self-host-vs-API question with observed per-call cost. For a high-volume drafting agent, homing to a free tier is not thrift — it is the difference between viable and not.

ModelObserved cost / callRelative
opus-4.8 (paid)$0.19
sonnet-4.5 (paid)$0.03
deepseek-v4-pro (Ollama)$0.002
gpt-oss:120b (Ollama)$0.0015
Llama-3.3-70B (HF)$0.0012
gemma-4-31b:free$0
SOURCE · Grafana ROI dashboard uid acme-roi-economics · tzt_usage · free-tier saturation (hermes-405b:free chronic 429) drives the self-host case
Asphodel · Agent — Content Editor

Grounded in. Attributed out. Published by a human.

The content-editor makes drafting fast and near-free without ever handing a model the last word. Every claim carries its source, every call is signed, and Barbara still owns the moment it goes live.

One governed agent among 367 — proof that speed and accountability are not a trade.
Asphodel + Tiresias-ZT · ACME Corporation
1 / 1