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 skills/tpierrain/kenjaku/switchnpx skills add tpierrain/kenjaku --skill switchgit clone --depth 1 https://github.com/tpierrain/kenjakuWhat 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.00345 | $0.04930 |
| Opus 5 | $0.00172 | $0.02465 |
| Sonnet 5 | $0.00069 | $0.00986 |
| Haiku 4.5 | $0.00034 | $0.00493 |
Grade A, and why
switch 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 3d 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 — 302 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/switch — Change or create the active universe (opt-in, no reindex)
Brain-side skill. A universe (ADR 0034) is a soft, engine-enforced retrieval scope over the one shared vault: while a universe is active,
search_vaultreturns that universe's notes plus your cross-cutting (default) notes, and nothing from the others, unless you explicitly ask for "all universes". It is a relevance feature, never an isolation wall (a bug, Obsidian, git or grep can cross it, and for a private brain that is fine).⚠️ This is a thin conversational driver. All the real, testable logic lives in the deterministic core
scripts/set-active-universe.mjs+scripts/lib/universes.mjs(ADR 0009). This skill only reads the current state, runs that core, and reports — it holds no logic and makes no scope decision of its own (the engine reads the active pointer itself, per search).
When to use it
Load this whenever the user wants to change context or manage universes, in plain language, any language:
- "switch to the acme universe" · "passe sur l'univers acme" · "change de contexte"
- "create a universe Blue Team" · "crée un univers Blue Team" · "add a new context"
- "which universe am I in?" · "dans quel univers je suis ?" · "liste mes univers"
🧭 Progressive disclosure. Below two universes there is nothing to manage: a brain with a single (default) universe behaves exactly as today. Do not volunteer universes to a single-universe user. But if they explicitly ask to create one, this skill is the way in.
Golden rules
- No writes to notes, no reindex. Switching only re-points the active-universe pointer under
<brain>/.vault-rag/. The engine reads it live on the next search. Never offer a reindex here. (The two lifecycle operations below are the exceptions, and they reindex themselves: renaming a universe moves every one of its notes, deleting one removes them. Still nothing to offer.) - The core is the single surface. Natural language ("create a universe X") and
/switch Xroute to the same script, so there is never a diverging path (ADR 0009). - 🔤 Two worlds, two vocabularies — and you never decide which. Below the disclosure gate (a
single universe, nothing ever created) the notion does not exist for this user: never write or
say universe to them, speak of their context, their world, this place. The moment a second
universe exists, the opposite holds: everything is framed as universes, because that is the word
they now switch with. The deterministic core tells you which world you are in (
BELOW the disclosure gate/PAST the disclosure gate, printed with the offer) — do not infer it by counting universes yourself (ADR 0009). File paths the core prints (vault/universe.md) are the one exception: a filename is a filename, and quoting it back is fine. - Creating a universe is create-and-switch (git
switch -cergonomics): register the name and make it active in one move. The name is normalized to a safe kebab slug (e.g. "Blue Team" →blue-team); the reserved namedefaultcannot be created.
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.
- 3d ago First seen · 302 lines · 345 tokens per session scan A fe397ee40ffb
switch is a skill published in the GitHub repository tpierrain/kenjaku (80 stars, last pushed 9d ago), licensed Apache-2.0. It adds 345 tokens to every session and 4,930 once invoked, about $0.0017 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 skills, from other repositories
lint
Run the LLM Wiki health check: orphans, broken links, contradictions, stale pages, index sync, MOC coverage, frontmatter fields, Exploration Gate, v5 verification fields, Bias Check, cross-vault links, and Core Context freshness; also responds to /lint and 위키 점검.
refresh-context
Re-snapshot Core Context.md from the 9 mothership system files and key essays when the mothership changes or the snapshot is older than 30 days; also responds to /refresh-context and 코어 컨텍스트 갱신.
status
Show the LLM Wiki state at a glance: counts, recent activity, index drift, inbox backlog, collectionPurpose/mainVault/explored/verificationStatus coverage, and Core Context snapshot age; also responds to /status and 상태 점검.
capture-tabs
Capture Chrome tab groups, browser research bundles, or ChatGPT/Gemini/Grok/Claude/Perplexity sessions into LLM Wiki Inbox markdown; also responds to 탭 캡처, 리서치 캡처, Deep Research 캡처, and /capture-tabs.
ingest
Ingest a URL, file, raw text, or Inbox item into the LLM Wiki with the purpose gate, mothership link search, raw-source preservation, Wiki compilation, index/log update, and review; also responds to /ingest and 인제스트.
reindex
Manually re-run qmd indexing and embeddings for wiki, rawsources, and queries after Obsidian edits, bulk moves, or embedding-model changes; also responds to /reindex and 재색인.