{"id":"d1866851-d57a-4093-8ce7-17f504c92c82","entityType":"agent","slug":"clawhub-athola-nm-scribe-session-to-post","name":"session-to-post","canonicalUrl":"https://www.xpersona.co/agent/clawhub-athola-nm-scribe-session-to-post","canonicalPath":"/agent/clawhub-athola-nm-scribe-session-to-post","generatedAt":"2026-10-10T10:53:48.579Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":null},"description":"Converts a Claude Code session into a blog post, case study, or Reddit post Skill: session-to-post Owner: athola Summary: Converts a Claude Code session into a blog post, case study, or Reddit post Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:54.947Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:51.213Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:39.686Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:20.539Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:03","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.7K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scribe-session-to-post","sourceUrl":"https://clawhub.ai/athola/nm-scribe-session-to-post","homepage":"https://clawhub.ai/athola/skills/nm-scribe-session-to-post","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/athola/nm-scribe-session-to-post","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/athola/skills/nm-scribe-session-to-post","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Converts a Claude Code session into a blog post, case study, or Reddit post Skill: session-to-post Owner: athola Summary: Converts a Claude Code session into a "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":null},"stars":null,"forks":null,"downloads":1653,"packageName":null,"latestVersion":"1.9.19","tractionLabel":"1.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T05:30:01.150Z","lastCrawledAt":"2026-10-10T05:30:01.150Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T05:30:01.150Z","lastVerifiedAt":null,"highlights":[{"version":"1.9.19","createdAt":"2026-08-26T13:21:54.947Z","changelog":"Release v1.9.19","fileCount":6,"zipByteSize":11809},{"version":"1.9.17","createdAt":"2026-07-30T05:41:51.213Z","changelog":"Release v1.9.17","fileCount":6,"zipByteSize":11707},{"version":"1.9.16","createdAt":"2026-07-14T19:58:39.686Z","changelog":"Release v1.9.16","fileCount":6,"zipByteSize":11765},{"version":"1.9.14","createdAt":"2026-06-30T18:06:20.539Z","changelog":"Release v1.9.14","fileCount":6,"zipByteSize":11769},{"version":"1.9.13","createdAt":"2026-06-27T16:24:03.924Z","changelog":"Release v1.9.13","fileCount":6,"zipByteSize":11825},{"version":"1.9.12","createdAt":"2026-06-19T03:19:44.350Z","changelog":"Release v1.9.12","fileCount":6,"zipByteSize":11813},{"version":"1.0.2","createdAt":"2026-05-09T02:20:22.766Z","changelog":"Release v1.9.5","fileCount":5,"zipByteSize":8859},{"version":"1.0.1","createdAt":"2026-05-06T14:21:51.229Z","changelog":"Release v1.9.4","fileCount":4,"zipByteSize":7670}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scribe-session-to-post","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:53:48.573Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-to-post/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":null},"readme":"Skill: session-to-post\n\nOwner: athola\n\nSummary: Converts a Claude Code session into a blog post, case study, or Reddit post\n\nTags: latest:1.9.19\n\nVersion history:\n\nv1.9.19 | 2026-08-26T13:21:54.947Z | user\n\nRelease v1.9.19\n\nv1.9.17 | 2026-07-30T05:41:51.213Z | user\n\nRelease v1.9.17\n\nv1.9.16 | 2026-07-14T19:58:39.686Z | user\n\nRelease v1.9.16\n\nv1.9.14 | 2026-06-30T18:06:20.539Z | user\n\nRelease v1.9.14\n\nv1.9.13 | 2026-06-27T16:24:03.924Z | user\n\nRelease v1.9.13\n\nv1.9.12 | 2026-06-19T03:19:44.350Z | user\n\nRelease v1.9.12\n\nv1.0.2 | 2026-05-09T02:20:22.766Z | user\n\nRelease v1.9.5\n\nv1.0.1 | 2026-05-06T14:21:51.229Z | user\n\nRelease v1.9.4\n\nv1.0.0 | 2026-04-20T14:01:47.725Z | auto\n\nInitial release: skill to turn Claude Code sessions into shareable blog posts or case studies.\n\n- Converts git history, file changes, and session context into narrative blog posts or case studies.\n- Integrates with other skills for demo recordings, change summaries, proof of work, and code review narratives.\n- Provides clear methodology: context extraction, identifying the story, drafting, quality checks, and output steps.\n- Includes templates and best practices for writing engaging, honest, and verifiable technical posts.\n- Outputs posts to Markdown, with support for embedded media and evidence-backed claims.\n\nArchive index:\n\nArchive v1.9.19: 6 files, 11809 bytes\n\nFiles: modules/narrative-structure.md (3586b), modules/reddit-format.md (3892b), modules/session-extraction.md (2434b), skill-card.md (2140b), SKILL.md (10151b), _meta.json (145b)\n\nFile v1.9.19:SKILL.md\n\n---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal and browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history**: commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory**: what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results**: concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics**: scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context**: the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?**: the goal, not the task list\n2. **What did we actually do?**: the real path, including pivots\n3. **What came out of it?**: concrete, measurable results\n\nLook for:\n- **The hook**: what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points**: where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number**: one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\n**Choose format first:**\n\n| Format | Module | When |\n|--------|--------|------|\n| Blog post | `narrative-structure` | Dev blog, company blog, personal site |\n| Case study | `narrative-structure` | Marketing, tool demonstrations |\n| Social thread | `narrative-structure` | Twitter/X, Bluesky, LinkedIn |\n| Reddit post | `reddit-format` | Community engagement, r/programming etc. |\n\nFor Reddit: load `modules/reddit-format.md` instead of the blog\ntemplate below. The structure, tone, and quality gate differ.\n\nLoad the `narrative-structure` module for blog/case-study templates.\n\n**Blog post structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard numbers. Before/after. What works now.\nScreenshots or browser recording GIF if visual.\n\n## What's Next\nHonest remaining work. No false completeness.\n```\n\n**Tone**:\n- Write like explaining to a colleague over coffee\n- Specifics over adjectives (\"180 tests\" not \"comprehensive suite\")\n- Show the mess: readers connect with pivots and debugging\n- Credit the tools and techniques that made it work\n- Under 1500 words unless the content demands more\n\n### Step 4: Quality Gate\n\n**For blog posts and case studies:**\n1. **Slop check**: `Skill(scribe:slop-detector)` on the draft\n2. **Proof-of-work**: `Skill(imbue:proof-of-work)` on all claims\n3. **Recording check**: does any section need a GIF?\n4. **Title test**: would you click this? Does it promise\n   something specific?\n5. **Opening test**: does paragraph one say what the post is about?\n\n**For Reddit posts (additional gates):**\n1. **TL;DR present**: is it after `---` at the end?\n2. **Lede not buried**: is the most interesting thing in the\n   first two sentences?\n3. **Subreddit fit**: does the content match the target subreddit's\n   norms? Check the subreddit's top posts of the month.\n4. **First comment drafted**: are the repo link and any reference\n   material ready to post as a follow-up comment?\n5. **Header count**: if the post is under 600 words, are headers\n   absent (or replaced with bold inline labels)?\n\n### Step 5: Output\n\nWrite the post to the requested location (default:\n`docs/posts/`).\n\nReport:\n- Format used (blog post / case study / Reddit post)\n- Word count\n- Slop score (blog/case-study only)\n- Verifiable claims count\n- Recordings generated (if any)\n- For Reddit: target subreddit and first-comment content\n\n## Example\n\nA session that ported a Quake 2 engine from C to Rust:\n\n> **Title**: Rewriting a Quake 2 Engine in Rust with Claude Code\n>\n> **Opening**: We took a 150,000-line C game engine and started\n> rewriting it in Rust targeting WebAssembly. In one session we went\n> from an empty workspace to a prototype loading real game data in\n> the browser.\n>\n> **Starting point**: A Yamagi Quake II fork compiled with Emscripten.\n> Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and\n> matchbox for P2P multiplayer.\n>\n> **The work**: Seven parallel agents built subsystems (collision,\n> movement, filesystem, networking, renderer, server, client) while\n> the main session coordinated integration. A Makefile with\n> prerequisite checks automated the full build-to-browser pipeline\n> including game data download.\n>\n> **How we tested**: 180 unit tests across 13 crates. BSP loading\n> verified against real Quake 2 demo pak0.pak. Browser diagnostics\n> logged every init step. [Terminal GIF: `make test` output]\n>\n> **Results**: 10,950 lines of Rust, 180 tests, real game data\n> loading and flat-shaded BSP rendering in the browser with WASD\n> movement and mouse look.\n>\n> **What's next**: Textured rendering, collision debugging, sound,\n> menus, multiplayer.\n\nEvery claim is checkable: line counts from `wc -l`, test counts\nfrom `cargo test`, file counts from filesystem log output.\n\n## Exit Criteria\n\n- [ ] Format selected (blog post, case study, or Reddit post)\n- [ ] Session brief compiled from git history and conversation\n  context\n- [ ] Draft written to `docs/posts/` (or specified path)\n- [ ] For blog/case-study: slop score reported, all claims\n  tagged with evidence references\n- [ ] For Reddit: TL;DR present, lede in first two sentences,\n  target subreddit identified, first comment drafted\n- [ ] Word count and verifiable claim count reported\n- [ ] Incomplete or unverifiable claims are flagged, not silently\n  dropped\n\nFile v1.9.19:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750514947\n}\n\nFile v1.9.19:modules/narrative-structure.md\n\n---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Parallel Agents\"\n- `[Number] [Things] I Learned [Doing X]`\n  e.g. \"5 Things I Learned Rewriting C as Rust for WebAssembly\"\n- `From [State A] to [State B]: [How]`\n  e.g. \"From Empty Repo to Playable Game: A Claude Code Session\"\n\n## Anti-Patterns\n\n- \"In this blog post, we will explore...\": skip the preamble\n- \"It's worth noting that...\": if it's worth noting, just note it\n- Listing every file changed: nobody cares about the full diff\n- Explaining things the audience already knows\n- Screenshots of code when a link to the repo would do\n- Claiming something works without showing evidence\n\nFile v1.9.19:modules/reddit-format.md\n\n---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if longer, reconsider\n   whether a blog post is the better medium\n6. **Conversational close**: \"happy to answer questions about X\n   in the comments\" gives readers a reason to engage\n\n## Anti-Patterns\n\n- Copy-pasting your blog post: the tone is wrong and readers notice\n- Burying the lede: starting with context before the interesting part\n- Screenshot of code instead of a fenced code block\n- No TL;DR on anything over 300 words\n- \"In conclusion...\": just end the post\n- Excessive bold/italic throughout: signals AI-generated content\n\n## First Comment Strategy\n\nFor technical posts, plan a follow-up comment before posting.\nUse it for:\n- Full code links (repo URL, Gist)\n- Setup instructions that would bloat the post body\n- Benchmarks or test output that are reference material, not story\n\nWrite this comment in the quality gate step and post it\nimmediately after the main post goes live.\n\nFile v1.9.19:modules/session-extraction.md\n\n---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```\n\nFile v1.9.19:skill-card.md\n\n## Description:\n\nConverts a Claude Code session into a blog post, case study, or Reddit post.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineering teams use this skill after a meaningful coding session to gather session evidence and draft a blog post, case study, social thread, or Reddit post with concrete claims and review steps.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated posts may expose private codebase details, internal decisions, customer or personal data, unreleased roadmap items, URLs, metrics, or conversation excerpts.\n\nMitigation: Review and redact drafts before sharing them outside the intended audience.\n\nRisk: Session narratives can include stale or unverifiable claims if metrics, test output, or results are copied without checking.\n\nMitigation: Use the skill's proof-of-work and quality-gate steps to verify concrete claims before publication.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-to-post)\n- [OpenClaw homepage from metadata](https://github.com/athola/claude-night-market/tree/master/plugins/scribe)\n- [Session extraction module](modules/session-extraction.md)\n- [Narrative structure module](modules/narrative-structure.md)\n- [Reddit format module](modules/reddit-format.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance]\n\n**Output Format:** [Markdown drafts, structured briefs, quality-gate guidance, and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May recommend generated GIFs or proof-of-work evidence when visual demos or claim verification are relevant.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.9.17: 6 files, 11707 bytes\n\nFiles: modules/narrative-structure.md (3586b), modules/reddit-format.md (3892b), modules/session-extraction.md (2434b), skill-card.md (1951b), SKILL.md (10151b), _meta.json (145b)\n\nFile v1.9.17:SKILL.md\n\n---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal and browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history**: commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory**: what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results**: concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics**: scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context**: the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?**: the goal, not the task list\n2. **What did we actually do?**: the real path, including pivots\n3. **What came out of it?**: concrete, measurable results\n\nLook for:\n- **The hook**: what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points**: where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number**: one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\n**Choose format first:**\n\n| Format | Module | When |\n|--------|--------|------|\n| Blog post | `narrative-structure` | Dev blog, company blog, personal site |\n| Case study | `narrative-structure` | Marketing, tool demonstrations |\n| Social thread | `narrative-structure` | Twitter/X, Bluesky, LinkedIn |\n| Reddit post | `reddit-format` | Community engagement, r/programming etc. |\n\nFor Reddit: load `modules/reddit-format.md` instead of the blog\ntemplate below. The structure, tone, and quality gate differ.\n\nLoad the `narrative-structure` module for blog/case-study templates.\n\n**Blog post structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard numbers. Before/after. What works now.\nScreenshots or browser recording GIF if visual.\n\n## What's Next\nHonest remaining work. No false completeness.\n```\n\n**Tone**:\n- Write like explaining to a colleague over coffee\n- Specifics over adjectives (\"180 tests\" not \"comprehensive suite\")\n- Show the mess: readers connect with pivots and debugging\n- Credit the tools and techniques that made it work\n- Under 1500 words unless the content demands more\n\n### Step 4: Quality Gate\n\n**For blog posts and case studies:**\n1. **Slop check**: `Skill(scribe:slop-detector)` on the draft\n2. **Proof-of-work**: `Skill(imbue:proof-of-work)` on all claims\n3. **Recording check**: does any section need a GIF?\n4. **Title test**: would you click this? Does it promise\n   something specific?\n5. **Opening test**: does paragraph one say what the post is about?\n\n**For Reddit posts (additional gates):**\n1. **TL;DR present**: is it after `---` at the end?\n2. **Lede not buried**: is the most interesting thing in the\n   first two sentences?\n3. **Subreddit fit**: does the content match the target subreddit's\n   norms? Check the subreddit's top posts of the month.\n4. **First comment drafted**: are the repo link and any reference\n   material ready to post as a follow-up comment?\n5. **Header count**: if the post is under 600 words, are headers\n   absent (or replaced with bold inline labels)?\n\n### Step 5: Output\n\nWrite the post to the requested location (default:\n`docs/posts/`).\n\nReport:\n- Format used (blog post / case study / Reddit post)\n- Word count\n- Slop score (blog/case-study only)\n- Verifiable claims count\n- Recordings generated (if any)\n- For Reddit: target subreddit and first-comment content\n\n## Example\n\nA session that ported a Quake 2 engine from C to Rust:\n\n> **Title**: Rewriting a Quake 2 Engine in Rust with Claude Code\n>\n> **Opening**: We took a 150,000-line C game engine and started\n> rewriting it in Rust targeting WebAssembly. In one session we went\n> from an empty workspace to a prototype loading real game data in\n> the browser.\n>\n> **Starting point**: A Yamagi Quake II fork compiled with Emscripten.\n> Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and\n> matchbox for P2P multiplayer.\n>\n> **The work**: Seven parallel agents built subsystems (collision,\n> movement, filesystem, networking, renderer, server, client) while\n> the main session coordinated integration. A Makefile with\n> prerequisite checks automated the full build-to-browser pipeline\n> including game data download.\n>\n> **How we tested**: 180 unit tests across 13 crates. BSP loading\n> verified against real Quake 2 demo pak0.pak. Browser diagnostics\n> logged every init step. [Terminal GIF: `make test` output]\n>\n> **Results**: 10,950 lines of Rust, 180 tests, real game data\n> loading and flat-shaded BSP rendering in the browser with WASD\n> movement and mouse look.\n>\n> **What's next**: Textured rendering, collision debugging, sound,\n> menus, multiplayer.\n\nEvery claim is checkable: line counts from `wc -l`, test counts\nfrom `cargo test`, file counts from filesystem log output.\n\n## Exit Criteria\n\n- [ ] Format selected (blog post, case study, or Reddit post)\n- [ ] Session brief compiled from git history and conversation\n  context\n- [ ] Draft written to `docs/posts/` (or specified path)\n- [ ] For blog/case-study: slop score reported, all claims\n  tagged with evidence references\n- [ ] For Reddit: TL;DR present, lede in first two sentences,\n  target subreddit identified, first comment drafted\n- [ ] Word count and verifiable claim count reported\n- [ ] Incomplete or unverifiable claims are flagged, not silently\n  dropped\n\nFile v1.9.17:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.17\",\n  \"publishedAt\": 1785390111213\n}\n\nFile v1.9.17:modules/narrative-structure.md\n\n---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Parallel Agents\"\n- `[Number] [Things] I Learned [Doing X]`\n  e.g. \"5 Things I Learned Rewriting C as Rust for WebAssembly\"\n- `From [State A] to [State B]: [How]`\n  e.g. \"From Empty Repo to Playable Game: A Claude Code Session\"\n\n## Anti-Patterns\n\n- \"In this blog post, we will explore...\": skip the preamble\n- \"It's worth noting that...\": if it's worth noting, just note it\n- Listing every file changed: nobody cares about the full diff\n- Explaining things the audience already knows\n- Screenshots of code when a link to the repo would do\n- Claiming something works without showing evidence\n\nFile v1.9.17:modules/reddit-format.md\n\n---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if longer, reconsider\n   whether a blog post is the better medium\n6. **Conversational close**: \"happy to answer questions about X\n   in the comments\" gives readers a reason to engage\n\n## Anti-Patterns\n\n- Copy-pasting your blog post: the tone is wrong and readers notice\n- Burying the lede: starting with context before the interesting part\n- Screenshot of code instead of a fenced code block\n- No TL;DR on anything over 300 words\n- \"In conclusion...\": just end the post\n- Excessive bold/italic throughout: signals AI-generated content\n\n## First Comment Strategy\n\nFor technical posts, plan a follow-up comment before posting.\nUse it for:\n- Full code links (repo URL, Gist)\n- Setup instructions that would bloat the post body\n- Benchmarks or test output that are reference material, not story\n\nWrite this comment in the quality gate step and post it\nimmediately after the main post goes live.\n\nFile v1.9.17:modules/session-extraction.md\n\n---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```\n\nFile v1.9.17:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session into a blog post, case study, or Reddit post. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineering teams use this skill after a completed Claude Code session to turn real work into publishable blog posts, case studies, social threads, or Reddit posts grounded in session evidence. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generated posts may expose private implementation details, unreleased plans, repository links, or claims that have not been verified. <br>\nMitigation: Review the draft before publication and remove sensitive details, private links, and unsupported claims; use the skill's proof-of-work guidance for claims that need evidence. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-to-post) <br>\n- [Project homepage from metadata](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Text, Shell commands, Guidance] <br>\n**Output Format:** [Markdown prose with optional shell command examples and publishing checklists] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include suggested post format, word count, verification notes, recording references, and first-comment content for Reddit posts.] <br>\n\n## Skill Version(s): <br>\n1.9.17 (source: server release metadata; artifact frontmatter says 1.9.8) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.16: 6 files, 11765 bytes\n\nFiles: modules/narrative-structure.md (3586b), modules/reddit-format.md (3892b), modules/session-extraction.md (2434b), skill-card.md (2296b), SKILL.md (10151b), _meta.json (145b)\n\nFile v1.9.16:SKILL.md\n\n---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal and browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history**: commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory**: what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results**: concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics**: scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context**: the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?**: the goal, not the task list\n2. **What did we actually do?**: the real path, including pivots\n3. **What came out of it?**: concrete, measurable results\n\nLook for:\n- **The hook**: what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points**: where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number**: one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\n**Choose format first:**\n\n| Format | Module | When |\n|--------|--------|------|\n| Blog post | `narrative-structure` | Dev blog, company blog, personal site |\n| Case study | `narrative-structure` | Marketing, tool demonstrations |\n| Social thread | `narrative-structure` | Twitter/X, Bluesky, LinkedIn |\n| Reddit post | `reddit-format` | Community engagement, r/programming etc. |\n\nFor Reddit: load `modules/reddit-format.md` instead of the blog\ntemplate below. The structure, tone, and quality gate differ.\n\nLoad the `narrative-structure` module for blog/case-study templates.\n\n**Blog post structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard numbers. Before/after. What works now.\nScreenshots or browser recording GIF if visual.\n\n## What's Next\nHonest remaining work. No false completeness.\n```\n\n**Tone**:\n- Write like explaining to a colleague over coffee\n- Specifics over adjectives (\"180 tests\" not \"comprehensive suite\")\n- Show the mess: readers connect with pivots and debugging\n- Credit the tools and techniques that made it work\n- Under 1500 words unless the content demands more\n\n### Step 4: Quality Gate\n\n**For blog posts and case studies:**\n1. **Slop check**: `Skill(scribe:slop-detector)` on the draft\n2. **Proof-of-work**: `Skill(imbue:proof-of-work)` on all claims\n3. **Recording check**: does any section need a GIF?\n4. **Title test**: would you click this? Does it promise\n   something specific?\n5. **Opening test**: does paragraph one say what the post is about?\n\n**For Reddit posts (additional gates):**\n1. **TL;DR present**: is it after `---` at the end?\n2. **Lede not buried**: is the most interesting thing in the\n   first two sentences?\n3. **Subreddit fit**: does the content match the target subreddit's\n   norms? Check the subreddit's top posts of the month.\n4. **First comment drafted**: are the repo link and any reference\n   material ready to post as a follow-up comment?\n5. **Header count**: if the post is under 600 words, are headers\n   absent (or replaced with bold inline labels)?\n\n### Step 5: Output\n\nWrite the post to the requested location (default:\n`docs/posts/`).\n\nReport:\n- Format used (blog post / case study / Reddit post)\n- Word count\n- Slop score (blog/case-study only)\n- Verifiable claims count\n- Recordings generated (if any)\n- For Reddit: target subreddit and first-comment content\n\n## Example\n\nA session that ported a Quake 2 engine from C to Rust:\n\n> **Title**: Rewriting a Quake 2 Engine in Rust with Claude Code\n>\n> **Opening**: We took a 150,000-line C game engine and started\n> rewriting it in Rust targeting WebAssembly. In one session we went\n> from an empty workspace to a prototype loading real game data in\n> the browser.\n>\n> **Starting point**: A Yamagi Quake II fork compiled with Emscripten.\n> Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and\n> matchbox for P2P multiplayer.\n>\n> **The work**: Seven parallel agents built subsystems (collision,\n> movement, filesystem, networking, renderer, server, client) while\n> the main session coordinated integration. A Makefile with\n> prerequisite checks automated the full build-to-browser pipeline\n> including game data download.\n>\n> **How we tested**: 180 unit tests across 13 crates. BSP loading\n> verified against real Quake 2 demo pak0.pak. Browser diagnostics\n> logged every init step. [Terminal GIF: `make test` output]\n>\n> **Results**: 10,950 lines of Rust, 180 tests, real game data\n> loading and flat-shaded BSP rendering in the browser with WASD\n> movement and mouse look.\n>\n> **What's next**: Textured rendering, collision debugging, sound,\n> menus, multiplayer.\n\nEvery claim is checkable: line counts from `wc -l`, test counts\nfrom `cargo test`, file counts from filesystem log output.\n\n## Exit Criteria\n\n- [ ] Format selected (blog post, case study, or Reddit post)\n- [ ] Session brief compiled from git history and conversation\n  context\n- [ ] Draft written to `docs/posts/` (or specified path)\n- [ ] For blog/case-study: slop score reported, all claims\n  tagged with evidence references\n- [ ] For Reddit: TL;DR present, lede in first two sentences,\n  target subreddit identified, first comment drafted\n- [ ] Word count and verifiable claim count reported\n- [ ] Incomplete or unverifiable claims are flagged, not silently\n  dropped\n\nFile v1.9.16:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.16\",\n  \"publishedAt\": 1784059119686\n}\n\nFile v1.9.16:modules/narrative-structure.md\n\n---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Parallel Agents\"\n- `[Number] [Things] I Learned [Doing X]`\n  e.g. \"5 Things I Learned Rewriting C as Rust for WebAssembly\"\n- `From [State A] to [State B]: [How]`\n  e.g. \"From Empty Repo to Playable Game: A Claude Code Session\"\n\n## Anti-Patterns\n\n- \"In this blog post, we will explore...\": skip the preamble\n- \"It's worth noting that...\": if it's worth noting, just note it\n- Listing every file changed: nobody cares about the full diff\n- Explaining things the audience already knows\n- Screenshots of code when a link to the repo would do\n- Claiming something works without showing evidence\n\nFile v1.9.16:modules/reddit-format.md\n\n---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if longer, reconsider\n   whether a blog post is the better medium\n6. **Conversational close**: \"happy to answer questions about X\n   in the comments\" gives readers a reason to engage\n\n## Anti-Patterns\n\n- Copy-pasting your blog post: the tone is wrong and readers notice\n- Burying the lede: starting with context before the interesting part\n- Screenshot of code instead of a fenced code block\n- No TL;DR on anything over 300 words\n- \"In conclusion...\": just end the post\n- Excessive bold/italic throughout: signals AI-generated content\n\n## First Comment Strategy\n\nFor technical posts, plan a follow-up comment before posting.\nUse it for:\n- Full code links (repo URL, Gist)\n- Setup instructions that would bloat the post body\n- Benchmarks or test output that are reference material, not story\n\nWrite this comment in the quality gate step and post it\nimmediately after the main post goes live.\n\nFile v1.9.16:modules/session-extraction.md\n\n---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```\n\nFile v1.9.16:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session into a blog post, case study, or Reddit post. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineering teams use this skill to turn completed Claude Code coding sessions into publishable blog posts, case studies, social threads, or Reddit posts grounded in git history, file changes, test results, and conversation context. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Session context, git history, or changed files may contain secrets, private customer data, or internal details that should not be published. <br>\nMitigation: Review the source session material before drafting and remove sensitive details from any generated post. <br>\nRisk: Generated drafts may be written under docs/posts/ and could be committed or published before review. <br>\nMitigation: Review every generated file under docs/posts/ before committing, sharing, or publishing it. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill listing](https://clawhub.ai/athola/skills/nm-scribe-session-to-post) <br>\n- [Homepage metadata: claude-night-market scribe plugin](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n- [Artifact documentation: session extraction](artifact/modules/session-extraction.md) <br>\n- [Artifact documentation: narrative structure](artifact/modules/narrative-structure.md) <br>\n- [Artifact documentation: Reddit format](artifact/modules/reddit-format.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [markdown, guidance, shell commands] <br>\n**Output Format:** [Markdown with inline shell command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May write publishable draft files under docs/posts/ when requested.] <br>\n\n## Skill Version(s): <br>\n1.9.16 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.14: 6 files, 11769 bytes\n\nFiles: modules/narrative-structure.md (3586b), modules/reddit-format.md (3892b), modules/session-extraction.md (2434b), skill-card.md (2116b), SKILL.md (10151b), _meta.json (145b)\n\nFile v1.9.14:SKILL.md\n\n---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal and browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history**: commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory**: what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results**: concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics**: scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context**: the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?**: the goal, not the task list\n2. **What did we actually do?**: the real path, including pivots\n3. **What came out of it?**: concrete, measurable results\n\nLook for:\n- **The hook**: what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points**: where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number**: one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\n**Choose format first:**\n\n| Format | Module | When |\n|--------|--------|------|\n| Blog post | `narrative-structure` | Dev blog, company blog, personal site |\n| Case study | `narrative-structure` | Marketing, tool demonstrations |\n| Social thread | `narrative-structure` | Twitter/X, Bluesky, LinkedIn |\n| Reddit post | `reddit-format` | Community engagement, r/programming etc. |\n\nFor Reddit: load `modules/reddit-format.md` instead of the blog\ntemplate below. The structure, tone, and quality gate differ.\n\nLoad the `narrative-structure` module for blog/case-study templates.\n\n**Blog post structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard numbers. Before/after. What works now.\nScreenshots or browser recording GIF if visual.\n\n## What's Next\nHonest remaining work. No false completeness.\n```\n\n**Tone**:\n- Write like explaining to a colleague over coffee\n- Specifics over adjectives (\"180 tests\" not \"comprehensive suite\")\n- Show the mess: readers connect with pivots and debugging\n- Credit the tools and techniques that made it work\n- Under 1500 words unless the content demands more\n\n### Step 4: Quality Gate\n\n**For blog posts and case studies:**\n1. **Slop check**: `Skill(scribe:slop-detector)` on the draft\n2. **Proof-of-work**: `Skill(imbue:proof-of-work)` on all claims\n3. **Recording check**: does any section need a GIF?\n4. **Title test**: would you click this? Does it promise\n   something specific?\n5. **Opening test**: does paragraph one say what the post is about?\n\n**For Reddit posts (additional gates):**\n1. **TL;DR present**: is it after `---` at the end?\n2. **Lede not buried**: is the most interesting thing in the\n   first two sentences?\n3. **Subreddit fit**: does the content match the target subreddit's\n   norms? Check the subreddit's top posts of the month.\n4. **First comment drafted**: are the repo link and any reference\n   material ready to post as a follow-up comment?\n5. **Header count**: if the post is under 600 words, are headers\n   absent (or replaced with bold inline labels)?\n\n### Step 5: Output\n\nWrite the post to the requested location (default:\n`docs/posts/`).\n\nReport:\n- Format used (blog post / case study / Reddit post)\n- Word count\n- Slop score (blog/case-study only)\n- Verifiable claims count\n- Recordings generated (if any)\n- For Reddit: target subreddit and first-comment content\n\n## Example\n\nA session that ported a Quake 2 engine from C to Rust:\n\n> **Title**: Rewriting a Quake 2 Engine in Rust with Claude Code\n>\n> **Opening**: We took a 150,000-line C game engine and started\n> rewriting it in Rust targeting WebAssembly. In one session we went\n> from an empty workspace to a prototype loading real game data in\n> the browser.\n>\n> **Starting point**: A Yamagi Quake II fork compiled with Emscripten.\n> Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and\n> matchbox for P2P multiplayer.\n>\n> **The work**: Seven parallel agents built subsystems (collision,\n> movement, filesystem, networking, renderer, server, client) while\n> the main session coordinated integration. A Makefile with\n> prerequisite checks automated the full build-to-browser pipeline\n> including game data download.\n>\n> **How we tested**: 180 unit tests across 13 crates. BSP loading\n> verified against real Quake 2 demo pak0.pak. Browser diagnostics\n> logged every init step. [Terminal GIF: `make test` output]\n>\n> **Results**: 10,950 lines of Rust, 180 tests, real game data\n> loading and flat-shaded BSP rendering in the browser with WASD\n> movement and mouse look.\n>\n> **What's next**: Textured rendering, collision debugging, sound,\n> menus, multiplayer.\n\nEvery claim is checkable: line counts from `wc -l`, test counts\nfrom `cargo test`, file counts from filesystem log output.\n\n## Exit Criteria\n\n- [ ] Format selected (blog post, case study, or Reddit post)\n- [ ] Session brief compiled from git history and conversation\n  context\n- [ ] Draft written to `docs/posts/` (or specified path)\n- [ ] For blog/case-study: slop score reported, all claims\n  tagged with evidence references\n- [ ] For Reddit: TL;DR present, lede in first two sentences,\n  target subreddit identified, first comment drafted\n- [ ] Word count and verifiable claim count reported\n- [ ] Incomplete or unverifiable claims are flagged, not silently\n  dropped\n\nFile v1.9.14:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.14\",\n  \"publishedAt\": 1782842780539\n}\n\nFile v1.9.14:modules/narrative-structure.md\n\n---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Parallel Agents\"\n- `[Number] [Things] I Learned [Doing X]`\n  e.g. \"5 Things I Learned Rewriting C as Rust for WebAssembly\"\n- `From [State A] to [State B]: [How]`\n  e.g. \"From Empty Repo to Playable Game: A Claude Code Session\"\n\n## Anti-Patterns\n\n- \"In this blog post, we will explore...\": skip the preamble\n- \"It's worth noting that...\": if it's worth noting, just note it\n- Listing every file changed: nobody cares about the full diff\n- Explaining things the audience already knows\n- Screenshots of code when a link to the repo would do\n- Claiming something works without showing evidence\n\nFile v1.9.14:modules/reddit-format.md\n\n---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if longer, reconsider\n   whether a blog post is the better medium\n6. **Conversational close**: \"happy to answer questions about X\n   in the comments\" gives readers a reason to engage\n\n## Anti-Patterns\n\n- Copy-pasting your blog post: the tone is wrong and readers notice\n- Burying the lede: starting with context before the interesting part\n- Screenshot of code instead of a fenced code block\n- No TL;DR on anything over 300 words\n- \"In conclusion...\": just end the post\n- Excessive bold/italic throughout: signals AI-generated content\n\n## First Comment Strategy\n\nFor technical posts, plan a follow-up comment before posting.\nUse it for:\n- Full code links (repo URL, Gist)\n- Setup instructions that would bloat the post body\n- Benchmarks or test output that are reference material, not story\n\nWrite this comment in the quality gate step and post it\nimmediately after the main post goes live.\n\nFile v1.9.14:modules/session-extraction.md\n\n---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```\n\nFile v1.9.14:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session into a blog post, case study, or Reddit post. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineering teams use this skill to turn real Claude Code session evidence, git history, diffs, test output, metrics, and discussion context into publishable blog posts, case studies, social threads, or Reddit posts. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Drafts can expose secrets, proprietary code details, customer data, internal decisions, or private conversation context when session evidence is reused for public-facing content. <br>\nMitigation: Review and redact generated posts before sharing, and remove anything the project or employer would not want published. <br>\nRisk: Posts can contain stale or unsupported claims if git history, diffs, metrics, or test output are incomplete. <br>\nMitigation: Verify concrete claims against current repository evidence and test output before publishing. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-to-post) <br>\n- [clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown prose drafts with optional inline code blocks, checklists, and first-comment text] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include evidence-gathering commands, publishing quality gates, and review guidance.] <br>\n\n## Skill Version(s): <br>\n1.9.14 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.13: 6 files, 11825 bytes\n\nFiles: modules/narrative-structure.md (3586b), modules/reddit-format.md (3892b), modules/session-extraction.md (2434b), skill-card.md (2269b), SKILL.md (10151b), _meta.json (145b)\n\nFile v1.9.13:SKILL.md\n\n---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal and browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history**: commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory**: what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results**: concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics**: scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context**: the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?**: the goal, not the task list\n2. **What did we actually do?**: the real path, including pivots\n3. **What came out of it?**: concrete, measurable results\n\nLook for:\n- **The hook**: what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points**: where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number**: one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\n**Choose format first:**\n\n| Format | Module | When |\n|--------|--------|------|\n| Blog post | `narrative-structure` | Dev blog, company blog, personal site |\n| Case study | `narrative-structure` | Marketing, tool demonstrations |\n| Social thread | `narrative-structure` | Twitter/X, Bluesky, LinkedIn |\n| Reddit post | `reddit-format` | Community engagement, r/programming etc. |\n\nFor Reddit: load `modules/reddit-format.md` instead of the blog\ntemplate below. The structure, tone, and quality gate differ.\n\nLoad the `narrative-structure` module for blog/case-study templates.\n\n**Blog post structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard numbers. Before/after. What works now.\nScreenshots or browser recording GIF if visual.\n\n## What's Next\nHonest remaining work. No false completeness.\n```\n\n**Tone**:\n- Write like explaining to a colleague over coffee\n- Specifics over adjectives (\"180 tests\" not \"comprehensive suite\")\n- Show the mess: readers connect with pivots and debugging\n- Credit the tools and techniques that made it work\n- Under 1500 words unless the content demands more\n\n### Step 4: Quality Gate\n\n**For blog posts and case studies:**\n1. **Slop check**: `Skill(scribe:slop-detector)` on the draft\n2. **Proof-of-work**: `Skill(imbue:proof-of-work)` on all claims\n3. **Recording check**: does any section need a GIF?\n4. **Title test**: would you click this? Does it promise\n   something specific?\n5. **Opening test**: does paragraph one say what the post is about?\n\n**For Reddit posts (additional gates):**\n1. **TL;DR present**: is it after `---` at the end?\n2. **Lede not buried**: is the most interesting thing in the\n   first two sentences?\n3. **Subreddit fit**: does the content match the target subreddit's\n   norms? Check the subreddit's top posts of the month.\n4. **First comment drafted**: are the repo link and any reference\n   material ready to post as a follow-up comment?\n5. **Header count**: if the post is under 600 words, are headers\n   absent (or replaced with bold inline labels)?\n\n### Step 5: Output\n\nWrite the post to the requested location (default:\n`docs/posts/`).\n\nReport:\n- Format used (blog post / case study / Reddit post)\n- Word count\n- Slop score (blog/case-study only)\n- Verifiable claims count\n- Recordings generated (if any)\n- For Reddit: target subreddit and first-comment content\n\n## Example\n\nA session that ported a Quake 2 engine from C to Rust:\n\n> **Title**: Rewriting a Quake 2 Engine in Rust with Claude Code\n>\n> **Opening**: We took a 150,000-line C game engine and started\n> rewriting it in Rust targeting WebAssembly. In one session we went\n> from an empty workspace to a prototype loading real game data in\n> the browser.\n>\n> **Starting point**: A Yamagi Quake II fork compiled with Emscripten.\n> Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and\n> matchbox for P2P multiplayer.\n>\n> **The work**: Seven parallel agents built subsystems (collision,\n> movement, filesystem, networking, renderer, server, client) while\n> the main session coordinated integration. A Makefile with\n> prerequisite checks automated the full build-to-browser pipeline\n> including game data download.\n>\n> **How we tested**: 180 unit tests across 13 crates. BSP loading\n> verified against real Quake 2 demo pak0.pak. Browser diagnostics\n> logged every init step. [Terminal GIF: `make test` output]\n>\n> **Results**: 10,950 lines of Rust, 180 tests, real game data\n> loading and flat-shaded BSP rendering in the browser with WASD\n> movement and mouse look.\n>\n> **What's next**: Textured rendering, collision debugging, sound,\n> menus, multiplayer.\n\nEvery claim is checkable: line counts from `wc -l`, test counts\nfrom `cargo test`, file counts from filesystem log output.\n\n## Exit Criteria\n\n- [ ] Format selected (blog post, case study, or Reddit post)\n- [ ] Session brief compiled from git history and conversation\n  context\n- [ ] Draft written to `docs/posts/` (or specified path)\n- [ ] For blog/case-study: slop score reported, all claims\n  tagged with evidence references\n- [ ] For Reddit: TL;DR present, lede in first two sentences,\n  target subreddit identified, first comment drafted\n- [ ] Word count and verifiable claim count reported\n- [ ] Incomplete or unverifiable claims are flagged, not silently\n  dropped\n\nFile v1.9.13:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.13\",\n  \"publishedAt\": 1782577443924\n}\n\nFile v1.9.13:modules/narrative-structure.md\n\n---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Parallel Agents\"\n- `[Number] [Things] I Learned [Doing X]`\n  e.g. \"5 Things I Learned Rewriting C as Rust for WebAssembly\"\n- `From [State A] to [State B]: [How]`\n  e.g. \"From Empty Repo to Playable Game: A Claude Code Session\"\n\n## Anti-Patterns\n\n- \"In this blog post, we will explore...\": skip the preamble\n- \"It's worth noting that...\": if it's worth noting, just note it\n- Listing every file changed: nobody cares about the full diff\n- Explaining things the audience already knows\n- Screenshots of code when a link to the repo would do\n- Claiming something works without showing evidence\n\nFile v1.9.13:modules/reddit-format.md\n\n---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if longer, reconsider\n   whether a blog post is the better medium\n6. **Conversational close**: \"happy to answer questions about X\n   in the comments\" gives readers a reason to engage\n\n## Anti-Patterns\n\n- Copy-pasting your blog post: the tone is wrong and readers notice\n- Burying the lede: starting with context before the interesting part\n- Screenshot of code instead of a fenced code block\n- No TL;DR on anything over 300 words\n- \"In conclusion...\": just end the post\n- Excessive bold/italic throughout: signals AI-generated content\n\n## First Comment Strategy\n\nFor technical posts, plan a follow-up comment before posting.\nUse it for:\n- Full code links (repo URL, Gist)\n- Setup instructions that would bloat the post body\n- Benchmarks or test output that are reference material, not story\n\nWrite this comment in the quality gate step and post it\nimmediately after the main post goes live.\n\nFile v1.9.13:modules/session-extraction.md\n\n---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```\n\nFile v1.9.13:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session into a blog post, case study, or Reddit post. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, technical writers, and developer-relations teams use this skill to turn real Claude Code sessions into publishable engineering blog posts, case studies, social threads, or Reddit posts grounded in session evidence. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generated posts may expose credentials, private prompts, internal architecture, customer data, proprietary plans, or other sensitive repository context. <br>\nMitigation: Review every generated draft before publication and remove private or proprietary details. <br>\nRisk: Generated posts may contain incorrect or misleading claims about the coding session. <br>\nMitigation: Verify claims against git history, file changes, test output, metrics, and proof-of-work evidence before sharing. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-to-post) <br>\n- [Clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n- [Narrative Structure module](artifact/modules/narrative-structure.md) <br>\n- [Reddit Post Format module](artifact/modules/reddit-format.md) <br>\n- [Session Extraction Checklist module](artifact/modules/session-extraction.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Guidance, Shell commands] <br>\n**Output Format:** [Markdown prose with optional shell command blocks and concise status fields.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include word count, verification status, target format, and publication-readiness notes.] <br>\n\n## Skill Version(s): <br>\n1.9.13 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.12: 6 files, 11813 bytes\n\nFiles: modules/narrative-structure.md (3586b), modules/reddit-format.md (3892b), modules/session-extraction.md (2434b), skill-card.md (2193b), SKILL.md (10151b), _meta.json (145b)\n\nFile v1.9.12:SKILL.md\n\n---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal and browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history**: commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory**: what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results**: concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics**: scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context**: the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?**: the goal, not the task list\n2. **What did we actually do?**: the real path, including pivots\n3. **What came out of it?**: concrete, measurable results\n\nLook for:\n- **The hook**: what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points**: where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number**: one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\n**Choose format first:**\n\n| Format | Module | When |\n|--------|--------|------|\n| Blog post | `narrative-structure` | Dev blog, company blog, personal site |\n| Case study | `narrative-structure` | Marketing, tool demonstrations |\n| Social thread | `narrative-structure` | Twitter/X, Bluesky, LinkedIn |\n| Reddit post | `reddit-format` | Community engagement, r/programming etc. |\n\nFor Reddit: load `modules/reddit-format.md` instead of the blog\ntemplate below. The structure, tone, and quality gate differ.\n\nLoad the `narrative-structure` module for blog/case-study templates.\n\n**Blog post structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard numbers. Before/after. What works now.\nScreenshots or browser recording GIF if visual.\n\n## What's Next\nHonest remaining work. No false completeness.\n```\n\n**Tone**:\n- Write like explaining to a colleague over coffee\n- Specifics over adjectives (\"180 tests\" not \"comprehensive suite\")\n- Show the mess: readers connect with pivots and debugging\n- Credit the tools and techniques that made it work\n- Under 1500 words unless the content demands more\n\n### Step 4: Quality Gate\n\n**For blog posts and case studies:**\n1. **Slop check**: `Skill(scribe:slop-detector)` on the draft\n2. **Proof-of-work**: `Skill(imbue:proof-of-work)` on all claims\n3. **Recording check**: does any section need a GIF?\n4. **Title test**: would you click this? Does it promise\n   something specific?\n5. **Opening test**: does paragraph one say what the post is about?\n\n**For Reddit posts (additional gates):**\n1. **TL;DR present**: is it after `---` at the end?\n2. **Lede not buried**: is the most interesting thing in the\n   first two sentences?\n3. **Subreddit fit**: does the content match the target subreddit's\n   norms? Check the subreddit's top posts of the month.\n4. **First comment drafted**: are the repo link and any reference\n   material ready to post as a follow-up comment?\n5. **Header count**: if the post is under 600 words, are headers\n   absent (or replaced with bold inline labels)?\n\n### Step 5: Output\n\nWrite the post to the requested location (default:\n`docs/posts/`).\n\nReport:\n- Format used (blog post / case study / Reddit post)\n- Word count\n- Slop score (blog/case-study only)\n- Verifiable claims count\n- Recordings generated (if any)\n- For Reddit: target subreddit and first-comment content\n\n## Example\n\nA session that ported a Quake 2 engine from C to Rust:\n\n> **Title**: Rewriting a Quake 2 Engine in Rust with Claude Code\n>\n> **Opening**: We took a 150,000-line C game engine and started\n> rewriting it in Rust targeting WebAssembly. In one session we went\n> from an empty workspace to a prototype loading real game data in\n> the browser.\n>\n> **Starting point**: A Yamagi Quake II fork compiled with Emscripten.\n> Goal: idiomatic Rust with wasm-bindgen, glow for WebGL2, and\n> matchbox for P2P multiplayer.\n>\n> **The work**: Seven parallel agents built subsystems (collision,\n> movement, filesystem, networking, renderer, server, client) while\n> the main session coordinated integration. A Makefile with\n> prerequisite checks automated the full build-to-browser pipeline\n> including game data download.\n>\n> **How we tested**: 180 unit tests across 13 crates. BSP loading\n> verified against real Quake 2 demo pak0.pak. Browser diagnostics\n> logged every init step. [Terminal GIF: `make test` output]\n>\n> **Results**: 10,950 lines of Rust, 180 tests, real game data\n> loading and flat-shaded BSP rendering in the browser with WASD\n> movement and mouse look.\n>\n> **What's next**: Textured rendering, collision debugging, sound,\n> menus, multiplayer.\n\nEvery claim is checkable: line counts from `wc -l`, test counts\nfrom `cargo test`, file counts from filesystem log output.\n\n## Exit Criteria\n\n- [ ] Format selected (blog post, case study, or Reddit post)\n- [ ] Session brief compiled from git history and conversation\n  context\n- [ ] Draft written to `docs/posts/` (or specified path)\n- [ ] For blog/case-study: slop score reported, all claims\n  tagged with evidence references\n- [ ] For Reddit: TL;DR present, lede in first two sentences,\n  target subreddit identified, first comment drafted\n- [ ] Word count and verifiable claim count reported\n- [ ] Incomplete or unverifiable claims are flagged, not silently\n  dropped\n\nFile v1.9.12:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.12\",\n  \"publishedAt\": 1781839184350\n}\n\nFile v1.9.12:modules/narrative-structure.md\n\n---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Parallel Agents\"\n- `[Number] [Things] I Learned [Doing X]`\n  e.g. \"5 Things I Learned Rewriting C as Rust for WebAssembly\"\n- `From [State A] to [State B]: [How]`\n  e.g. \"From Empty Repo to Playable Game: A Claude Code Session\"\n\n## Anti-Patterns\n\n- \"In this blog post, we will explore...\": skip the preamble\n- \"It's worth noting that...\": if it's worth noting, just note it\n- Listing every file changed: nobody cares about the full diff\n- Explaining things the audience already knows\n- Screenshots of code when a link to the repo would do\n- Claiming something works without showing evidence\n\nFile v1.9.12:modules/reddit-format.md\n\n---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if longer, reconsider\n   whether a blog post is the better medium\n6. **Conversational close**: \"happy to answer questions about X\n   in the comments\" gives readers a reason to engage\n\n## Anti-Patterns\n\n- Copy-pasting your blog post: the tone is wrong and readers notice\n- Burying the lede: starting with context before the interesting part\n- Screenshot of code instead of a fenced code block\n- No TL;DR on anything over 300 words\n- \"In conclusion...\": just end the post\n- Excessive bold/italic throughout: signals AI-generated content\n\n## First Comment Strategy\n\nFor technical posts, plan a follow-up comment before posting.\nUse it for:\n- Full code links (repo URL, Gist)\n- Setup instructions that would bloat the post body\n- Benchmarks or test output that are reference material, not story\n\nWrite this comment in the quality gate step and post it\nimmediately after the main post goes live.\n\nFile v1.9.12:modules/session-extraction.md\n\n---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```\n\nFile v1.9.12:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session into a blog post, case study, or Reddit post. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, developer advocates, and technical writers use this skill after a coding session to turn git history, file changes, test evidence, metrics, and conversation context into public-facing engineering posts, case studies, social threads, or Reddit posts. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may surface session details, repository context, private prompts, internal URLs, customer data, proprietary code details, or configuration values in public-facing prose. <br>\nMitigation: Review the generated post before publishing or committing it, remove sensitive details, and verify claims against the cited session and repository evidence. <br>\n\n\n## Reference(s): <br>\n- [Night Market scribe source](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n- [Session Extraction Checklist](artifact/modules/session-extraction.md) <br>\n- [Narrative Structure](artifact/modules/narrative-structure.md) <br>\n- [Reddit Post Format](artifact/modules/reddit-format.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown draft plus a concise status report with format, word count, claim count, and recording notes when applicable] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May write the generated post to docs/posts/ or another requested path and may propose verification commands for evidence gathering.] <br>\n\n## Skill Version(s): <br>\n1.9.12 (source: server release evidence; artifact frontmatter reports 1.9.8) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.2: 5 files, 8859 bytes\n\nFiles: modules/narrative-structure.md (3615b), modules/session-extraction.md (2453b), skill-card.md (2187b), SKILL.md (8296b), _meta.json (144b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: session-to-post\ndescription: |\n  Convert a Claude Code session into a shareable blog post or case study capturing decisions, process, and outcomes\nversion: 1.9.5\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context — then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal + browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual — a running app, a test suite,\na build pipeline — capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs, CLI demos):\n```\nInvoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup\n```\n\n**Browser recordings** (web apps, rendered output):\n```\nInvoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result\n```\n\n**Composition** (side-by-side before/after, terminal + browser):\n```\nInvoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story.\n```\n\nPlace generated GIFs in `docs/posts/assets/` and reference them\nfrom the markdown with relative paths.\n\n### Proof-of-Work Integration (imbue)\n\nEvery claim in the post should be verifiable. Before finalizing:\n\n```\nInvoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED\n```\n\nThis prevents publishing posts with stale numbers or broken examples.\n\n## Methodology\n\n### Step 1: Extract Session Context\n\nLoad the `session-extraction` module for the full checklist.\n\nGather raw material from what actually happened:\n\n1. **Git history** — commits since the session started:\n   ```bash\n   git log --oneline --since=\"<session_start>\" --stat\n   ```\n2. **File inventory** — what was created and changed:\n   ```bash\n   git diff --stat <start_commit>..HEAD\n   ```\n3. **Test results** — concrete evidence of what works:\n   ```bash\n   cargo test  # or the project's test command\n   ```\n4. **Metrics** — scope and scale:\n   ```bash\n   find . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l\n   ```\n5. **Conversation context** — the user's goals, constraints, and decisions\n   made during the session\n\n### Step 2: Identify the Story\n\nEvery session post answers three questions:\n\n1. **What were we trying to do?** — the goal, not the task list\n2. **What did we actually do?** — the real path, including pivots\n3. **What came out of it?** — concrete, measurable results\n\nLook for:\n- **The hook** — what makes this interesting? A hard problem, a\n  surprising approach, an impressive result\n- **Turning points** — where did the plan change? What broke?\n  What worked unexpectedly?\n- **The number** — one metric that captures the outcome\n  (lines written, tests passing, performance gain, time saved)\n\n### Step 3: Draft the Post\n\nLoad the `narrative-structure` module for formatting templates.\n\n**Structure** (adapt to content):\n\n```markdown\n# Title: [Verb] + [What] + [With What]\n\n## Opening (2-3 sentences)\nWhat we set out to do and why. No throat-clearing.\n\n## Starting Point\nWhere things stood before. Concrete: file counts, code state,\nwhat worked and what didn't.\n\n## The Work\nKey phases. Focus on decisions and pivots, not keystrokes.\n- Phase 1: [what and why]\n- Phase 2: [what and why]\nInclude GIFs from scry recordings where visual.\n\n## How We Tested It\nWhat verification looked like. Show the test run, the proof-of-work\nevidence. Include terminal recording GIF of tests passing.\n\n## Results\nHard num\n\nArchive v1.0.1: 4 files, 7670 bytes\n\nFiles: modules/narrative-structure.md (3615b), modules/session-extraction.md (2453b), SKILL.md (8296b), _meta.json (144b)\n\nArchive v1.0.0: 4 files, 7670 bytes\n\nFiles: modules/narrative-structure.md (3615b), modules/session-extraction.md (2453b), SKILL.md (8296b), _meta.json (144b)","readmeExcerpt":"Skill: session-to-post Owner: athola Summary: Converts a Claude Code session into a blog post, case study, or Reddit post Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:54.947Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:51.213Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:39.686Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:20.539Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:03","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"Invoke Skill(scry:vhs-recording) with a tape that runs:\n  make test        → shows 180 tests passing\n  make play        → shows the build + server startup"},{"language":"text","snippet":"Invoke Skill(scry:browser-recording) with a Playwright spec that:\n  navigates to the app\n  interacts with it\n  captures the result"},{"language":"text","snippet":"Invoke Skill(scry:media-composition) to stitch recordings into\na single visual that tells the story."},{"language":"text","snippet":"Invoke Skill(imbue:proof-of-work) to:\n  - Tag each claim with [E1], [E2], etc.\n  - Run verification commands\n  - Report PASS / FAIL / BLOCKED"},{"language":"bash","snippet":"git log --oneline --since=\"<session_start>\" --stat"},{"language":"bash","snippet":"git diff --stat <start_commit>..HEAD"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: session-to-post\ndescription: Converts a Claude Code session into a blog post, case study, or Reddit post\nversion: 1.9.8\ntriggers:\n  - blog\n  - marketing\n  - session-capture\n  - case-study\n  - storytelling\n  - developer-experience\n  - reddit\n  - publishing dev blog content or community posts from real sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scribe:shared\", \"night-market.scribe:slop-detector\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session to Post\n\nCapture what happened in a Claude Code session and turn it into a\nblog post, case study, or social media thread that others can learn from.\n\nThe skill extracts the real story from git history, file changes, and\nconversation context, then shapes it into a narrative that shows\nprocess, not just results.\n\n## When To Use\n\n- After completing a meaningful chunk of work you want to share\n- Creating dev blog content from real sessions\n- Building case studies for tools, libraries, or techniques\n- Producing marketing content that demonstrates capability\n- Documenting a process for teammates who weren't in the session\n- Sharing a session story with a Reddit community (r/programming,\n  r/rust, r/Python, r/ClaudeAI, etc.)\n\n## When NOT To Use\n\n- Writing API reference documentation (use `scribe:doc-generator`)\n- Creating step-by-step tutorials (use `scribe:tech-tutorial`)\n- Cleaning up existing prose (use `scribe:slop-detector`)\n- Internal project documentation (use `sanctum:doc-updates`)\n\n## Integration Points\n\nThis skill connects to several others in the ecosystem.\nUse them when the post needs more than prose.\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| Terminal demo GIF | `scry:vhs-recording` | Record a build/test run as an animated GIF |\n| Browser demo GIF | `scry:browser-recording` | Capture a web UI walkthrough via Playwright |\n| Composite media | `scry:media-composition` | Stitch terminal and browser GIFs side-by-side |\n| Proof of claims | `imbue:proof-of-work` | Verify every number in the post with evidence |\n| Code quality narrative | `pensive:code-refinement` | Describe what was cleaned up and why |\n| Review narrative | `imbue:structured-review` | Capture review findings as post content |\n| Change summary | `imbue:catchup` | Summarize what changed for the post's \"The Work\" section |\n| Diff analysis | `imbue:diff-analysis` | Risk-scored change breakdown for technical audiences |\n\n### Recording Integration (scry)\n\nWhen the post describes something visual (a running app, a test suite,\na build pipeline) capture it instead of describing it.\n\n**Terminal recordings** (build output, test runs,"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-to-post\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750514947\n}"},{"path":"modules/narrative-structure.md","content":"---\nmodule: narrative-structure\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 450\n---\n\n# Narrative Structure\n\nTemplates and patterns for turning a session brief into a post.\n\n## Post Formats\n\n### Blog Post (default)\n\nBest for: dev blogs, company engineering blogs, personal sites.\n\n```markdown\n# [Verb]ing [What] [With/In/Using What]\n\n[2-3 sentence opener. State what was done and the headline result.\nNo \"In this post we will...\": just say the thing.]\n\n## Where We Started\n\n[Concrete starting state. Numbers, not adjectives.\n\"A 150K-line C codebase\" not \"a large legacy codebase.\"]\n\n## What We Built\n\n### [Phase/Decision 1 name]\n\n[What and why. 2-4 sentences. Code snippet only if it\nillustrates a technique worth sharing.]\n\n### [Phase/Decision 2 name]\n\n[Same pattern. Focus on the interesting parts; skip\nanything a reader could guess.]\n\n![Terminal recording of tests passing](assets/tests.gif)\n\n## How We Verified It\n\n[Show the proof. Test output, before/after measurements,\nscreenshots. This is where recordings from scry belong.]\n\n![Browser recording of the running app](assets/demo.gif)\n\n## Results\n\n| Metric | Before | After |\n|--------|--------|-------|\n| Lines of code | 0 | 10,950 |\n| Tests passing | 0 | 180 |\n| Build target | Emscripten | wasm-pack |\n\n## What's Left\n\n[Honest list. Readers respect knowing what isn't done.]\n\n- [ ] Remaining item 1\n- [ ] Remaining item 2\n```\n\n### Case Study\n\nBest for: marketing, demonstrating tool capability to prospects.\n\n```markdown\n# [Outcome]: [How]\n\n## The Challenge\n\n[1 paragraph. What problem needed solving and why it was hard.]\n\n## The Approach\n\n[Walk through the method. Emphasize decisions, not steps.\nShow how the tool/technique enabled the outcome.]\n\n## The Evidence\n\n[Hard numbers. Before/after. Screenshots and recordings.]\n\n## Key Takeaways\n\n1. [Insight that generalizes beyond this project]\n2. [Insight about the tool or technique]\n3. [What would change if doing it again]\n```\n\n### Social Thread\n\nBest for: Twitter/X, Bluesky, LinkedIn.\n\n```\n1/ [Hook: the result in one sentence]\n\n2/ Starting point: [concrete state before]\n\n3/ The approach: [key technique in 1-2 sentences]\n\n4/ [The interesting part: a decision, a pivot, a surprise]\n\n5/ Results: [numbers]\n\n6/ What's next: [honest assessment]\n\n[Attach: GIF from scry recording, screenshot of output]\n```\n\n## Writing Rules\n\n1. **Lead with the result**, not the process\n2. **One number per section** minimum: ground every claim\n3. **Show, don't summarize**: a GIF of tests passing says more\n   than \"we wrote comprehensive tests\"\n4. **Name the tools**: readers want to know how, not just what\n5. **Include a pivot**: straight-line success stories aren't\n   believable or interesting\n6. **End with honesty**: what's unfinished, what you'd change\n\n## Title Patterns That Work\n\n- `[Verb]ing [Big Thing] in [Constraint]`\n  e.g. \"Porting a Game Engine to Rust in One Session\"\n- `How We [Achieved Result] with [Tool/Technique]`\n  e.g. \"How We Hit 180 Tests in 3 Hours with Para"},{"path":"modules/reddit-format.md","content":"---\nmodule: reddit-format\ncategory: writing-quality\ndependencies: []\nestimated_tokens: 530\n---\n\n# Reddit Post Format\n\nTemplates and rules for turning a session brief into a Reddit\ntext post that earns upvotes through specificity and honesty.\n\n## When Reddit, When Blog\n\nChoose Reddit when:\n- You want community engagement (questions, discussion, feedback)\n- The work fits a specific subreddit's current interests\n- The story is worth starting a conversation, not just archiving\n\nChoose blog when:\n- You want permanent, search-indexed content you own\n- The post will be linked from documentation or READMEs\n- It needs a stable URL for future reference\n\n## Subreddit Targeting\n\nMatch the primary technology or theme to one subreddit. Avoid\ncross-posting within 48 hours; it triggers spam filters and\ncommunity backlash.\n\n| Subreddit | When to post |\n|-----------|-------------|\n| r/programming | general software development stories |\n| r/rust | Rust code, tooling, ecosystem |\n| r/Python | Python projects, libraries, tools |\n| r/webdev | web development, frontend, full stack |\n| r/devops | infrastructure, CI/CD, deployment |\n| r/ClaudeAI | Claude Code usage, AI-assisted dev |\n| r/ExperiencedDevs | technical depth, process, architecture |\n| r/MachineLearning | ML systems, training, inference |\n\n## Post Structure\n\nReddit text posts have no required format, but this pattern\nworks for session stories:\n\n**Hook** (first 2 sentences): the most interesting outcome\nor observation. Do not bury the lede. Readers who stop\nscrolling past line 3 are gone.\n\n**Context** (1-2 sentences): what you were trying to do and why.\n\n**The work** (2-4 paragraphs): what you built or changed. Name\nthe tools and techniques. Include one code block if it shows\nsomething surprising or non-obvious.\n\n**Result**: numbers. What works now that did not before.\n\n**Honest close**: what remains, what you would change, what\nsurprised you. This is what makes the post worth bookmarking.\n\n---\n\n**TL;DR** (required): the whole story in 2-3 sentences. Place\nit after a `---` separator at the bottom. Readers who skip to\nthe end first are your secondary audience; do not disappoint them.\n\n## Title Patterns\n\nThe title is the entire hook. Test it with: \"would someone\nwho knows nothing about this click it?\"\n\n- `I [did thing] with [tool] — here's what I learned`\n- `Built [thing] in [constraint] — [surprising number]`\n- `[Surprising result]: how we [achieved it]`\n- `Show r/[subreddit]: [what you built] ([brief description])`\n- `[Honest take on tool] after [real production use case]`\n\nKeep under 120 characters. The title must work without the body.\n\n## Writing Rules\n\n1. **First person**: \"I built\" not \"we built\" unless the team\n   matters to the story\n2. **No section headers** for posts under 600 words; above that,\n   use one level of bold headers only\n3. **One code block maximum** in the body; link the rest to\n   a repo or Gist\n4. **TL;DR is required**: after `---`, at the end\n5. **Under 600 words** for most posts; if "},{"path":"modules/session-extraction.md","content":"---\nmodule: session-extraction\ncategory: data-gathering\ndependencies: []\nestimated_tokens: 400\n---\n\n# Session Extraction Checklist\n\nRun these commands and capture the output. This is the raw\nmaterial the narrative is built from.\n\n## Git History\n\n```bash\n# Commits this session (adjust date/hash as needed)\ngit log --oneline --stat HEAD~20..HEAD\n\n# Files changed summary\ngit diff --stat <start_commit>..HEAD\n\n# Diff size\ngit diff --shortstat <start_commit>..HEAD\n```\n\nCapture: commit messages, files touched, insertions/deletions.\n\n## Codebase Metrics\n\n```bash\n# Lines of code (adjust extension for language)\nfind . -name \"*.rs\" -not -path \"*/target/*\" | xargs wc -l | tail -1\nfind . -name \"*.py\" -not -path \"*venv*\" | xargs wc -l | tail -1\nfind . -name \"*.ts\" -not -path \"*node_modules*\" | xargs wc -l | tail -1\n\n# File count\nfind . -name \"*.rs\" -not -path \"*/target/*\" | wc -l\n\n# Test count\ncargo test 2>&1 | grep \"test result\"\n# or: pytest --co -q 2>&1 | tail -1\n# or: npm test 2>&1 | grep \"Tests:\"\n```\n\nCapture: total lines, file count, test count and pass/fail.\n\n## Architecture\n\n```bash\n# Directory tree (depth 3)\nfind . -type d -not -path \"*/target/*\" -not -path \"*node_modules*\" \\\n  -maxdepth 3 | sort\n\n# Key config files\ncat Cargo.toml  # or package.json, pyproject.toml\n```\n\nCapture: project structure, dependency count, crate/package organization.\n\n## Build and Runtime\n\n```bash\n# Build output (note timing)\ntime cargo build --release 2>&1 | tail -5\n\n# Binary/artifact size\nls -lh target/release/*.wasm dist/*.html 2>/dev/null\n```\n\nCapture: build time, artifact sizes.\n\n## Conversation Context\n\nThese come from the session itself, not from commands:\n\n- **Initial goal**: what the user asked for\n- **Constraints**: time, tech stack, compatibility requirements\n- **Key decisions**: why X over Y at each fork\n- **Pivots**: where the plan changed and why\n- **Blockers hit**: what went wrong and how it was resolved\n- **Tools used**: parallel agents, specific skills invoked\n\n## Output Format\n\nCompile extraction results into a structured brief:\n\n```markdown\n## Session Brief\n\n**Goal**: [one sentence]\n**Duration**: [approximate]\n**Starting state**: [what existed before]\n\n### Metrics\n- Lines written: X\n- Files created/modified: Y\n- Tests: Z passing\n\n### Key commits\n1. [hash] [message]: [significance]\n2. ...\n\n### Decisions\n1. [decision] because [reason]\n2. ...\n\n### Pivots\n1. [what changed] because [what happened]\n2. ...\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Converts a Claude Code session into a blog post, case study, or Reddit post Skill: session-to-post Owner: athola Summary: Converts a Claude Code session into a blog post, case study, or Reddit post Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:54.947Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:51.213Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:39.686Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:20.539Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:03","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1542,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T05:30:01.150Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:53:48.579Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}