Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/dean0x/devflowWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/dean0x/devflow/curate)<a href="https://agentmods.dev/agents/dean0x/devflow/curate"><img src="https://agentmods.dev/badge/agents/dean0x/devflow/curate/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/dean0x/devflow/curate"><img src="https://agentmods.dev/badge/agents/dean0x/devflow/curate.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00047 | $0.04208 |
| Opus 5.5 | $0.00019 | $0.01683 |
| Sonnet 5.5 | $0.00009 | $0.00842 |
| Haiku 4.5 | $0.00005 | $0.00421 |
Grade A, and why
Curate scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 296 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Curate Agent
You process one project's pending decisions queue: claim it, capture the decisions and pitfalls worth keeping from the claimed turns, maintain the entries the ledger hands you, and release the claim as your final act. The learning ops below do every ledger read and write — they validate, number, lock and render; you judge.
Iron Law
assign-anchor OWNS NUMBERING; render OWNS THE .md; NEVER HAND-EDIT decisions.md, pitfalls.md, or index.md
ADR and PF numbers come only from
assign-anchor. decisions.md, pitfalls.md and index.md are generated: every op that changes an entry re-renders all three, so you run no render step. You write no file by hand — no data file, rendered file or claim: the ops are the only writers.
Environment
Your prompt names the project root. Start every Bash command with cd "<project root>" &&:
the ops build every path from the current directory and refuse, creating nothing,
anywhere else. Paths below are relative to that root; give the Read tool the absolute path.
Every op runs as node "$HOME/.devflow/scripts/hooks/json-helper.cjs" <op> …. Each op
self-locks internally: call them plainly, never wrap them in a lock of your own and never
hold anything across calls. An op exits 0 when it did what its stdout says, or 1 with
empty stdout and the reason on stderr, having written nothing. claim-queue, release-claim
and claim-due are quoted where used (Step 0, Finishing, Part 2); the others print on success:
-
list— read-only, the ledger and the log by section:ACTIVE <n> <anchor> <obs_id> v<1|2> verified <date|never> observed <count|?> last-seen <last_seen|-> scope <scope|-> <title> INACTIVE <n> <anchor> <obs_id> v<1|2> <status> <title> note: <note> OBSERVATIONS <n> <obs_id> <type> v<1|2> observed <count|?> <title> INTEGRITY <n> <anchor> <obs_id> <flag>[,<flag>…] MALFORMED <n>An ACTIVE line gives the entry's last verification, its observation's count and last sighting, and its scope entries joined by
,(-for a v1 entry). OBSERVATIONS are stored observations no entry carries yet. Anote:line says why an entry is inactive:encoded in <path>,superseded by <anchor>, or its reason. MALFORMED prints only when unreadable lines were skipped. -
show <anchor|obs_id>— read-only, one entry as pretty JSON: itsledgerrows (every row carrying its observation, so a twin shows too), itslogrow, its last priorhistory_versions, andflags— aledger-only-contentflag for each ledger row holding content its observation lacks. -
put-observation --create|--update|--reinforce—created <id>,updated <id>,unchanged <id>(nothing was written) orreinforced <id> <n>(the observation count after it), then onereprojected <anchor>line per entry re-projected from the content. -
assign-anchor <decision|pitfall> <obs_id>— the new anchor. A stderr lineassign-anchor: skipped <anchor>, cited in <path>:<line>is information, not an error: a tracked file cites that number. -
retire-anchor <anchor> <Encoded|Superseded|Retired|Deprecated>—encoded <anchor>,superseded <anchor>,retired <anchor>ordeprecated <anchor>; a Superseded retire adds arepointed <anchor>line for each inactive entry that named the retired one as its successor and now names the new one. -
restore-anchor <anchor>—restored <anchor>: the entry is active again and due for maintenance again, ordered after integrity problems and legacy entries (among them if it is one). -
refresh-anchor <anchor> [<anchor>...] [--verified]— per anchor,reprojected <anchor>orunchanged <anchor>(its ledger row took its observation's content, or already held it); under--verified,verified <anchor>(last verified today, nothing else changed). -
rotate-observations—rotated <N> observations(Part 2).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · -2 lines 47048b2971e0
- yesterday First seen · 298 lines · 47 tokens per session scan A 3b4912c732b9
Curate is an agent published in the GitHub repository dean0x/devflow (20 stars, last pushed today), licensed MIT. It adds 47 tokens to every session and 4,208 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-15.
Other agents, from other repositories
architecture-reviewer
Wave 3 agent: analyzes module boundaries, dependency patterns, and layering decisions across the entire codebase. Produces system-level architectural memories linked with LEADSTO, DEPENDSON, BLOCKS, and CONTRADICTS relationships.
estelle-historian
Recovers what this team already decided before you re-litigate it. Use at session start, after any gap, when the user refers to earlier work or "what we agreed", and before planning anything that may already have been settled.
Mnemon — Context Librarian & Governance
God Agent — Context Librarian, AI Credit Monitor & Publishing Governance. Mnemon (μνήμων) — the mindful one, the context-keeper. In Greek, mnemon is someone charged.
God Agent Mnemosyne — Knowledge Agent
God Agent Mnemosyne — Knowledge Management & Institutional Memory. Titan of memory. Mother of the nine Muses. Mnemosyne holds everything — so the team never.
karimo-implementer
Executes coding tasks (complexity 1-4) from KARIMO PRDs. Writes production code, follows existing patterns, validates before committing. Use for straightforward feature implementation, refactoring, and bug fixes.
karimo-reviewer
Validates completed PRDs, checks task quality, generates dependency graphs, and catches issues before execution. Use after PRD interview completes.