Tool-adoption registry — the tools himmel uses
A dynamic index with two jobs: it records every tool himmel adopted, pilots or holds provisionally through the tool-adoption rubric, AND holds our own in-house borrow-candidates — items we like, parked, that won’t necessarily ship. Part of the tool-adoption framework.
Tools we evaluated and did not adopt are not listed here: their records live in the state repo (pointer in
internals/context-architecture.md).
How to read this
- Layer (A/B/C/D) and trust-tier reuse the rubric’s definitions verbatim — see rubric §2 for tiers and the layer taxonomy below. Do not redefine them here.
- Status is one of the rubric’s decision states (rubric §3),
mapped to a registry-friendly label:
in-use= ADOPT,pilot-pending= PILOT-MEASURE (not yet run/closed).parked-ideais a fourth label, used only in the own-items index below: an in-house item we like and want searchable to borrow from — NOT a community ADOPT/REJECT decision, and NOT committed to ship.provisionalis a fifth label: not yet a rubric decision state — an ADR exists but awaits operator sign-off. The row must name the ADR.
- KPI is the desired outcome-per-session, never %-tokens (rubric §1 — the vanity-metric trap).
- Measuring
in-userows — the before/after protocol only applies to net-new installs. For items already in the default path the accepted protocol is measure-during: 0-cost live telemetry captured while real work runs (rubric §4; format + emit lib:telemetry.md). - ADR link — ADRs may not exist yet.
—means no recorded ADR; the source column is the decision trail until one lands. Do not fabricate ADR paths.
How to use this index
- Search-first — before building or evaluating anything, search this index and the state-repo rejected-tool record. A settled REJECT or an existing borrow-candidate may already answer the question.
- Port-in — found a community item whose use-case fits a real session? Don’t adopt on the pitch — open a PILOT (rubric §3) and record it here.
- Borrow — the own-items
parked-idearows are a borrow-library: lift the idea, don’t re-derive it.
Layer taxonomy (from the luna synthesis)
Layers are from the 8-tool luna synthesis
(30-Resources/Tech/token-optimizer-tools.md): composing across layers is
additive, competing within a layer is substitutive.
- Layer A — prompt / response shape (output Claude generates per turn).
- Layer B — tool-output filtering (noise tool calls inject into context).
- Layer C — setup / scaffolding (how Claude reads the project once).
- Layer D — MCP / runtime (protocol-layer; needs MCP-compatible client).
Registry
| Tool | Layer | Source | Status | Desired outcome (KPI) | Trust-tier | ADR |
|---|---|---|---|---|---|---|
| rtk | B (tool-output filtering) | luna 30-Resources/Tech/token-optimizer-tools.md; docs/tooling-catalog.md | in-use | Less tool-output noise in context per session → longer useful context window, fewer re-launches on long sessions | community-active → validate-before-adopt (battle-tested, Rust binary, zero deps) | — |
| engram | memory layer (D-adjacent) | LUNA-44 | pilot-pending | Persistent memory survives across sessions → fewer “re-explain the same context” turns, work resumes faster | source-read-mandatory (persistent-memory store; touches what the agent remembers — read before it runs) | — |
| skill-factory / autoresearch | skill-quality | backlog item | pilot-pending | Higher-quality generated skills → fewer manual skill fix-ups, a research loop that actually files usable output | community-active → validate-before-adopt (sandbox-test generated skills in a throwaway worktree before any real use) | — |
| nizos/tdd-guard | PreToolUse hook | luna 30-Resources/Tech/nizos-tdd-guard.md | pilot-pending | TDD enforced structurally → fewer untested-code regressions slipping through | source-read-mandatory (touches the PreToolUse hook stack — sees/alters every tool call; rubric §2 makes impl-read non-negotiable) | — |
| hermes-agent (Nous) — junior + CR-critic + alpha main tier | agent runtime (D-adjacent — separate agent under himmel orchestration) | rubric pass + ADR comment, 2026-06-11; free routes WIRED 2026-06-12 (live route SUPERSEDED 2026-06-24 → Codex/gpt-5.5); additive himmel_agent main-tier profile (alpha, 2026-06-24); CR-critic lane wired into /pr-check; route table + new-user how-to docs/hermes-runbook.md; luna 30-Resources/Tech/nousresearch-hermes-agent.md; install %LOCALAPPDATA%/hermes | pilot-pending | Junior-shaped chores (vault inbox capture, note-taking, summaries) ship on free inference without burning Max quota or operator babysitting; zero write-fence violations | source-read-mandatory (free Nous endpoint — prompts leave the machine; mitigations: curated read tier hot.md/index/CLAUDE.md/synthesis/60-Maps, write fence Clippings/hermes-*.md only, in-house fail-closed lunavaultguard.py guard hook — self-protecting, authored + read locally) | rubric-pass ADR comment |
/code-review ultra (built-in) | CR toolkit (review subagents) | eval 2026-06-13, items 2–4 | in-use | Lower missed-critical on big/risky PRs — multi-agent cloud escalation tier for exactly the PRs where solo/holistic passes are weakest (the class where cavecrew-solo fabricated 2 Criticals). MOST EXPENSIVE tier — costs MORE than the 6-reviewer heavy CR, so it sits ABOVE heavy CR on the cost ladder: reach it AFTER heavy CR for the biggest/riskiest PRs, never as a cheaper first escalation (operator-conventions.md CR-sizing ladder). User-triggered + billed; the agent cannot launch it. Open follow-up (operator, billed, one action): a live calibration run on a recent real PR to confirm it adds catches over the solo pass without flooding noise | docs-claim-trusted (built-in Anthropic tool, zero install, trivially reversible — rubric §3 ADOPT-without-pre-measurement case) | CR-toolkit eval ADR comment |
firecrawl/firecrawl (/v2/scrape API) | D (runtime / external data-fetch) | thin-body escalation, 2026-06-16; clip firecrawl-firecrawl.md → 30-Resources/Tech/firecrawl-firecrawl.md | in-use (opt-in escalation) | Thin-body article/web clips the Web Clipper captured poorly get clean markdown instead of being lost → the deferred LUNA-27 gap closes for non-X/non-github URLs, without a browser. Escalation lane, not a default path — gated behind --firecrawl-thin, budget-capped (--firecrawl-budget, default 20/run) to protect the 1000-credit/mo free tier; X/github/youtube excluded (owned by twitter-cli / luna-ingest / playwright-youtube). Self-host via FIRECRAWL_BASE_URL for operators with more budget. The hosted API SDKs are AGPL but we call the REST endpoint over stdlib urllib (no dep, no code lifted) | docs-claim-trusted (well-known hosted API; only public URLs + the page content transit firecrawl’s servers — no secrets egress beyond the API key; trivially reversible — drop the flag). Open: 1-credit live smoke to confirm the documented /v2/scrape response shape against the live API | — |
| public-clis/twitter-cli (agent-reach X backend) | D (runtime / external data-fetch) | feat/x-thread-reply-capture bake-off 2026-06-14 | not integrated: the cookie-backed enrich rung was removed (HIMMEL-4709) | Capture X reply-thread + first-comment repo URL per flagged clip → clips whose payload lives in a reply/self-thread (”↓ repo in comment”) get enriched, not lost. Won the bake-off vs Playwright (Playwright blocked at login by X/Google anti-automation; couldn’t even capture a session). twitter tweet <id> --json returns focal + same-author self-thread + other-author replies + quotedTweet, each with pre-parsed urls[] (proven: extracted github.com/Panniantong/Agent-Reach from the example’s first self-reply). Auth = explicit TWITTER_AUTH_TOKEN/TWITTER_CT0 in gitignored .env (Chrome App-Bound-Encryption v127+ kills cookie auto-extraction). BURNER account only, never the main. Adoption decided; pipeline integration is the open implementation | source-read-mandatory (scrapes X with burner session cookies — ToS-gray, account-ban risk, reads the cookie DB; impl + auth read mandatory) | — |
obsidian-second-brain research toolkit (/x-read, /x-pulse, /research, /research-deep, /youtube) | D (runtime / external data-fetch) | 2026-07-29 skill-hygiene audit (retroactive — installed 2026-05-16, no ADR filed until now); docs/tooling-catalog.md | provisional (pending operator sign-off) | (Grok/Perplexity-backed research commands) — provisional 2026-07-29, pending operator sign-off: no active XAI/Grok or Perplexity subscription behind the credentials file (a file’s presence is not a working key), and the vault-first capture pipeline already covers X and YouTube content without any external API. /notebooklm (Gemini File Search, different key) is unaffected | source-read-mandatory (external API, secret + network egress — never independently evaluated at install time) | specs/adr/adr-obsidian-second-brain-research-toolkit.md in the handover state repo (DRAFT, pending operator sign-off) |
unslop (cursor/plugins pstack) | A (prompt / response shape) | scoped-research worker + operator pilot decision, 2026-09-17 | pilot-pending | AI-tell removal in human-facing documents (PR bodies, ADRs, handovers, tickets) → fewer operator reword-passes per document. Rubric §1 does NOT pass on evidence (no CR finding/stuck loop/operator complaint about AI-sounding prose exists) — operator chose to pilot anyway given near-zero cost/blast-radius; close on operator-verdict outcome across 3-5 documents, never on rule-count applied | community-active → validate-before-adopt (33 numbered style rules, injection scan clean, Layer-A prompt content only — no hook/secret/network surface, reversible by deleting one file) | specs/adr/adr-unslop-skill.md in the handover state repo |
pstack (cursor/plugins pstack, 7 skills) | A (prompt / response shape) | operator GO 2026-10-15, plan HIMMEL-5802 (audit on HIMMEL-5697) | adopted (opt-in) | Seven disable-model-invocation skills (correct, blast-radius, create-verification-skill, maintain-verification-skill, benchmark-checklist, principle-explain-the-number, in-your-own-words) run on demand, no listing tokens. Shipped as ONE uninstallable plugin pstack@himmel, pinned 99743e9c, on in the interactive user profile only and in no worker/lane/chief profile; one-step removal is claude plugin disable pstack@himmel. Fork michael-denyer/pstack-claude rejected (SessionStart hook, ship scripts). Per-skill verdicts (HIMMEL-5851, POC measured 2026-10-16, pstack-integration.md): blast-radius = WIRE IN (opt-in CR_CLAUDE_AGENTS=blast-radius in /pr-check step 3.5; 1 of 3 later-fixed defects caught blind and real unreported defects proven in all 3, about 70-80k tokens per run; CR-panel comparison not measured, so default-on waits on follow-up HIMMEL-5855); correct, create-verification-skill, maintain-verification-skill, benchmark-checklist, principle-explain-the-number = KEEP OPT-IN (no flow slot to wire into yet, nothing measured); in-your-own-words = KEEP OPT-IN, low value (one sentence, brainstorming and grilling already restate the goal) | community-active → validate-before-adopt (markdown only, no hook/network/secret surface, MIT) | marketplace/plugins/pstack/README.md |
humanizer (blader/humanizer) | A (prompt / response shape) | operator request, HIMMEL-5857, 2026-10-16; humanizer.md | in-use (ADOPT verdict 2026-10-22; opt-in, in no profile) | An optional second pass that rewrites a full draft in the writer’s voice without changing its claims, so fewer operator reword passes per document. Vendored pinned at 225a6f39 as the opt-in plugin humanizer@himmel (disable-model-invocation, catalog only, in no profile). Exit: after two weeks, zero documents where /humanizer changed something /unslop missed and the operator kept it means REJECT and remove. Closed early (day 6 of 14, by chief ruling) by the HIMMEL-6966 docs pass: 46 pages, 979 passages kept, 4 dropped, mostly dash and bold-label fixes unslop leaves alone (deviation 3) | community-active → validate-before-adopt (markdown only, no hook/network/secret surface, MIT) | marketplace/plugins/humanizer/VENDORED.md |
test-audit (openclaw/openclaw .agents/skills/test-audit) | A (prompt / response shape) | operator request, 2026-09-24; folds the GPT-6 test-audit findings | adopted | Fewer tests that stay green when their subject breaks: an authoring gate at write time, plus a candidate-evidence record before any test is removed. Measured by the first audit pass shipped in the same PR (RED-at-base excerpt per repaired suite) | community-active → validate-before-adopt (read in full, no hook/secret/network surface, Layer-A prompt content only; adapted with deviations listed in the SKILL.md header, reversible by deleting one directory) | — (provenance header in .claude/skills/test-audit/SKILL.md) |
| Arize Phoenix | trace store (external, D-adjacent) | eval-tooling research Q4; read 2026-10-06 at https://github.com/Arize-ai/phoenix | pilot-pending | One local store for Claude Code OTel traces → an eval row links to its trace by session id. Scope: the trace store ONLY, not an eval runner. Facts read 2026-10-06: SQLite default storage, Docker ports 6006 (UI) and 4317 (traces), licensed under the Elastic License 2.0. Close the pilot on the trace-store work’s measured outcome | community-active → validate-before-adopt (ELv2 is source-available, not OSI open source; local-only, no prompt egress if unexposed) | — |
mattpocock/skills domain-modeling (glossary skill) | C (setup / scaffolding, external skill) | HIMMEL-5498; https://github.com/mattpocock/skills pinned 49dd158d1076134a641b33efb035946536778336, MIT, skills/engineering/domain-modeling/{SKILL.md,GLOSSARY-FORMAT.md}; grill-with-docs is a 2-line wrapper that calls grilling + domain-modeling | in-use (ADOPT verdict 2026-10-15; vendored pinned in PR 2802, retargeted at docs/glossary.md; packaged as plugin domain-modeling@himmel and enabled in the design profile only, HIMMEL-5498) | Terms a PR coins land in docs/glossary.md once, under the plain name, with the repo name as the alias, instead of drifting. Pass bar, fixed before the arms run (task: add the terms coined by merged PR #2669 / HIMMEL-5696 to a scratch copy of docs/glossary.md; arm A = glossary + PR text only, arm B = same plus the skill’s SKILL.md and GLOSSARY-FORMAT.md text; n=1 per arm, so it can show “no clear win” or a regression, never an effect size). Score each arm 0/1 on six checks: C1 one definition per coined term (exactly one headword row each, no restatement elsewhere in the diff); C2 alias rule (plain name is the headword, repo identifier in code spans or the Avoid column, no old name as a headword); C3 no duplicate of an existing term (Ready-check is extended or linked, not redefined); C4 smallest diff (at most 12 added lines, no new file or section); C5 format fidelity (added rows keep the target section’s table column count and order); C6 no implementation detail beyond what the neighbouring rows carry. Verdict rule: ADOPT only if arm B beats arm A on at least one check, loses on none, and the skill’s listing costs under 100 tokens; REJECT if arm B loses on any check or only wins by overriding the glossary’s own format; otherwise PILOT-MEASURE. Result (2026-10-15, sonnet, n=1 per arm): both arms passed C1-C5 (arm A: 1 glossary row + 1 overlap-map row; arm B: 1 glossary row + a one-word Ready-check extension); C6 arm A 0 (its row carries the WIRING list and the sourced-library rule), arm B 1 (it dropped the allowlist and per-kind rules, citing the skill’s “glossary only, no implementation detail” rule). Arm B beats A on one check, loses none; listing is the domain-modeling description, about 40 tokens (grill-with-docs is disable-model-invocation, 0). The skill’s GLOSSARY.md bullet format did not override the glossary’s own table format. Caveats: the win is one judgement-scored check at n=1, and arm A’s overlap-map row is coverage arm B skipped. Overlap: lean-skills:grilling is the same upstream grilling skill that grill-with-docs calls; minerva has no glossary step; the new part is only domain-modeling. Injection grep over the four files at the pin: no hits. Follow-up (done, HIMMEL-5498): vendored pinned (PR 2802, precedent writing-for-agents, HIMMEL-5631), target pointed at docs/glossary.md instead of GLOSSARY.md, then moved into marketplace/plugins/domain-modeling/ because a plugin profile selects plugin ids, never a project skill, and enabled in the design profile only | community-active → validate-before-adopt (markdown-only skill, no hooks, no scripts, no network; injection scan of the four files read at the pin) | — |
pele (obsidianmd/pele) | D (runtime / docs-site renderer) | HIMMEL-7480, operator request 2026-10-25; POC against the mermaid build, accepted by the chief | in-use | Docs-site diagrams render themed to the site’s own colours and font, light and dark, with zoom controls, from the same Mermaid text: a smaller download than mermaid.js (the site’s _astro output went from 5.4 MB to 972 KB) and no restyling of every diagram by hand. Pinned exactly at 1.10.0 in site/package.json, loaded on demand only on pages that have a diagram | community-active → validate-before-adopt (MIT, zero dependencies, runs only in the reader’s browser on static text from our own docs; no hook, secret or network surface; reversible by restoring the mermaid loader) | — |
Dynamic index — our own items
In-house items we like but won’t necessarily ship, kept here so they’re
searchable and borrowable instead of rebuilt. Status is always
parked-idea — these aren’t community ADOPT/REJECT decisions.
| Item | What we like | Status | Source |
|---|---|---|---|
| worktree-isolation plugin | Generic marketplace extraction of our worktree-isolation pattern (/worktree /clean /clean_garden) so it works for any repo — extraction filed, not built | parked-idea | backlog item |
| emergence→self-improvement crystallization | Triggered pass that crystallizes emerging vault clusters into derived self-improvement candidates — design parked-documented, won’t necessarily build | parked-idea | state repo specs/decisions/emergence-crystallization.md |
| >100KB auto-externalize + BM25 retrieval | The one genuinely good context-mode pattern (its Part-3 design): oversized tool output auto-indexes into local FTS5 instead of truncating, model retrieves sections on demand — nothing lost, nothing flooding context. If himmel ever needs this shape, extend qmd (already local BM25+vec over markdown) rather than adopt context-mode | parked-idea | context-mode eval ADR (operator’s private handover repo) |
| CR context-graph for large-repo reviews | The borrowable idea behind code-review-graph (not adopted): a persistent codebase graph so a reviewer reads only the files that matter, for reviews whose context exceeds a single window. himmel is not large-repo today, so it was REJECTed on the KPI. If himmel ever hits large-repo review-context limits, extend qmd (already a local BM25+vec index over the repo) rather than adopt an MCP graph runtime — same reasoning as the >100KB row above | parked-idea | CR-toolkit eval ADR comment |