scribe
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".
What this skill does
# Scribe: latent theme discovery The smallest useful agent: find threads in your own corpus that you did not realize you had already written. ## What this does (and doesn't) **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. ## Workflow ### 1. Read the corpus Get title, date, description, and tags for every post. There are two paths, and the second is fully self-contained: - **If the crier plugin is installed**, use its `crier_search` MCP tool as an accelerator: ``` crier_search(limit=300) # all posts; metafunctor has ~200, headroom for growth ``` - **Otherwise, or if `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. ### 2. Find themes Look at all the title + description + tag triples together. Resist clustering by tag alone (tags are too coarse). Find threads that satisfy: - **Span**: connects 4+ posts (3 is too few; 6+ is ideal). - **Specificity**: the through-line is a *claim* or *observation*, not a *category*. "Intelligence is verifiable search" is a thread. "AI" is not. - **Latency**: the user did not consciously frame these posts as a series. If they are already a tagged series (e.g., the "Stepanov" series, the "Long Echo" series, the "RL series"), skip those. We are looking for *implicit* threads. - **Cross-temporal**: bonus if the thread spans multiple years; that is strong evidence the user keeps returning to the idea unconsciously. For each candidate theme: - Pick the 4 to 7 most representative posts (not all posts that mention the theme). - Write the through-line as a single declarative sentence in the user's voice. Specific, not generic. "Reward shape determines what scales" beats "the user thinks about reward functions." ### 3. Output the proposal 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) ``` ### 4. Stop That's the smallest scribe. After this, the user picks one and either: - Asks you to expand it: propose a structure, sample paragraph, source-post mapping. (This is the "scribe iterative" loop, not yet built.) - Rejects all and asks for more candidates. - Says one is interesting but the framing is off and renames it. For the smallest version, your job ends at presenting the three. Don't auto-expand. The user is the editor. ## Quality bar The output should pass these tests before you show it: 1. **Each through-line is one sentence.** If it takes two sentences to explain, the theme isn't crisp enough. 2. **Each through-line is specific.** A reader who hasn't seen the posts should be able to predict roughly what the synthesis would argue. 3. **The source posts are chosen, not exhaustive.** Don't list every post that mentions a tag. List the 4 to 7 that *make the thread*. 4. **No themes that are already explicit series.** The user knows about their Stepanov series. Don't propose it back to them. 5. **No "AI/ML topics" or "philosophy posts" themes.** Those are categories. We want claims. 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. ## What to do when scribe fails If the corpus genuinely doesn't have three threads, that's useful information. Possible causes: - The corpus is too small (you'd see this on a 30-post blog, not a 200-post one). - Tags are too coarse to filter usefully; suggest the user tag with more discrimination. - The user's thinking has been very project-focused (each post is its own thing) without recurring abstractions; that's a reflection on the writing, not a bug. Report this honestly. Do not invent a theme to fill the slot. ## When to use other things instead - **Already know the theme**, just want help with the synthesis: skip scribe, use `/mf` with intent "synthesis post about X." - **Want to find unposted gaps in cross-posting**: that is the crier plugin's `/chronicler`, not scribe. - **Want to audit cross-posting status**: dispatch the crier plugin's `auditor` agent. - **Want to draft a brand-new post on a fresh topic** (not synthesis): regular Claude Code, no special command needed. ## Future versions (do NOT implement in the smallest scribe) The smallest scribe stops at theme proposal. Future iterations would add: - **Iterative drafting**: theme to outline to sample paragraph to user grades voice to expand section by section. - **Link graph signal**: actually parse internal links between posts to find anchor posts and co-citations. The smallest version uses LLM clustering only. - **Tag refinement suggestions**: "your tags are too coarse; here are 8 finer-grained tags I'd add." - **Cross-pollination**: "this old post about X is relevant to the new conversation about Y." 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.
Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.