skills/learning-in-public-voice/SKILL.md
House style for learning-in-public essays — a curious practitioner thinking out loud while learning a hard technical subject (here, ML-driven crop genetics / genomic selection). First-person, concrete-first, honest about the edge of understanding, mechanism over vocabulary. Provides the register, the hook patterns, the anti-slop hard rules, and the rule for reading a per-writer voice-profile.md so the voice stays the writer's own. Use when drafting a vault-style post from evergreen notes, or as the lens an advisory editor critiques against. This skill never imposes voice; it describes defaults and defers to the writer's profile.
npx skillsauth add lyndonkl/claude learning-in-public-voiceInstall 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.
This is the house style for essays that a data scientist writes while learning a technical subject in public — short pieces that turn a day's reading and a small experiment into one earned claim. The model is a practitioner thinking out loud, not an authority lecturing. The reference voices are people who write to understand: they start from a thing they observed, follow the confusion honestly, and land on one idea they can now defend.
This skill is a lens, not a cage. The writer's actual idiolect lives in writing/voice-profile.md in their vault. That file always wins. This skill supplies sensible defaults and a vocabulary for talking about voice so an editor can flag a deviation as a suggestion without ever overwriting the writer's words. When this skill and the profile disagree, follow the profile and note the difference.
Banned openings: "In this post I'll explain…", "X is a Y that does Z", "It's worth noting that…", "Today I learned about…".
These are craft tells that make prose read as machine-generated or as a beginner imitating a register. Treat them as defaults; the writer can override in voice-profile.md.
claim.[^3] with [^3]: Author — title — URL at the end) or a References block. Inline (Author et al., 2019) is acceptable when it is genuinely load-bearing, but a paragraph studded with parentheticals reads like a lit-review, not an essay. The writer chooses; flag overuse, do not enforce.Signal where you stand without an authority pose. Scale: "I suspect" / "my read is" (tentative) → "the evidence I've seen says" / "the interesting question is" (reasoned) → "I'm now confident that" / "this is the thing that finally clicked" (confident). Use the confident register only where you've actually done the work to earn it; the credibility of learning-in-public comes from not overclaiming.
writing/voice-profile.md accumulates the writer's actual patterns: favored sentence rhythms, words they like and avoid, how they cite, how much they swear, whether they use em dashes, their typical opener and closer moves, recurring analogies. When applying or critiquing voice:
This skill produces or evaluates prose. It does not silently rewrite a human's draft. When used by a generative scribe, it shapes a new draft from the writer's own evergreen claims. When used by an advisory editor, it produces flagged suggestions against the profile, each marked as the writer's call. The boundary is in [[advisory-edit]]: assembling the writer's claims into a draft is generative; editing the writer's words is advisory-only.
testing
Cluster a conference's event records into a small set of coarse themes with finer sub-clusters, an explicit outlier bucket, and soft (multi-membership) affinities — using the hybrid embed-then-label pipeline (embed abstracts, reduce, density-cluster, then LLM-label the clusters) when embedding libraries are available, and an LLM-reasoned hierarchical fallback when they are not. Embeddings do the grouping; the LLM only names the groups. Conference-agnostic. Use when turning structured event records into a navigable theme map for preference elicitation and scheduling, when you need 6-8 reasonable themes rather than 20 muddy ones, or when overlapping talks must belong to more than one theme. Trigger keywords - theme clustering, cluster talks, embed then label, soft membership, outlier talks, conference themes, topic map.
development
Build a personal conference schedule as a constraint-optimization problem — hard constraints (no time overlap, room-to-room travel time, capacity/registration, the attendee's own must-attends and blackouts) plus a user-owned weighted objective trading interest against breadth, pacing (maximize contiguous free time), and serendipity. Surfaces unbreakable conflicts (two high-value overlapping talks the model cannot rank) as decisions for the human rather than silently picking, and reports what each choice traded away. Conference-agnostic. Use to turn a preference profile plus a theme map into a day-by-day plan, to resolve overlapping sessions, or to balance a packed vs paced schedule. Trigger keywords - schedule optimization, conference schedule, constraint optimization, overlapping talks, contiguous free time, conflict surfacing, packed vs paced.
development
Parse a heterogeneous conference program (markdown, HTML, PDF-derived text, or JSON) into normalized event records with per-field confidence scores and independent classification axes (topic, depth, format, prerequisites, recorded, capacity). Detects the program's format before extracting, treats every inferred field as uncertain (present vs inferred vs missing), and flags thin or missing abstracts so downstream enrichment can target them. Conference-agnostic. Use when ingesting a conference or event schedule into a structured store, normalizing a talk/session list, or extracting per-session metadata with calibrated confidence. Trigger keywords - program ingestion, parse schedule, session extraction, event records, conference program, talk metadata, per-field confidence.
development
Build a personalized preference profile from a small number of well-chosen, cluster-grounded questions instead of a long survey. Represents the person's interests as an uncertainty region over the theme map, picks the single highest-information-gain choice-based question (contrasting real talks from different clusters), balances exploiting known interests against exploring uncertain ones, deliberately injects outlier probes to fight selection bias, and stops as soon as the schedule would be stable. Also elicits the user-owned objective weights and hard constraints. Interactive — runs where it can actually ask the person. Conference-agnostic. Use to turn a theme map into a preference profile, to decide what to ask a conference attendee, or to elicit scheduling priorities. Trigger keywords - preference elicitation, ask few questions, information gain, choice-based questions, selection bias probe, objective weights, attendee preferences.