mf/skills/scribe/SKILL.md
Discover latent themes in the metafunctor corpus. Use when the user wants to find implicit through-lines across their blog posts, surface recurring ideas they have not consciously framed as a series, or get candidate themes for a synthesis post. Reads titles, descriptions, and tags; proposes 3 themes that connect 4+ posts each, each with a single-sentence through-line. Output is a proposal, not a draft. Trigger phrases include "find themes in my posts", "what threads connect my writing", "latent themes in my corpus", "scribe".
npx skillsauth add queelius/claude-anvil scribeInstall 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.
The smallest useful agent: find threads in your own corpus that you did not realize you had already written.
Does: scans every post in the metafunctor content/post/ directory, returns 3 candidate themes that connect at least 4 posts each, each with a one-sentence through-line and a list of source posts.
Does NOT: write a draft. The output is a proposal you accept or reject. If you accept one, you tell me to expand it; we iterate from there. The smallest scribe stops at "here are the candidates."
This is intentional. Voice fidelity is hard. Validating that the corpus has interesting structure is easy. Do the easy thing first; if the candidates feel real, we build the drafting layer next.
Get title, date, description, and tags for every post. There are two paths, and the second is fully self-contained:
crier_search MCP tool as an accelerator:
crier_search(limit=300) # all posts; metafunctor has ~200, headroom for growth
crier_search returns truncated content, read the front matter directly. Resolve the metafunctor site root the way the mf skill does (the MF_SITE_ROOT env var, or the configured site root), then Glob content/post/**/index.md under it and read the YAML front matter. You only need title, date, description, and tags. Do not read the body for the smallest scribe.crier_search is an optional dependency, not a hard one; the Glob path stands alone.
You can optionally filter:
/scribe 5y (last 5 years; useful for narrowing a 200+ post corpus)/scribe --tag philosophy (filter to a tag's universe)Default is the full corpus.
Look at all the title + description + tag triples together. Resist clustering by tag alone (tags are too coarse). Find threads that satisfy:
For each candidate theme:
Format:
3 candidate themes (95 posts scanned):
═══════════════════════════════════════════════════════════════════
[1] VERIFIABLE SEARCH AS THE ARCHITECTURE OF INTELLIGENCE
Through-line: You keep returning to the asymmetry between checking and
finding, applied to science, ML training, test-time compute, and
induction itself.
Span: 5 posts, 2024-09 to 2026-04 (19 months)
Source posts:
- 2025-01-05 Science as Verifiable Search
- 2024-09-30 All Induction Is the Same Induction
- 2024-06-25 Reverse-Process Synthetic Data Generation
- 2026-04-01 I Spent $0.48 to Find Out When MCTS Actually Works
- 2026-03-15 What You Assume vs. What You Compute
Why it's a thread: each one is "easy to verify, hard to find" applied
to a different domain. You haven't named the asymmetry directly.
═══════════════════════════════════════════════════════════════════
[2] LEGACY AS A DESIGN CONSTRAINT
...
═══════════════════════════════════════════════════════════════════
[3] CODE WITHOUT PURPOSE / PURPOSE WITHOUT CODE
...
Pick a theme to develop (1, 2, 3) | Reject all (none feel real) | Show me more themes (regenerate)
That's the smallest scribe. After this, the user picks one and either:
For the smallest version, your job ends at presenting the three. Don't auto-expand. The user is the editor.
The output should pass these tests before you show it:
If you can't generate three themes that pass all five tests, return fewer (or zero) and explain why. "Two themes feel real, one feels forced; here are the two." Better than padding.
If the corpus genuinely doesn't have three threads, that's useful information. Possible causes:
Report this honestly. Do not invent a theme to fill the slot.
/mf with intent "synthesis post about X."/chronicler, not scribe.auditor agent.The smallest scribe stops at theme proposal. Future iterations would add:
These are bigger features and need user feedback on the smallest version first. If candidates from the smallest scribe feel real, we keep building. If they don't, we change the signal (link graph, embeddings) before adding drafting.
tools
This skill should be used when the user asks about research directions, open problems, future work, or follow-up research from the academic literature. Trigger phrases include "open problems in X", "what's next for Y", "future work for paper Z", "research directions on T", "salient follow-up research", "what should I work on next in", "find me follow-up research unrelated to my prior work", "broad survey of W", "neglected directions in V". Routes the request to the right Vista MCP tool, reads back the structured paper sections, and synthesizes research directions in the conversation.
development
Use when drafting prose sections for a bookwright (technical non-fiction) project. Encodes the Bernoulli-textbook workflow: atom-outward design, deferral discipline, running threads, page budgets, Path A subagent pattern, header comment block convention.
testing
Use when drafting or executing a paired notebook for a bookwright chapter. Covers when notebooks are required vs optional, numerical-sanity-target convention, exec-from-fresh-kernel requirement, and stack-specific execution commands (Jupyter/R Markdown/Quarto).
testing
Use when writing cross-referenced sections in a bookwright project. Covers the header comment block template, label-naming conventions, when to use prose-only vs Cref, forward-reference documentation, and the integration-check baseline.