Night Market Skill — ported from claude-night-market/scribe. For the full experience with agents, hooks, and commands, install the Claude Code plugin.
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.
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.
NeedSkillWhat it addsTerminal demo GIFscry:vhs-recordingRecord a build/test run as an animated GIFBrowser demo GIFscry:browser-recordingCapture a web UI walkthrough via PlaywrightComposite mediascry:media-compositionStitch terminal and browser GIFs side-by-sideProof of claimsimbue:proof-of-workVerify every number in the post with evidenceCode quality narrativepensive:code-refinementDescribe what was cleaned up and whyReview narrativeimbue:structured-reviewCapture review findings as post contentChange summaryimbue:catchupSummarize what changed for the post's "The Work" sectionDiff analysisimbue:diff-analysisRisk-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):
text
Invoke Skill(scry:vhs-recording) with a tape that runs:
make test → shows 180 tests passing
make play → shows the build + server startup
Browser recordings (web apps, rendered output):
text
Invoke Skill(scry:browser-recording) with a Playwright spec that:
navigates to the app
interacts with it
captures the result
Composition (side-by-side before/after, terminal and browser):
text
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:
text
Invoke Skill(imbue:proof-of-work) to:
- Tag each claim with [E1], [E2], etc.
- Run verification commands
- Report PASS / FAIL / BLOCKED
This 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:
Git history: commits since the session started: bash
git log --oneline --since="<session_start>" --stat
File inventory: what was created and changed: bash
git diff --stat <start_commit>..HEAD
Test results: concrete evidence of what works: bash
cargo test # or the project's test command
Metrics: scope and scale: bash
find . -name "*.rs" -not -path "*/target/*" | xargs wc -l
Conversation context: the user's goals, constraints, and decisions made during the session
Every session post answers three questions:
Look for:
Choose format first:
FormatModuleWhenBlog postnarrative-structureDev blog, company blog, personal siteCase studynarrative-structureMarketing, tool demonstrationsSocial threadnarrative-structureTwitter/X, Bluesky, LinkedInReddit postreddit-formatCommunity 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 claimsFor Reddit posts (additional gates):
--- at the end?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 testoutput]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.
docs/posts/ (or specified path)