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 37 AI anti-patterns with structural variant detection, three-pass scanning (surface, skeleton, soul check), craft sweep, and rewrite auditing. Enforces sentence/paragraph craft rules, facts-over-assessments principles, and honest limitations. 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.

96

1.56x
Quality

94%

Does it follow best practices?

Impact

97%

1.56x

Average score across 9 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-8/

{
  "context": "Tests whether the agent detects and fixes sentence/paragraph craft problems and replaces assessments with facts. The draft has no classic AI vocabulary contamination or structural gimmicks, but suffers from overloaded sentences, cold lists, weak subjects, nested subordination, introductory filler words, amplifier intensifiers, unproven assessment adjectives, euphemistic smoothing, features without benefits, stacked data points, and empty conclusions. Also tests whether the agent flags the absence of honest limitations.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Overloaded sentence split",
      "description": "The mega-sentence about evaluating 'multiple tools, frameworks, and approaches, including Prometheus, Grafana, Datadog, New Relic, and Thanos, by our infrastructure team over the course of several months in order to determine the best path forward...' is split into multiple sentences, each carrying one idea",
      "max_score": 8
    },
    {
      "name": "Cold list generalized",
      "description": "The list of monitoring tools (Prometheus, Datadog, New Relic, Thanos, VictoriaMetrics) is introduced with a category label (e.g., 'five monitoring tools' or 'several observability platforms') before listing them, rather than dropped cold",
      "max_score": 8
    },
    {
      "name": "Weak subjects strengthened",
      "description": "'The implementation of a new monitoring solution required...' and 'The presence of outdated monitoring configurations... meant that...' are rewritten with real actors as subjects (e.g., 'We evaluated...' or 'Our Nagios setup had...' or 'Three teams had maintained...')",
      "max_score": 10
    },
    {
      "name": "Nested subordination flattened",
      "description": "The deeply nested sentence about the infrastructure team ('which had been working... since January, when we first approved... after the quarterly planning meeting where Sasha presented... that included...') is split into shorter sentences with at most one level of subordination",
      "max_score": 8
    },
    {
      "name": "Introductory filler words removed",
      "description": "The filler words 'Of course', 'naturally', 'Obviously', 'Frankly', 'Additionally', 'Furthermore', 'Moreover', 'Also' (as sentence opener), and 'In addition to this' are deleted without changing the sentence meaning",
      "max_score": 10
    },
    {
      "name": "Amplifier intensifiers replaced with facts",
      "description": "The 'truly powerful', 'remarkably flexible', 'incredibly active', 'extremely impressed' amplifier + adjective pairs are either replaced with specific evidence (what makes the query language powerful, what makes alerting flexible) or the amplifiers are removed",
      "max_score": 10
    },
    {
      "name": "Unproven assessments replaced with evidence",
      "description": "The 'robust, scalable, and comprehensive', 'elegant and innovative approach', and 'seamless observability experience' assessment adjectives are either replaced with facts that prove the claim or removed. The false-work test applies: if stripping the adjectives leaves the sentence empty, it needs research, not better adjectives.",
      "max_score": 10
    },
    {
      "name": "Euphemistic smoothing fixed",
      "description": "The 'some issues with data continuity', 'some inconsistencies in the metric naming', and 'some adjustments to the original timeline' euphemisms are replaced with direct language about what actually went wrong (e.g., what broke, how long it was delayed, what the naming conflicts were)",
      "max_score": 8
    },
    {
      "name": "Features translated to benefits",
      "description": "The raw spec paragraph ('25,000-metric cardinality capacity, automatic service dependency mapping, and configurable retention policies ranging from 15 days to 2 years') is rewritten to explain what these features mean for the team or flagged as needing author input to translate",
      "max_score": 8
    },
    {
      "name": "Stacked data points trimmed",
      "description": "The four-way data pile ('60%, from $8,400 per month to $3,360 per month, saving us $60,480 annually, which represents a 5x return') is reduced to one or two data points that make the strongest case",
      "max_score": 8
    },
    {
      "name": "Empty results replaced with evidence",
      "description": "The vague results ('handles our current load well', 'haven't had any issues', 'team is happy with the tooling') are either replaced with specific metrics or evidence, or flagged in the report as needing facts from the author",
      "max_score": 10
    },
    {
      "name": "Honest limitation present or flagged",
      "description": "The revised draft either includes at least one limitation or caveat about the migration or Prometheus (e.g., operational overhead, long-term storage complexity, learning curve, PromQL difficulty) OR the revision report explicitly flags the absence of limitations as a problem the author needs to address",
      "max_score": 8
    },
    {
      "name": "No new anti-patterns introduced",
      "description": "The revised draft does NOT introduce AI vocabulary (delve, leverage, tapestry, etc.), parallel binary comparisons, self-answering fragment questions, significance inflation, choppy fragment chains, or other named anti-patterns from the skill's list",
      "max_score": 6
    },
    {
      "name": "Technical content preserved",
      "description": "The core technical narrative (Nagios to Prometheus migration, tool evaluation, batched alerting migration, cost reduction) is preserved in the revision -- the revision improves the writing quality, not the architecture decisions",
      "max_score": 6
    }
  ]
}

evals

README.md

SKILL.md

tessl.json

tile.json