RepoPilot

sjmoran/claude-blog-prose

Claude Code skill for honest, hype-free blog prose — first-person voice, no AI-slop tells, checkable claims. Blog-facing port of claude-academic-prose.

Mixed

Solo project — review before adopting

MixedDependency

single-maintainer (no co-maintainers visible); no tests detected…

HealthyFork & modify

Has a license, tests, and CI — clean foundation to fork and modify.

HealthyLearn from

Documented and popular — useful reference codebase to read through.

MixedDeploy as-is

Scorecard "Branch-Protection" is 0/10; no CI workflows detected

  • Solo or near-solo (1 contributor active in recent commits)
  • No CI workflows detected
  • No test directory detected
  • Scorecard: default branch unprotected (0/10)
  • Last commit today
  • MIT licensed

What would improve this?

  • Use as dependency Mixed to Healthy if: onboard a second core maintainer; add a test suite
  • Deploy as-is Mixed to Healthy if: bring "Branch-Protection" to ≥3/10 (see scorecard report)

Computed from maintenance signals — commit recency, contributor breadth, bus factor, license, CI, tests, cross-checked against OpenSSF Scorecard

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Want this for your own repo?

Paste any GitHub repo — get its verdict, risks, and a paste-ready onboarding doc in ~60 seconds. Free, no sign-up.

Embed the "Forkable" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/sjmoran/claude-blog-prose?axis=fork)](https://repopilot.app/r/sjmoran/claude-blog-prose)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card

This card auto-renders when someone shares https://repopilot.app/r/sjmoran/claude-blog-prose on X, Slack, or LinkedIn.

Ask AI about sjmoran/claude-blog-prose

Grounded in the actual source code. Pick a starter question or write your own.

Or write your own question

Onboarding doc

Onboarding: sjmoran/claude-blog-prose

Generated by RepoPilot · 2026-07-02 · Source

Verdict

Mixed — Solo project — review before adopting

  • Last commit today
  • MIT licensed
  • ⚠ Solo or near-solo (1 contributor active in recent commits)
  • ⚠ No CI workflows detected
  • ⚠ No test directory detected
  • ⚠ Scorecard: default branch unprotected (0/10)

Computed from maintenance signals — commit recency, contributor breadth, bus factor, license, CI, tests, cross-checked against OpenSSF Scorecard

TL;DR

A Claude Code skill that rewrites AI-generated blog posts to sound authentically human by stripping out recognizable LLM patterns (em-dash drama, hype vocabulary, rhetorical inversions) while enforcing first-person voice, concrete facts with checksums, and honest caveats. It's the blog-facing port of claude-academic-prose, applying four rule sets (voice, no-hype, no-self-sabotage, checkable claims) to catch and rewrite the telltale markers of AI-slop before publication. Flat skill structure: skills/blog-prose/ contains SKILL.md (the core rule definitions and prompt) and voice-exemplars.md (before/after examples). The .claude-plugin/ directory holds marketplace.json for skill registration. No code — purely prompt-based configuration designed to be loaded into Claude Code as an instruction set.

LLM-derived; treat as a starting point, not verified fact.

Who it's for

Technical writers and engineers publishing blog posts via Claude who want their AI-assisted writing to read like a knowledgeable person sharing real experience, not marketing copy — particularly those who have seen readers dismiss posts on first sight because they smell the LLM pattern.

LLM-derived; treat as a starting point, not verified fact.

Maturity & risk

Experimental / early-stage (v0.1). Single-file skill definition with no commit history, test suite, or CI visible. The project is a ported concept (following claude-academic-prose) with clear documented rules but no indicators of production use or community iteration yet.

Single-maintainer, no CI/test infrastructure, and the rule enforcement itself is untested — it's entirely Claude instruction-based with no automated validation that the rules actually fire as intended. The skill's effectiveness depends on Claude's instruction-following consistency, which can vary. No issue tracker or roadmap visible.

LLM-derived; treat as a starting point, not verified fact.

Active areas of work

The repo appears to be a freshly published initial release. No active commit history, PRs, or issue tracking visible — this is a stable snapshot of the port from academic-prose to blog context, with the four rule sets documented and exemplified but awaiting real-world feedback and iteration.

LLM-derived; treat as a starting point, not verified fact.

Get running

Clone and inspect the skill definitions: git clone https://github.com/sjmoran/claude-blog-prose && cd claude-blog-prose && cat skills/blog-prose/SKILL.md. The skill is meant to be loaded into Claude Code via the .claude-plugin/marketplace.json registration, not run locally as a traditional project.

Daily commands: Not a runnable project. Load it as a Claude Code skill: paste the rules from skills/blog-prose/SKILL.md into a Claude conversation with code context enabled, or register via .claude-plugin/marketplace.json if using Claude Code's plugin system. Use by running a blog draft through Claude with the skill context applied.

Map of the codebase

  • README.md — Entry point explaining the skill's purpose, philosophy, and the core problem it solves (stripping AI-generated blog-post clichés).
  • skills/blog-prose/SKILL.md — Primary skill definition and rules that Claude will apply when generating blog prose — the load-bearing configuration.
  • skills/blog-prose/voice-exemplars.md — Concrete before/after examples and voice patterns showing what acceptable blog prose looks like in this skill's view.
  • .claude-plugin/marketplace.json — Metadata and registration for Claude Code plugin discovery and integration.
  • .gitignore — Standard exclusion rules for the repository.

Components & responsibilities

  • SKILL.md (Rules Engine) (Markdown prose) — Defines hard constraints (avoid em-dash drama, no jargon, first-person) and soft heuristics (checkability, authorial voice) for prose quality.
    • Failure mode: Rules are ambiguous or contradictory, leading Claude to misinterpret intent on edge cases.
  • voice-exemplars.md (Training Data) (Markdown exemplars) — Provides before/after examples that ground Claude's understanding of rule violations and acceptable rewrites.
    • Failure mode: Exemplars are narrow or unrepresentative; Claude overgeneralizes or fails on novel prose patterns.
  • marketplace.json (Integration Metadata) (JSON configuration) — Registers the skill with Claude Code, enabling discovery and installation.
    • Failure mode: Metadata is outdated or malformed; skill fails to load or appears with incorrect metadata in marketplace.
  • README.md (Philosophy & Context) (Markdown documentation) — Explains the skill's purpose, rationale, and relationship to its academic predecessor, so users understand when and how to apply it.
    • Failure mode: Users misunderstand scope or misapply the skill to non-blog contexts (e.g., marketing copy, technical docs).

Data flow

  • User draft blog postClaude (via Claude Code) — User paste their draft or references a file; Claude Code loads the skill.
  • SKILL.md + voice-exemplars.mdClaude inference engine — Claude ingests rules and exemplars to contextualize the rewrite task.
  • Claude reasoningRewritten blog prose — Claude applies rules to the draft, removing clichés and rewriting for authenticity and checkability.
  • Rewritten proseUser feedback — User reviews the output, iterates, and may contribute improved rules or exemplars back to the repo.

How to make changes

Add a new prose rule or constraint

  1. Open SKILL.md and locate the rules section where constraints are listed. (skills/blog-prose/SKILL.md)
  2. Add a new rule entry following the existing pattern (e.g., 'Avoid X, prefer Y'), with clear rationale. (skills/blog-prose/SKILL.md)
  3. Create a before/after exemplar pair in voice-exemplars.md to illustrate the new rule in action. (skills/blog-prose/voice-exemplars.md)

Add new voice exemplars or patterns

  1. Open voice-exemplars.md and review existing before/after pairs to match the style. (skills/blog-prose/voice-exemplars.md)
  2. Add a new exemplar section with a problematic LLM-generated snippet and the desired honest rewrite. (skills/blog-prose/voice-exemplars.md)
  3. Tag the exemplar with relevant rule categories (e.g., 'em-dash drama', 'jargon', 'checkability') so it reinforces the skill rules. (skills/blog-prose/voice-exemplars.md)

Update plugin metadata for marketplace

  1. Open marketplace.json and review current skill metadata (name, version, description, tags). (.claude-plugin/marketplace.json)
  2. Update version, description, or tags to reflect any changes to the skill's capabilities or focus. (.claude-plugin/marketplace.json)

Why these technologies

  • Markdown + Plain Text — Skill rules and exemplars are stored as human-readable Markdown for easy review, versioning, and contribution; no complex serialization.
  • Claude Code Plugin Framework — Delivers the skill as a Claude Code integration so writers can invoke it directly during composition without context-switching.
  • Marketplace JSON — Standard metadata format for plugin discovery and integration, reducing friction for users finding and installing the skill.

Trade-offs already made

  • Rules are declarative prose, not formal grammar or DSL.

    • Why: Easier for humans (writers, reviewers) to understand and debate; lowers contribution barriers.
    • Consequence: Claude must interpret rules from natural language; ambiguity in edge cases requires exemplars to disambiguate.
  • Skill is voice-centric (exemplars), not purely mechanical (e.g., regex filters).

    • Why: Honest prose often requires semantic judgment, not just keyword blacklisting; exemplars teach nuance.
    • Consequence: Requires Claude to reason about intent and context; less suitable for fully automated copy-editing pipelines.
  • No runtime infrastructure (no API, no database, no monitoring).

    • Why: Skill is a static guidance layer for Claude; users run the skill locally in Claude Code.
    • Consequence: No telemetry or feedback loop to refine rules; improvements are manual and community-driven.

Non-goals (don't propose these)

  • Does not enforce grammar or spelling; assumes input is already syntactically sound.
  • Does not handle fact-checking or citation; flags claims as 'checkable' but does not verify them.
  • Does not apply SEO or engagement optimization; explicitly rejects metrics-driven writing.
  • Does not provide automated editing; gives rules and examples for human writers to apply with Claude's help.
  • Does not replace domain expertise; assumes the writer knows their subject.

Code metrics

  • Avg cyclomatic complexity: ~2 — Skill is lightweight; no algorithms, no state management, no API calls. Complexity is purely semantic (interpreting prose rules).
  • Largest file: skills/blog-prose/voice-exemplars.md (250 lines)
  • Estimated quality issues: ~1 — No automated tests or validation; relies entirely on human review and Claude's interpretation. No linting or type checking.

Anti-patterns to avoid

  • Rules without exemplars (Medium)skills/blog-prose/SKILL.md: If a rule lacks a corresponding before/after example in voice-exemplars.md, Claude may misinterpret or overapply it.
  • Aspirational exemplars (unrealistic rewrites) (Medium)skills/blog-prose/voice-exemplars.md: If exemplars show impossibly clean or overly edited versions, Claude may either overcorrect or ignore the rule entirely.

Performance hotspots

  • voice-exemplars.md comprehensiveness (Maintenance & Coverage) — Exemplars are static; as LLM writing styles evolve, new clichés emerge that aren't captured.
  • Rule clarity & ambiguity (Semantic Ambiguity) — Some rules (e.g., 'first-person voice') are subjective; edge cases (e.g., when to use 'we' vs. 'I') require interpretation.
  • No feedback loop for rule refinement (Observability) — There is no runtime data on which rules are most effective or frequently violated; improvements are guesswork.

Traps & gotchas

This is a skill, not a software library — there is no install step, no runtime, no config file to set. It lives entirely as prose instructions in SKILL.md. The enforcement happens via Claude's language understanding, not code execution, so effectiveness depends on the exact phrasing of the rules and Claude's consistency at following them. No automated way to verify the skill is working; you must manually check output. The skill assumes you're using Claude Code with code context enabled — standard Claude chat or other frontends won't have it available.

Architecture

Concepts to learn

  • Lexical hedging and intensifier detection — The 'no-hype' rule set targets specific linguistic markers (em-dashes, adverbs like 'truly', 'delve', 'leverage') that signal AI-written prose; understanding what they are helps you refine the rule set.
  • First-person narrative voice in technical writing — blog-prose enforces first-person and concrete detail to build reader trust; knowing why this voice works in technical contexts helps you evaluate when to apply the skill.
  • Checkable claims and verification — Rule 4 of blog-prose requires every factual claim be verifiable in <1 minute (benchmarks, linked sources, code diffs); this principle underpins credibility and distinguishes human technical writing from marketing.
  • LLM output patterns and detection — The entire skill is built on recognizing and stripping predictable LLM artifacts (triadic punchlines, 'not X — it's Y' pivots, withholding titles); understanding these patterns helps you spot them in your own writing.
  • Caveat and uncertainty expression — The 'no-self-sabotage' rule distinguishes between honest caveats ('I'm not sure this holds under concurrent writes') and false modesty ('I'm no expert but'); knowing the difference keeps your work credible without underselling.
  • Rhetorical inversion and pivots — Structures like 'It's not X — it's Y' and 'delve into' are specifically banned in blog-prose because they delay the point and feel manufactured; recognizing them in drafts helps you rewrite for directness.
  • sjmoran/claude-academic-prose — The direct predecessor — the academic-paper version of this skill with similar rule sets for research writing; blog-prose is the lighter, first-person port.
  • AnthropicAI/anthropic-sdk-python — Claude's official Python SDK; use it to programmatically invoke Claude with the blog-prose skill context if automating bulk blog rewrites.
  • zeke/claude-code-skills — A community index of Claude Code skills; blog-prose would be discoverable and comparable against other writing-aid skills if listed here.
  • boz/clever-commit-messages — Related LLM-rewriting skill for commit message prose — applies similar anti-hype, clarity-first principles to version control messages.
  • Anthropic/prompt-eng-resources — Anthropic's official prompt-engineering guides; useful reference for understanding how to refine the rule sets in SKILL.md for clarity and effectiveness.

PR ideas

Click to expand

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add voice-exemplars test suite to validate prose against skill rules

The repo has skills/blog-prose/voice-exemplars.md which likely contains good/bad examples, but no automated way to test that Claude's output actually follows the rules. A new contributor could create a test file (e.g., skills/blog-prose/__tests__/exemplars.test.js) that parses voice-exemplars.md and validates prose samples against SKILL.md rules (e.g., regex checks for banned phrases like 'delve', 'leverage', 'game-changer', em-dash overuse). This ensures the skill's guidance stays enforced.

  • [ ] Parse skills/blog-prose/voice-exemplars.md to extract labeled prose examples (good/bad)
  • [ ] Create rule validators based on patterns in skills/blog-prose/SKILL.md (banned phrases, em-dash frequency, structure checks)
  • [ ] Write test cases in skills/blog-prose/__tests__/exemplars.test.js that assert good examples pass and bad examples fail
  • [ ] Document test setup in README under a new 'Development' section

Create a marketplace metadata validator and linter for .claude-plugin/marketplace.json

The .claude-plugin/marketplace.json file exists but likely has no validation. A new contributor could add a JSON schema file and a simple Node script that validates the marketplace config against Claude Code skill requirements (schema file, required fields, version format, etc.). This prevents accidental misconfigurations when publishing updates.

  • [ ] Create .claude-plugin/marketplace.schema.json defining the required structure for Claude Code skills
  • [ ] Create a linter script at .claude-plugin/validate-marketplace.js that checks marketplace.json against the schema
  • [ ] Add a pre-commit hook instruction or GitHub Actions workflow trigger to run validation (mention in CONTRIBUTING.md if it exists, otherwise create it)
  • [ ] Test with current marketplace.json to ensure it passes

Add a practical skill usage guide with before/after blog post examples

While SKILL.md explains the rules and voice-exemplars.md has isolated examples, there's no end-to-end walkthrough showing how to actually use this skill in Claude Code. A new contributor could create skills/blog-prose/USAGE.md with a real 3–4 paragraph blog post excerpt, before and after, plus step-by-step instructions on how to invoke the skill and what prompt structure works best.

  • [ ] Write skills/blog-prose/USAGE.md with a clear 'How to Use This Skill' section
  • [ ] Include a before/after blog post example (messy AI prose → clean, honest voice) with 3–4 paragraphs each
  • [ ] Add instructions on how to reference this skill in Claude Code (e.g., prompt template, skill invocation syntax)
  • [ ] Link USAGE.md from README.md in a new 'Quick Start' section

Good first issues

  • Add a test-cases.md file with 10–15 real blog post excerpts (both LLM-default and manually rewritten versions) that contributors can use to validate whether SKILL.md rules fire correctly. Include category labels (e.g., 'em-dash chains', 'hype vocabulary', 'checkable claims') for each pair.
  • Expand voice-exemplars.md with 3–5 additional worked examples in different domains (infrastructure, frontend, data science) to show how blog-prose rules apply beyond the caching example. Include annotations explaining which rule fires at each step.
  • Create a CONTRIBUTING.md documenting how to propose new rules or refine existing ones, with a process for testing rule clarity against Claude's outputs and filing observations as issues.

Top contributors

Click to expand

Recent commits

Click to expand
  • 195b497 — blog-prose: add four-level anti-sensationalism pass (§2d) (sjmoran)
  • f074ae9 — blog-prose: add machine-texture rule (§2e) for the tells greps miss (sjmoran)
  • 1fceb3c — blog-prose: add calm, measured register rule (§2d) (sjmoran)
  • 2a53ba1 — Add no-rhetorical-question-scaffolding rule to blog-prose (sjmoran)
  • abe0e7d — blog-prose skill: plain first-person voice, no-hype, no-self-sabotage, checkable claims (sjmoran)

Security observations

Click to expand

This repository represents a Claude Code skill for blog writing style guidance. It is a documentation and configuration package with no runtime code, dependencies, Docker infrastructure, or database interactions. Security risks are minimal. The project follows good practices: MIT license is clearly stated, no credentials or secrets are embedded in visible files, and the structure contains only skill definitions and exemplar documentation. No package managers (npm, pip, etc.) are in use, eliminating dependency supply-chain risks. The only minor recommendations are standard best practices for any open-source project.

LLM-derived; treat as a starting point, not a security audit.

The exported doc (Copy CLAUDE.md / Download / .cursor/rules) also includes an agent protocol and a verification script written for AI coding agents — omitted here to keep this view scannable.

Embed this chat in your README

Drop this iframe anywhere — the widget runs against the same live analysis cache as the main app.

<iframe
  src="https://repopilot.app/embed/sjmoran/claude-blog-prose"
  width="100%" height="500"
  style="border:1px solid #d0d7de; border-radius:8px;"
  allow="microphone"
  loading="lazy"
></iframe>