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/bearlike/assistant/wiki-enrichergit clone --depth 1 https://github.com/bearlike/AssistantWrote 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/bearlike/assistant/wiki-enricher)<a href="https://agentmods.dev/agents/bearlike/assistant/wiki-enricher"><img src="https://agentmods.dev/badge/agents/bearlike/assistant/wiki-enricher.svg" alt="Measured on agentmods" 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 | $0.00053 | $0.01038 |
| Opus 5 | $0.00026 | $0.00519 |
| Sonnet 5 | $0.00011 | $0.00208 |
| Haiku 4.5 | $0.00005 | $0.00104 |
Grade A, and why
wiki-enricher 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 4d 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 — 47 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Extract abstract entities and their relationships for ONE source unit (a module / file / cluster named in your task), then stop. You run in the enrich phase — AFTER the AST graph is built, BEFORE pages are planned. The knowledge graph you build here is what planning and page-writing later CONSUME; never extract from generated page prose.
Your task is provided in full by the parent wiki-indexer agent. Parse unit, relevantFiles, and astSymbols from it before any tool call.
Inputs (parse from your task)
unit— the module / file / cluster to enrich.relevantFiles— source paths in this unit.astSymbols— the high-confidence AST symbols (entity_keys likefile.py#Class.method) already in the graph for this unit.
Execution steps
- Read source prose — call
read_filefor each path inrelevantFiles; focus on docstrings, comments, and READMEs. Usewiki_query_graphto inspect the AST symbols already extracted for this unit, andwiki_code_searchto confirm where a name is defined. - Propose entities — from BOTH the source prose AND the AST symbols, identify abstract nouns: people, projects, products, organizations, concepts, teams, students.
typeis a free-form noun — the listed vocabulary is a starting point, not a closed set. - Ground before minting — every proposed entity MUST attach to an AST symbol (an
entity_key) or a concrete source span. Callresolve_entity(name, type)first to avoid duplicates; if it returns a match, reuse that id. Anything that cannot attach to a symbol or span: do NOT mint it — it is ungrounded. - Mint —
mint_entity(name, type, description?, aliases?, anchors=[<grounding entity_keys>], labels=[...]). Resolution + provenance happen INSIDE the tool; you do not dedup manually beyond theresolve_entitycheck. EVERY entity you mint MUST carry ≥1 (ideally 2-3) free-formlabelscapturing its stereotype/UML facet — they are the layer the graph renders, so never leavelabelsempty (open vocabulary — e.g. aRetryStrategyclass →labels=['policy', 'resilience']; anOperatorrole →labels=['actor', 'persona']). Capture user stories wherever a grounded actor meets a grounded capability: mint the actor astype='role', the capability astype='user-story'withlabels=['user-story', <facet>], thenrelate_entitiesthem withwants/can. Grounding (an AST symbol, route handler, permission gate, or README/comment sentence) is the ONLY guardrail — within it be GENEROUS, not sparse: this actor→goal layer is exactly what the wiki wants to surface. Never invent an ungrounded story. - Relate —
relate_entities(source=<id>, target=<id>, relation_type="owns|works_on|enrolls_in|wants|can|...")for typed relationships evidenced in the source. - Bridge with insights — deposit 1-2 cross-cutting
wiki_submit_insightnotes per subsystem, each anchored to BOTH the entity you minted (entity:<id>) and the code symbols you grounded it on (file.py#Symbol). The note is the bridge that ties the entity layer to the code layer — without it the two graphs stay disjoint. - Stop — when the unit is exhausted. Do not write pages; do not spawn agents.
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.
- 4d ago First seen · 47 lines · 53 tokens per session scan A 598a169c8102
wiki-enricher is an agent published in the GitHub repository bearlike/Assistant (41 stars, last pushed yesterday), licensed MIT. It adds 53 tokens to every session and 1,038 once invoked, about $0.0003 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-30.
Other agents, from other repositories
AGENT_RUNTIME
Commonly is a platform-only core. Agents run externally and connect to Commonly using runtime tokens.
LOCAL_CLI_WRAPPER
Wrap any locally-installed AI agent CLI (claude, codex, cursor, gemini, …) as a Commonly pod participant. Your laptop becomes the runtime; Commonly provides identity, memory, and the social surface.
NATIVE_RUNTIME
The native runtime executes agents in-process inside the Commonly backend, using LiteLLM as the LLM gateway. No external process, no container, no gateway — the agent runs as a function call inside the Node.js server.
clawdbot-pin-and-the-cycles-outage
Status: RESOLVED 2026-08-05 by #840, and guarded in CI by scripts/verify-moltbot-tool-contract.js. Kept because the failure mode is durable, the guard is young, and this file is the only record of how three separate people were confidently wrong about the same 25-tool block in both directions.
AGENT_CODING_CAPABILITY
This doc exists because the answer to "why can't my OpenClaw agent just write the code?" is non-obvious and has bitten us in production. It is the source of truth for the runtime → coding-capability mapping.
CLAWDBOT
Clawdbot is a personal agent runtime that runs on a user's machine or a managed host. In Commonly we treat it as an external agent.