CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

ikuzuki/technical-prose-editor

Draft and edit long-form technical writing - blog posts, engineering write-ups, externally published design docs and ADRs, substantial PR descriptions, long LinkedIn or Substack pieces - so it reads like a senior engineer wrote it rather than a model. Removes AI cadence (em-dashes, "X isn't Y. It's Z." pivots, numbered framing, rule-of-three symmetry, closing synthesis, weakening hedges) and replaces it with patterns drawn from working technical writers (Dan Luu, Marc Brooker, Julia Evans, Simon Willison, Patrick McKenzie, Will Larson, Rachel Kroll, Aphyr). Use when the user asks to "draft a blog post", "write up X", "edit this post", "review my draft", "make this less AI", "fix the AI cadence", "this sounds like ChatGPT", "de-slop this", or shares a long-form technical draft and asks for feedback. Not for short chat messages, code comments or marketing copy.

88

1.24x
Quality

94%

Does it follow best practices?

Impact

97%

1.24x

2 of 3 eval scenarios. Add 1 more for a full score.

SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

shapes.mdreferences/

Structural shapes

The commonest structural tell in model-assisted drafts is uniformity: every post is hook, then three-or-five H2 sections, then synthesis paragraph. That symmetry is what makes a post read as batch-generated, even where the content is original.

The fix is to pick a shape per post and commit to it. The five shapes below aren't exhaustive; they're the ones working senior-technical writers most often reach for. Some posts blend two (a war story with a short investigation block inside it, or an argument essay that opens as a confession). That's a deliberate choice and fine. What this skill exists to break is the default-symmetric shape.

War story: narrative drives

Rachel Kroll, sometimes Aphyr. Length: typically 600 to 1,200 words.

No H2 headers, or maybe one. The post is a story. Technical detail emerges as the narrative reaches it; voice is wry, slightly resigned; the post ends when the point is made, with no synthesis.

When to use: a specific debugging session, a production incident, an evening lost to a single bug, "I tried X and it didn't work and here's what I did instead". A post about an evening lost to a streaming bug, written as an argument essay with H2s for each sub-problem, is fighting its material: narrate the evening, land the fix, stop.

Smell test: if you find yourself adding a "Generalising" section at the end, you're in argument-essay mode. War stories don't generalise; they end.

Argument essay: one extended position

Dan Luu, Marc Brooker. Length: 1,500 to 4,000 words.

Light H2s for breathing room, used for pacing rather than as structural enforcement. One thesis, accumulating evidence, evidence does the work. Footnotes for tangents. Closes by refusing to oversell.

When to use: a contrarian claim, a "here's how I think about X" piece, a position the reader is meant to disagree with on the first paragraph and agree with by the last. A framework comparison ("why I picked X over Y") usually fits here. Watch for numbered "First lesson", "Second lesson" headers: de-number them and let one argument be the spine, with the other observations following as the spine reaches them.

The argument essay is the AI default. Ration it to roughly one post per quarter.

Practical guide: comprehensive reference

Simon Willison, Eugene Yan, Lilian Weng. Length: 2,000 to 6,000 words.

TOC at the top, numbered or labelled sections, lots of inline links and code. The reader will scroll back to this. Voice is precise and a little dry; the post is closer to a reference document than to an essay.

When to use: "here's how I built X", "things I learned about Y in 2026", a write-up meant to save the next person the time you spent. A "what I'd tell someone setting up the AWS free tier for an LLM workload" post wants it.

Confession: personal narrative becomes general principle

Julia Evans, Patrick McKenzie. Length: 800 to 1,800 words.

First-person throughout. The personal narrative is the spine; the general principle comes out at the end and only if it's load-bearing, often left implicit for the reader to draw. Voice is honest about uncertainty; the post can change direction halfway through if the writer changed their mind.

When to use: "I tried X, then deleted it" posts, mistakes-and-what-I-learned, role-shift reflections, "I used to think Y, now I think Z". Watch for an opener like "Three things happened in the same week" or a closing three-questions framework: both push a confession back towards symmetric essay. Let the first-person narrative do the work.

Investigation: claim, test, output, analysis

Aphyr's Jepsen reports, occasionally Brendan Gregg's perf write-ups. Length: 1,500 to 3,000 words, heavy on code blocks.

Tight loops: claim, then reproducible test, then output, then analysis, then the next claim. Code and output do argumentative work, not just illustration. Voice is formal; sometimes formal-with-literary-touches (the Jepsen "goddess of distributed systems" register).

When to use: benchmarks, "does X actually do Y" posts, anything where the evidence is reproducible and the post's job is to demonstrate. Suits a post comparing embedding stores, retry strategies, or model-cost behaviour under varying load.

Picking the shape

For each draft, ask:

  1. What is the dominant thing this post is doing? Telling a story (war story), arguing a position (essay), explaining how to do something (guide), reflecting on a personal experience (confession), measuring something (investigation).
  2. What's the natural length? If the answer is "600 words", it's a war story or a short confession. If "5,000 words", it's an essay or a guide.
  3. What does the reader come away with? A vivid scene (war story). A new mental model (essay). A working setup (guide). A sense of how the writer thinks (confession). A reproducible result (investigation).

If two shapes feel right, the post is probably trying to do two things and should be split. If no shape feels right, the post hasn't decided what it is yet.

SKILL.md

tile.json