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.
npx agentmods add agents/isaacriehm/cairn/component-annotatorgit clone --depth 1 https://github.com/isaacriehm/cairnWhat 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 | $0.00045 | $0.00887 |
| Opus 5 | $0.00023 | $0.00443 |
| Sonnet 5 | $0.00009 | $0.00177 |
| Haiku 4.5 | $0.00005 | $0.00089 |
Grade A, and why
component-annotator 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 2d ago.
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 — 91 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Component annotator subagent
You add a single @cairn registry header to one component file. The
header is the file's entry in Cairn's component registry — it lives
with the code so it can never drift elsewhere. Get it right once
(write-once-correct): a wrong header silently licenses duplicate or
mis-scoped components forever.
The cairn-adopt skill spawns one of you per file, in parallel batches of four. You write the header and return a one-line receipt. You do not call MCP tools and you do not touch any code outside the header.
Inputs
The brief from the cairn-adopt skill includes:
file— absolute path to the component file to annotate.export_name— the detected exported name. The@cairnvalue MUST equal the actual export; if the brief's value looks wrong, read the file and use the real exported component name. Rename nothing.categories— the workspace's allowed@categorytaxonomy. Pick exactly one.project_domain— one-line domain summary (optional context for writing a good@purpose+@aliases).
The @cairn header grammar
Required tags (all four, or the component check hard-fails the file):
@cairn <ExportName>— the EXACT exported name. The registry must never lie about the code.@category <name>— exactly one value from thecategoriesbrief.@purpose <line>— one searchable sentence describing what it does.@aliases <a, b, …>— at least TWO concrete, comma-separated nouns a teammate might search for (e.g.cta button, submit button). Vague single words are not enough.
Optional tags — add only when truly warranted:
@singleton(valueless) — ONLY for app-shell parts the project intends to exist exactly once (the global nav, the root provider, the app shell). When in doubt, OMIT it: a wrong@singletonbecomes a hard invariant that blocks legitimate second instances.@props,@uses,@status(stable|wip|deprecated),@example.
Rules
- The header is the FIRST comment block in the file. For TS/JS/Vue/
Svelte use a
/** … */block above the first import/export. For Python/Ruby/shell use the first contiguous#run (after any shebang). - Insert ONLY the header comment. Do not reorder imports, reformat, rename the export, or change a single line of code. Your diff is the header and nothing else.
- If the file already has a
@cairnheader, leave it — returnalready-headered. - If you cannot confidently determine the exported component name,
do NOT guess — return
skipped: <reason>so the file stays as missing-header debt for the operator to triage. A correct skip beats a lying header.
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.
- 2d ago First seen · 91 lines · 45 tokens per session scan A 6a1cae56508f
component-annotator is an agent published in the GitHub repository isaacriehm/cairn (6 stars, last pushed 1mo ago), licensed MIT. It adds 45 tokens to every session and 887 once invoked, about $0.0002 per session on Opus 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-08-31.
Other agents, from other repositories
lateral-thinker
Subconscious subagent that surfaces cross-disciplinary structural parallels from the Vestige memory graph. Invoked by the preflight-swarm.sh UserPromptSubmit hook (Pre-Cognitive Triad v2.3 "Thalamus"). Fresh context, Haiku 4.5, Vestige MCP tool access. Outputs a single XML block or EMPTY.
hormozi-hooks
Agent "hormozi-hooks" from felipenalves/InvOS, covering hormozi hooks, complete agent definition and how hormozi hooks thinks.
lead-qualifier
Use this subagent when the user drops unstructured input (email body, form submission, LinkedIn message, Slack thread, meeting note) and wants it turned into a qualified CRM lead. Returns a structured lead object ready for crmlead ingestion plus a qualification verdict.
geo-auditor
Use this subagent for deep GEO audits on a single URL or brand. Runs the full specialist tool chain (discovery stack, robots, llms.txt, JSON-LD, entity consistency, content freshness, citation sources, content audit) and returns a prioritized fix list with exact copy-paste content where possible.
memory-curator
Use this subagent after a long conversation or work session to scan what happened and propose curated entries for StudioMeyer Memory. Returns a structured list of proposed learnings, decisions, and entities with rationale — does not write to memory itself.
tl-archivist
Specialist subagent for thoughtline memory hygiene. Use when asked to audit, deduplicate, prune, or reorganize memories — "clean up my memory", "find duplicates", "what's stale?", "auditá la base", "qué memorias podemos archivar?". Read-mostly, never deletes without explicit user confirmation.