CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/blog-writer

Write developer blog posts from video transcripts, meeting notes, or rough ideas. Extracts narrative from source material, structures content with hooks and technical sections, formats code examples with placeholders, and checks drafts against 31 AI anti-patterns with structural variant detection, three-pass scanning (surface, skeleton, soul check), and rewrite auditing. Auto-updates anti-pattern list from Wikipedia before each session. Includes interactive onboarding to learn the author's voice from writing samples. Persona files live at ~/.claude/blog-writer-persona/ by default, with symlink support for custom locations (e.g. Google Drive for backup). Optional global voice saves your voice profile to Claude Code user memory so it applies across all projects. Use this skill whenever the user wants to write a blog post, draft a blog, turn a transcript into a blog, work on blog content, or mentions "blog" in the context of content creation. Also trigger when the user provides a video transcript and wants written content derived from it, or when continuing work on a blog series.

97

1.43x
Quality

94%

Does it follow best practices?

Impact

99%

1.43x

Average score across 7 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-1/

{
  "context": "Tests whether the agent correctly applies TLDR formatting rules (bullets not prose, provocation style, compressed not miniaturized, recurring character placement) and fixes placeholder numbering to use independent per-type counters with zero-padding, and removes hedging filler.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "TLDR is bullet points",
      "description": "The TLDR section uses bullet points (lines starting with - or *), NOT prose paragraphs",
      "max_score": 10
    },
    {
      "name": "TLDR bullet count",
      "description": "The TLDR contains 2, 3, or 4 bullet items (not 1, not 5+)",
      "max_score": 8
    },
    {
      "name": "TLDR bullets are provocative",
      "description": "NONE of the TLDR bullets are dry summaries of what the post covers (e.g., 'We built a rate limiter and improved reliability'). Each bullet contains a specific detail, number, or surprising claim that would make a reader think 'wait, really?'",
      "max_score": 10
    },
    {
      "name": "TLDR recurring character last",
      "description": "At least one TLDR bullet references the recurring character Yuki, and if present it appears as the last bullet in the list",
      "max_score": 8
    },
    {
      "name": "TLDR compressed not miniaturized",
      "description": "The TLDR bullets do NOT explain the mechanism of how the rate limiter works (don't spoil the technical details). They make the reader want to know how, rather than summarizing the full solution.",
      "max_score": 10
    },
    {
      "name": "Screenshot numbering independent",
      "description": "Screenshot placeholders are numbered independently starting at 01 (Screenshot 01, Screenshot 02, etc.) with their own sequence separate from Code and Link placeholders",
      "max_score": 10
    },
    {
      "name": "Code numbering independent",
      "description": "Code placeholders are numbered independently starting at 01 (Code 01, Code 02, etc.) with their own sequence separate from Screenshot and Link placeholders",
      "max_score": 10
    },
    {
      "name": "Link numbering independent",
      "description": "Link placeholders are numbered independently starting at 01 (Link 01, Link 02, etc.) with their own sequence separate from Screenshot and Code placeholders",
      "max_score": 8
    },
    {
      "name": "Zero-padded numbers",
      "description": "All placeholder numbers use zero-padding (01, 02, 03, etc.) not bare digits (1, 2, 3)",
      "max_score": 8
    },
    {
      "name": "No shared counter",
      "description": "There is NO shared sequential counter across placeholder types -- e.g., no pattern like Screenshot 01, Code 02, Screenshot 03 where the numbers increment across types",
      "max_score": 10
    },
    {
      "name": "Hedging filler removed",
      "description": "Hedging phrases like 'basically', 'essentially', 'in order to' that appear in the original draft are removed or rewritten without the filler words",
      "max_score": 8
    }
  ]
}

evals

scenario-1

criteria.json

task.md

README.md

SKILL.md

tessl.json

tile.json