Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Converts a Claude Code session into a blog post, case study, or Reddit post. Use when publishing dev blog content or community posts from real sessions.
.claude/skills/athola-session-to-post/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 326% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 295% | 0% |
Capture what happened in a Claude Code session and turn it into a blog post, case study, or social media thread that others can learn from.
The skill extracts the real story from git history, file changes, and conversation context, then shapes it into a narrative that shows process, not just results.
r/rust, r/Python, r/ClaudeAI, etc.)
scribe:doc-generator)scribe:tech-tutorial)scribe:slop-detector)sanctum:doc-updates)This skill connects to several others in the ecosystem. Use them when the post needs more than prose.
| Need | Skill | What it adds | |------|-------|-------------| | Terminal demo GIF | scry:vhs-recording | Record a build/test run as an animated GIF | | Browser demo GIF | scry:browser-recording | Capture a web UI walkthrough via Playwright | | Composite media | scry:media-composition | Stitch terminal and browser GIFs side-by-side | | Proof of claims | imbue:proof-of-work | Verify every number in the post with evidence | | Code quality narrative | pensive:code-refinement | Describe what was cleaned up and why | | Review narrative | imbue:structured-review | Capture review findings as post content | | Change summary | imbue:catchup | Summarize what changed for the post's "The Work" section | | Diff analysis | imbue:diff-analysis | Risk-scored change breakdown for technical audiences |
When the post describes something visual (a running app, a test suite, a build pipeline) capture it instead of describing it.
Terminal recordings (build output, test runs, CLI demos):
Invoke Skill(scry:vhs-recording) with a tape that runs:
make test → shows 180 tests passing
make play → shows the build + server startupBrowser recordings (web apps, rendered output):
Invoke Skill(scry:browser-recording) with a Playwright spec that:
navigates to the app
interacts with it
captures the resultComposition (side-by-side before/after, terminal and browser):
Invoke Skill(scry:media-composition) to stitch recordings into
a single visual that tells the story.Place generated GIFs in docs/posts/assets/ and reference them from the markdown with relative paths.
Every claim in the post should be verifiable. Before finalizing:
Invoke Skill(imbue:proof-of-work) to:
- Tag each claim with [E1], [E2], etc.
- Run verification commands
- Report PASS / FAIL / BLOCKEDThis prevents publishing posts with stale numbers or broken examples.
Load the session-extraction module for the full checklist.
Gather raw material from what actually happened:
bash git log --oneline --since="<session_start>" --stat
bash git diff --stat <start_commit>..HEAD
bash cargo test # or the project's test command
bash find . -name "*.rs" -not -path "*/target/*" | xargs wc -l
made during the session
Every session post answers three questions:
Look for:
surprising approach, an impressive result
What worked unexpectedly?
(lines written, tests passing, performance gain, time saved)
Choose format first:
| Format | Module | When | |--------|--------|------| | Blog post | narrative-structure | Dev blog, company blog, personal site | | Case study | narrative-structure | Marketing, tool demonstrations | | Social thread | narrative-structure | Twitter/X, Bluesky, LinkedIn | | Reddit post | reddit-format | Community engagement, r/programming etc. |
For Reddit: load modules/reddit-format.md instead of the blog template below. The structure, tone, and quality gate differ.
Load the narrative-structure module for blog/case-study templates.
Blog post structure (adapt to content):
markdown# Title: [Verb] + [What] + [With What] ## Opening (2-3 sentences) What we set out to do and why. No throat-clearing. ## Starting Point Where things stood before. Concrete: file counts, code state, what worked and what didn't. ## The Work Key phases. Focus on decisions and pivots, not keystrokes. - Phase 1: [what and why] - Phase 2: [what and why] Include GIFs from scry recordings where visual. ## How We Tested It What verification looked like. Show the test run, the proof-of-work evidence. Include terminal recording GIF of tests passing. ## Results Hard numbers. Before/after. What works now. Screenshots or browser recording GIF if visual. ## What's Next Honest remaining work. No false completeness.
Tone:
For blog posts and case studies:
Skill(scribe:slop-detector) on the draftSkill(imbue:proof-of-work) on all claimssomething specific?
For Reddit posts (additional gates):
--- at the end?first two sentences?
norms? Check the subreddit's top posts of the month.
material ready to post as a follow-up comment?
absent (or replaced with bold inline labels)?
Write the post to the requested location (default: docs/posts/).
Report:
A session that ported a Quake 2 engine from C to Rust:
> Title: Rewriting a Quake 2 Engine in Rust with Claude Code > > Opening: We took a 150,000-line C game engine and started > rewriting it in Rust targeting WebAssembly. In one session we went > from an empty workspace to a prototype loading real game data in > the browser. > > Starting point: A Yamagi Quake II fork compiled with Emscripten. > Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and > matchbox for P2P multiplayer. > > The work: Seven parallel agents built subsystems (collision, > movement, filesystem, networking, renderer, server, client) while > the main session coordinated integration. A Makefile with > prerequisite checks automated the full build-to-browser pipeline > including game data download. > > How we tested: 180 unit tests across 13 crates. BSP loading > verified against real Quake 2 demo pak0.pak. Browser diagnostics > logged every init step. Terminal GIF: make test output] > > Results: 10,950 lines of Rust, 180 tests, real game data > loading and flat-shaded BSP rendering in the browser with WASD > movement and mouse look. > > What's next: Textured rendering, collision debugging, sound, > menus, multiplayer.
Every claim is checkable: line counts from wc -l, test counts from cargo test, file counts from filesystem log output.
context
docs/posts/ (or specified path)tagged with evidence references
target subreddit identified, first comment drafted
dropped
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 5,440 | 6,559 | +21% | 1 | 1 | 0% | 237 | 2,751 | +1061% | 0 | 0 | — |
case-19 | fail→pass | 12,433 | 2,092 | -83% | 1 | 1 | 0% | 1,822 | 2,694 | +48% | 0 | 0 | — |
case-02 | pass→fail | 17,282 | 5,637 | -67% | 1 | 1 | 0% | 2,741 | 2,687 | -2% | 0 | 0 | — |
case-03 | fail→fail | 6,726 | 6,304 | -6% | 1 | 1 | 0% | 316 | 2,689 | +751% | 0 | 0 | — |
case-04 | fail→pass | 12,099 | 4,486 | -63% | 1 | 1 | 0% | 2,387 | 3,116 | +31% | 0 | 0 | — |
case-05 | fail→pass | 17,398 | 6,891 | -60% | 1 | 1 | 0% | 3,390 | 3,494 | +3% | 0 | 0 | — |
case-06 | fail→pass | 5,049 | 4,439 | -12% | 1 | 1 | 0% | 728 | 3,103 | +326% | 0 | 0 | — |
case-07 | fail→pass | 4,361 | 3,834 | -12% | 1 | 1 | 0% | 756 | 2,989 | +295% | 0 | 0 | — |
case-08 | fail→fail | 3,868 | 3,701 | -4% | 1 | 1 | 0% | 624 | 2,899 | +365% | 0 | 0 | — |
case-09 | fail→pass | 15,022 | 4,475 | -70% | 1 | 1 | 0% | 2,231 | 3,183 | +43% | 0 | 0 | — |
case-10 | fail→pass | 9,861 | 2,782 | -72% | 1 | 1 | 0% | 1,512 | 2,865 | +89% | 0 | 0 | — |
case-11 | fail→pass | 9,836 | 2,162 | -78% | 1 | 1 | 0% | 1,519 | 2,646 | +74% | 0 | 0 | — |
case-12 | fail→pass | 7,554 | 2,315 | -69% | 1 | 1 | 0% | 1,113 | 2,717 | +144% | 0 | 0 | — |
case-13 | fail→pass | 9,042 | 2,014 | -78% | 1 | 1 | 0% | 1,478 | 2,716 | +84% | 0 | 0 | — |
case-14 | fail→pass | 12,187 | 2,389 | -80% | 1 | 1 | 0% | 1,903 | 2,777 | +46% | 0 | 0 | — |
case-20 | pass→pass | 11,802 | 2,256 | -81% | 1 | 1 | 0% | 1,729 | 2,736 | +58% | 0 | 0 | — |
case-15 | fail→pass | 10,078 | 5,871 | -42% | 1 | 1 | 0% | 1,455 | 3,231 | +122% | 0 | 0 | — |
case-16 | fail→pass | 11,744 | 5,612 | -52% | 1 | 1 | 0% | 1,743 | 3,170 | +82% | 0 | 0 | — |
case-17 | fail→pass | 9,045 | 1,582 | -83% | 1 | 1 | 0% | 1,220 | 2,610 | +114% | 0 | 0 | — |
case-18 | pass→pass | 4,944 | 1,677 | -66% | 1 | 1 | 0% | 762 | 2,633 | +246% | 0 | 0 | — |
case-21 | pass→pass | 10,932 | 5,801 | -47% | 1 | 1 | 0% | 1,646 | 3,259 | +98% | 0 | 0 | — |
case-22 | fail→pass | 12,546 | 3,786 | -70% | 1 | 1 | 0% | 1,975 | 3,037 | +54% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.