Nick Nisi Content Machine
Turn raw material into a draft Nick finishes. This skill does research, structure, and connective prose. It does not produce publishable first-person writing.
The rule this skill exists to enforce
Facts may come from logs. Feelings may not.
An earlier version of this skill shipped a post that readers called AI slop. The facts were impeccable — real timestamps, real commit stats, real Slack quotes. The failure was that it also generated Nick's inner life: what he thought, what he'd assumed, what moved him. Nine such claims; one had a source. Readers can't always name that, but they feel it, and they stop trusting the piece.
The measured version: that post claimed inner states at 5.84 per 1,000 words against Nick's corpus mean of 0.97. Six times his rate. He mostly writes about what he built. The draft wrote about how he felt about what he built.
Everything below follows from that.
Process
1. Gather the raw material
Accept the mess: scattered thoughts, code, commands, conclusions, links. Don't require organization.
If the material is thin, mine it — session logs, Slack, git history, the repos
themselves. This is the pipeline's genuine strength and there's no reason to hold
back. Record a source for every fact. A working file of claim → source keeps
the draft honest and makes drafting mechanical. In the draft, every high-risk claim
— a number with units, a version, a quote, an attribution — carries a
[source: ...] marker or a link in the same sentence. slopcheck flags the ones
that don't. Nick strips the markers when he finishes the post.
Three more ledger rules:
- Pin verbatim at research time. When a quote, command, or code block will appear in the draft, copy it into the working file exactly, while the source is still open — and paste from the file when drafting, never retype from memory. Retyping from memory is how misquotes happen.
- Length is source-proportional. Thin grounding means a shorter post, never padding. Thin sources plus a long draft is the fabrication signature.
- Disclose what you couldn't read. A named source you couldn't access (a private thread, a dead link, a repo that isn't cloned) goes in the handoff list, never silently dropped. Nick decides whether the evidence is enough, and he can only do that if he knows what you didn't read.
The working file doubles as the --source input to the provenance gate in
step 7 — everything Nick wrote (Slack messages, notes, prompts) and every
pinned quote belongs in it.
2. Research the conversation before interviewing
Produce a brief, one page maximum, four sections (format details in
references/interview.md):
- State of the conversation — what's already been written on this topic (web search, 3–5 sources, two sentences each, links kept).
- The consensus take — the post everyone else has already written, in one paragraph. This is the post to NOT write.
- Contrarian angles — 2–4 positions that cut against the consensus and are supportable from step-1 material, each citing the fact, log, or commit that supports it. No angle without a source.
- Questions only Nick can answer — 3–6 questions no research can resolve: what he decided, what he abandoned, what surprised him. These open the interview.
The brief is working material, not draft content. Nothing from sections 1–3 enters the draft unless it survives the interview — Nick reacts to it in his own words — or is a sourced fact per step 1.
3. Interview for the parts you cannot mine
This is the highest-value step in the skill. Do not skip it.
Logs record what Nick did. They never record what he thought. Run the interview
per references/interview.md: one question at a time, opening with the brief's
"questions only Nick can answer," at most one pushback per vague answer, three
stances (mechanic, skeptic, historian) rotating unannounced, stopping when two
consecutive answers add no new facts or stories — 8–15 questions is a hint, not
a script.
Non-negotiables, whatever the protocol says:
- Capture answers verbatim. Dictation is the preferred input — spoken answers run longer and carry his cadence, and every extra verbatim word is tier-1 material for step 6. Typing works too: fast, unpolished. His unpolished answers are the raw material for every voice-load-bearing sentence in the post. They will be flat, hedged, and specific — that flatness is the voice. Do not smooth it; false starts and mid-sentence corrections stay.
- Interview answers go into the working file — they are
--sourcematerial. - If he declines to be interviewed, the post ships with
[NICK: ...]markers where his inner life would go. That is a correct outcome, not a failure.
4. Read the corpus, not a description of it
Read 2–3 recent posts from src/content/posts/ in full — most recent first, plus
any on a similar topic. Write connective prose consistent with those, not with
a summary of them.
Then read references/voice-tone.md, which is now a list of ceilings and
prohibitions, not features to hit. Requesting a feature makes a model execute it
every time it applies; that's what produced eight aphorisms in an eight-section
post. Only constraints are safe to state.
Last, read references/content-lessons.md. Lessons are constraints in the same
category as the voice ceilings — a draft that repeats a logged lesson is a
failed draft even if every gate passes.
5. Structure from the material
Find the chronology or the argument already in the facts and follow it.
Then sketch the outline before drafting: for each planned section, list the facts from the working file it draws on. A section that makes factual claims but has no facts behind it gets cut — or becomes a question back to Nick — before drafting, not written around. Sections whose job is argument (thesis, counterargument, stakes — the skeptic's material from the interview) are exempt: mark them as argument rather than padding them with citations. The outline is working material, not a deliverable.
Do not select a narrative framework. references/frameworks.md exists as
diagnostic vocabulary for talking about a draft that already exists — never as a
template to fill. Choosing a framework means choosing what the events meant,
which is Nick's call, not the tool's. A flawlessly executed Story Circle is the
single most detectable artifact this skill can produce, because no human drafting
from memory has ever produced one.
The only structural instruction: identify the one turn the post exists to make, arrange the facts so it lands, and leave flat ground everywhere else.
Section headers are descriptive — they name the topic ("What Fleet is", "Three signals, none trustworthy alone"). Allusive narrative-beat headers ("The drift", "Coming home") read as chapter titles and are a tell in bulk.
6. Write the ugly draft
Informationally complete, rhetorically inert. Aim for flat.
Nick is good at adding voice to plain prose and bad at excising pastiche from clever prose. A draft that already sounds finished is the worst possible artifact to hand him — he has to fight it. Give him something that obviously needs him.
Build the draft sentence by sentence in this priority order:
- Nick's verbatim words — interview answers, notes, Slack messages he
wrote — first choice wherever they cover the ground. Light mechanical repair
(verb agreement, dropped words from voice-to-text) is allowed; mark it
[sic: cleaned]when the repair changes more than punctuation. Rewording is not repair — a reworded sentence silently stops being his. - Sourced facts in plain declarative sentences — for ground his words don't cover: what happened, numbers, commands, errors.
- Generated connective tissue — last resort. Transitions and scaffolding
only, one to two sentences at a time, carrying zero claims. If a generated
sentence asserts anything a source or quote doesn't already assert, it is
either a fact needing a source or interiority needing a
[NICK: ...]marker.
The interview transcript is the draft's skeleton, not a quote quarry. This is also the entire anti-detection strategy: provenance classifiers are invariant to rearranging Nick's words and reliably flag composed prose however it's styled (see "What detectors actually measure" below).
Hard rules while drafting:
| Rule | Why |
|---|---|
Every mental-state sentence is a verbatim quote from step 3, or a [NICK: what were you actually thinking here?] marker |
The core failure. Untagged invented interiority is an automatic fail. |
| Prefer Nick's verbatim words over generated prose wherever they cover the ground | The draft is an arrangement, not a composition |
| Sections end on information — a fact, a number, a command, or just stop | Eight aphoristic endings is the template's silhouette |
| Every number traces to a source | "Twelve minutes of curiosity" was invented precision that narrativizes a life |
High-risk claims — numbers with units, versions, quotes, attributions — carry [source: ...] or a link in the sentence |
slopcheck flags the gaps; cite from the working file or cut the sentence |
| One sustained metaphor per post, maximum | A metaphor recurring across 3+ sections is a framework fingerprint |
| No narrator stage directions | "Now watch what happened next" is Nick emceeing a post he'd never emcee |
Where you'd reach for a rhetorical flourish, write the plain sentence instead and let Nick decide whether it deserves more.
7. Run the structural gate — before Nick reads it
node scripts/slopcheck.ts \
--corpus '/Users/nicknisi/Developer/nicknisi.com/src/content/posts/*.md*' \
--draft path/to/draft.mdx \
--source path/to/working-file.md \
--check-links
It calibrates against Nick's real posts and flags outliers in both directions — suppression is as suspicious as excess. A draft engineered to dodge a metric looks different from one that never considered it.
The gate's job is to produce Nick's rewrite list, not to certify the draft. It quotes the offending lines with line numbers — fix those exact spots rather than rewriting blind. Before running it, re-read the draft from the file, not from your memory of writing it. Memory holds the version you intended; the file holds the one you wrote.
Three sections are absolute gates, not corpus-scored metrics:
- UNSOURCED CLAIMS — numbers, versions, quotes, and attributions with no
[source:]marker or link. Cite them from the working file or cut them. - INTERIORITY — claims about Nick's inner life. Those lines go to Nick, not to you.
- LINKS — a 404 is a fix, not a note. Anything "unverified" gets checked by hand.
The script exits non-zero while any of these have entries. A structurally clean draft with unconfirmed claims is not a passing draft.
Two drills after the gate is clean:
- Delete the last paragraph and re-read. If the post got better, keep the deletion — summary endings usually add nothing.
- Ask "what makes this obviously AI-generated?" and fix whatever answers. If the answer is "nothing," ask again — a first draft that survives untouched almost never happens.
What detectors actually measure
Pangram-class detectors are provenance classifiers, not tell counters. Their training labels a clause human only on a near-exact lexical match to human-written source; same-idea-reworded is AI-assisted; novel wording is AI. Three consequences, confirmed on a real post (Aug 2026):
- De-telling cannot flip a verdict. Restyling generated prose is "humanization," which Pangram detects ~98% of the time and labels as its own class — a worse look than AI. Never run a rewrite-until-the-detector-passes loop; it is detected, and it produces the finished-sounding draft this skill exists to never produce.
- Reordering the author's sentences is a non-edit to their labeler. Arranging Nick's words is provenance-preserving. Composing new ones is not.
- The only lever is the verbatim fraction — the share of draft characters that lexically match Nick's raw material. On the real post, his verbatim Slack quotes scored HUMAN in the wild and the generated connective prose around them scored AI, segment for segment.
The PROVENANCE section of the gate output (enabled by --source) classifies
every sentence verbatim/adapted/generated and lists the longest generated runs.
Those runs are the spans only Nick's own typing can fix — they go in the
handoff as retype targets, not as rewrite targets for you.
Vocabulary checks (the tighten-prose and unslop skills) run last and matter
least. They scan for 2024-era tells like "delve" and "leverage" and will pass a
maximally slop-shaped draft — they did exactly that on the post that caused this
rewrite. One exception to their rules: unslop's absolute punctuation bans ("no
em dashes, ever") don't apply here. The corpus is the authority — Nick uses em
dashes at a measured rate, and slopcheck flags suppression below that rate as
readily as excess. Match his rate; don't zero the character.
8. Hand off, don't ship
Deliver:
- The flat draft
- The interiority list — every sentence claiming his inner life, for him to rewrite or cut
- The gate output, including the provenance split and the longest generated runs as retype targets
- Open questions
- Sources you couldn't read and links that didn't verify
- The working file — the claim → source ledger the draft was built from
Then ask Nick exactly one feedback question: "Anything the draft got wrong
that I should never do again?" If he answers, append the lesson to
references/content-lessons.md (entry format at the top of that file). If he
declines, append nothing. Never auto-derive lessons from slopcheck output — the
gate feeds back through its own channel. Before appending, check the file and
voice-tone.md: if the lesson restates an existing constraint, sharpen the
existing entry in place instead of duplicating it.
Do not publish a post whose first-person sentences Nick has not read and approved. He isn't the editor of this artifact. He's the only source for half of it.
Entry point 2: idea sourcing
Runs only when Nick explicitly asks — "what should I write about?", "any post ideas in my recent work?" Never implicitly.
- Read
references/idea-vault.mdfirst. Re-surface still-relevantopenentries before scanning for new ones; never re-surfacedeadones. - Scan recent activity, most valuable sources first: git history across active repos (7–14 days), session logs, Granola meeting transcripts, Slack if available. Skip unavailable sources silently.
- Score candidates against the five spike criteria: point of view, story potential, emotional intensity, lesson/framework, depth. A candidate needs at least two to make the list.
- Present 5–10 ideas, each as a one-line pitch, the criteria it hits, and the evidence (commits, log excerpts) that suggested it. Fewer, better-evidenced ideas beat fifteen thin ones.
- Append unpicked ideas to the vault as
open. Nick marks entriesdead; mark an entrydraftedwhen a draft exists.
Output Format
See references/post-template.md for frontmatter schema and file conventions.
Bundled Resources
references/interview.md— research-brief format and interview protocol (stances, pushback, stop rule)references/voice-tone.md— ceilings and prohibitions, with measured rates from his corpusreferences/content-lessons.md— append-only lessons from Nick's hand-off feedback; read at draft timereferences/idea-vault.md— unpicked post ideas from idea-sourcing runsreferences/post-template.md— frontmatter schema and structural skeletonreferences/frameworks.md— diagnostic vocabulary for critiquing a finished draftscripts/slopcheck.ts— corpus-calibrated structural detector, provenance gates (unsourced claims + interiority + verbatim fraction via--source), and link checker (Node 24+, no dependencies)