skills/wiki/SKILL.md
Capture findings, decisions, and research from the current project into the LLM Wiki repo. Routes to the wiki repo's own ingest skills (ingest-session, ingest-text, rough-notes) by reading their SKILL.md as the spec, so behaviour stays in sync with the wiki's conventions. Per-project config in .ronan-skills-llm-wiki.local.json maps the current project to one or more vaults. Use when the user says "update the wiki", "add this to the wiki", "capture our findings", or wants to ingest research from outside the wiki repo.
npx skillsauth add RonanCodes/ronan-skills wikiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Bridge skill: lets any project push findings into the LLM Wiki repo (resolved portably, see Step 0 — never a hardcoded path) without leaving the current working directory.
It does not reimplement the wiki's ingest logic. Instead, it reads the wiki repo's own SKILL.md files (ingest-session, ingest-text, rough-notes) and follows their instructions verbatim against the resolved target vault. The wiki's skills stay the single source of truth; this skill just resolves the vault and proxies.
The wiki's ingest skills live in ~/Dev/ai-projects/llm-wiki/.claude/skills/ as project-local skills. They are not visible from any other project's session. Without this bridge, a user doing research in Project A has to either:
cd into the wiki repo and re-explain the context, orThis skill picks option 3: load the wiki's SKILL.md as the playbook, execute the steps, write to the right vault.
/ro:wiki # ingest current session into default vault (follows ingest-session)
/ro:wiki --vault <vault-short> # specific vault, e.g. --vault ai-research
/ro:wiki --title <slug> # override title slug
/ro:wiki text # ingest pasted/explicit text (follows ingest-text)
/ro:wiki text path/to/notes.md # ingest a local markdown file
/ro:wiki notes # drop to scratchpad/ for later /rough-notes cleanup
/ro:wiki status # show config, default vault, last 3 entries
/ro:wiki config # initialise or edit .ronan-skills-llm-wiki.local.json
/ro:wiki vaults # list all vaults available in the wiki repo
<vault-short> is the vault name without the llm-wiki- prefix (e.g. ai-research, side-projects). The skill resolves the full directory name internally.
wiki_repo_path if already set; (b) bash "${CLAUDE_PLUGIN_ROOT:-$HOME/Dev/ronan-skills}/scripts/resolve-repo.sh" LLM_WIKI — checks $LLM_WIKI_DIR, then ~/.claude/.env, then the conventional default; (c) if still unresolved, ask the user where the wiki lives and save the answer into the per-project config.<wiki_repo_path>/bridge.json. This is the contract for the bridge: it lists ingest_routes (subcommand → SKILL.md path), vaults (short name → purpose, tags, shape), vault_root, and vault_prefix. If it's missing, error: "wiki repo has no bridge.json. The bridge cannot resolve routes or vault metadata." Do not fall back to hardcoded paths; the manifest is the source of truth../.ronan-skills-llm-wiki.local.json from the current working directory.
{
"wiki_repo_path": "<absolute path to your llm-wiki checkout>",
"project_name": "ronan-skills",
"default_vault": "side-projects",
"vaults": ["side-projects", "skill-lab"],
"notes": "Optional: why these vaults are the target for this project"
}
default_vault and entries in vaults use the short form (no llm-wiki- prefix)..gitignore if the project is a git repo (skill warns the user once if it isn't).Triggered when ./.ronan-skills-llm-wiki.local.json is missing, or when user runs /ro:wiki config.
vaults map. Each key is the short name; each value has purpose, tags, shape. Verify the corresponding directory exists at <wiki_repo_path>/<vault_root>/<vault_prefix><short>/ and drop any that don't.AskUserQuestion to ask:
<short>: <purpose> so the user has context)./.ronan-skills-llm-wiki.local.json with project_name set to the current directory's basename.test -d .git), check whether .gitignore already excludes *.local.json or the file specifically. If not, append .ronan-skills-llm-wiki.local.json to .gitignore. Tell the user.Order of precedence:
--vault <short> flag passed on the command line.default_vault from the config.vaults, use it.AskUserQuestion with the configured vaults as options.The full vault directory is <wiki_repo_path>/<vault_root>/<vault_prefix><short>/ (using vault_root and vault_prefix from the manifest, not hardcoded).
Verify the directory exists. If not, error with the list of actual vault directory names.
Map the subcommand to a manifest route key:
| Subcommand | Manifest route key |
|---|---|
| (default, no subcommand) | session |
| text | text |
| notes | notes |
Look up the route in bridge.json under ingest_routes.<key>. The full path to the playbook is <wiki_repo_path>/<route.skill>. If the route key isn't in the manifest, error: "no ingest route registered for <key>. Check bridge.json in the wiki repo."
<vault> placeholder in its instructions.git -C <wiki_repo_path> ...), respecting ~/CLAUDE.md rules: emoji + conventional format, no Co-Authored-By, weekday-hours timestamp rule.After the wiki skill's own report, add a one-line tail in the calling project:
Example:
Wrote: ~/Dev/ai-projects/llm-wiki/vaults/llm-wiki-side-projects/wiki/sources/session-notes-2026-04-28-wiki-bridge.md
Vault: side-projects | Commit: 7a3b2c9 (in wiki repo)
/ro:wiki status
/ro:wiki config.<wiki>/vaults/llm-wiki-<default>/wiki/sources/ by mtime.git -C <wiki> log -1 --oneline./ro:wiki vaults
Read bridge.json and print each vault as <short>: <purpose> [shape: <shape>, tags: <tags>]. Group by shape (hub / spoke / activity) for readability. If a vault in the manifest has no corresponding directory on disk, flag it inline with (missing dir).
Skills are scoped to: ~/.claude/skills/, plugins, and the current project's .claude/skills/. The wiki repo's project-local skills are not invocable from other projects via the Skill tool.
This skill works around that by reading the wiki's SKILL.md files directly with the Read tool and executing their instructions inline. That keeps the wiki skills as the single source of truth without requiring them to be promoted to global ro:* skills.
Skill paths and vault metadata are resolved through <wiki_repo_path>/bridge.json (the bridge manifest), so the wiki can rename or move ingest skills without breaking this bridge as long as the manifest is updated. If the wiki ever drops bridge.json, this skill will refuse to run rather than fall back to guessed paths.
ingest-session.~/CLAUDE.md: emoji + conventional commit, no Co-Authored-By, weekday-hours timestamp guard (08:30-18:00 forbidden Mon-Fri)..ronan-skills-llm-wiki.local.json file is per-project, gitignored. Never commit it./ro:write-copy rules to every line of generated wiki content. No em-dashes, no AI-tell vocabulary, no rhetorical-reversal filler.Capture findings from a research session in Project A:
[user, working in ~/Dev/some-project]
> we've been figuring out the right vector store for this app for the last hour, can you update the wiki?
[Claude]
/ro:wiki
→ reads ./.ronan-skills-llm-wiki.local.json (default_vault = ai-research)
→ reads ~/Dev/ai-projects/llm-wiki/.claude/skills/ingest-session/SKILL.md
→ follows its 8 steps targeting llm-wiki-ai-research
→ writes session-notes-2026-04-28-vector-store-pick.md, updates index/log/ROADMAP, commits
→ reports the path + commit SHA
First-time setup in a new project:
> add our findings to the wiki
[Claude]
→ no .ronan-skills-llm-wiki.local.json found
→ runs config init: lists vaults, asks user to pick
→ writes config, adds to .gitignore
→ proceeds with the ingest
Ingest a specific markdown file the user already wrote:
> can you push docs/architecture-notes.md into the side-projects vault?
[Claude]
/ro:wiki text docs/architecture-notes.md --vault side-projects
→ follows ingest-text against llm-wiki-side-projects
testing
--- name: linear-pipeline description: The Fable orchestrator for a single dispatched Linear ticket. Holds almost no context itself; it receives `--issue <ID> --detached`, decides the stage sequence, and fans out a sub-agent per stage, passing forward only each stage's artifact (never re-derived, never inlined into its own context). Step zero, before any planning or stage routing, is a boundary triage against `canon/security-boundary.md` (#199): a match tags Ronan Connolly and stops the run, no
development
--- name: in-your-face description: Capture a chat-only answer into a durable artifact (markdown + HTML, PDF when cheap) and launch it automatically so the user cannot miss it. Use when user says "in your face", "don't let me lose this", "save that answer", "make that durable", or right after answering a substantive side question (a recipe, comparison, how-to, or generated prompt) that would otherwise die with the context. category: workflow argument-hint: [--no-open] [--vault <short>] [hint of
tools
One-shot headless OpenAI Codex CLI calls for background/admin AI tasks — summaries, classification, extraction, admin glue. The default engine for anything that runs AI constantly in the background (daemon-driven, per-event), because it bills the flat ChatGPT subscription instead of Claude usage or per-token API spend, and it keeps working while Claude is rate-limited. NEVER for coding — coding stays Claude. Use when a skill or daemon needs a cheap always-on AI call, when the user says "use codex", "ask codex", "codex as backup", or when building a background summarizer/classifier into a listener or loop. Reads auth from ~/.codex/auth.json (ChatGPT account, no API key).
research
Turn a warranty rejection, repair quote, or RMA email into a cited decision brief — legal read (NL/EU consumer law), is the part user-serviceable, live part and new-unit prices, repair-vs-DIY-vs-new economics, before-you-send-it checklist, deadlines. Use when the user pastes or screenshots a repair quote, warranty rejection, "not covered" email, onderzoekskosten fee, or asks "should I repair or replace this".