بنقرة واحدة
good-docs-writer
// Turn a topic into a structured blog-post draft using Good Docs templates with blog voice. Triggers: "$good-docs-writer <intent> <topic>", "write a blog post about X", "draft a blog post on X".
// Turn a topic into a structured blog-post draft using Good Docs templates with blog voice. Triggers: "$good-docs-writer <intent> <topic>", "write a blog post about X", "draft a blog post on X".
Generates a self-contained HTML walkthrough of a codebase feature, flow, architecture, or schema. Triggers: "$walkthrough", "walk me through", "trace the code path", "explain this flow", "visualize the data model".
Read/write brain files (Obsidian vault at brain/). Triggers: brain/ modifications, "add to brain".
Audit and evolve the brain vault — prune outdated content, discover cross-cutting principles, review skills for structural encoding opportunities. Triggers: "meditate", "audit the brain".
Break down medium-to-large tasks into phased plans in brain/plans/. Planning only — does not implement. Use for new features, multi-file refactors, or architectural changes — not small fixes. Triggers: "plan this", "break this down".
Reflect on the conversation and update the brain. Use when wrapping up, after mistakes or corrections, or when significant codebase knowledge was gained. Triggers: "reflect", "remember this".
Principle-grounded review of code changes, PRs, or plans. Use when asked to review, critique, or assess quality of work — "review", "review this", "code review", "check this".
| name | good-docs-writer |
| description | Turn a topic into a structured blog-post draft using Good Docs templates with blog voice. Triggers: "$good-docs-writer <intent> <topic>", "write a blog post about X", "draft a blog post on X". |
| allowed-tools | Bash Read Write Glob Grep AskUserQuestion |
| metadata | {"author":"Alexander Opalic","version":"0.1"} |
Turn a topic into a first-draft blog post that already has a solid structural spine (a Good Docs template) and a blog voice (hook, narrative, takeaways, CTA).
Built on top of The Good Docs Project — templates fetched at runtime from
gitlab.com/tgdp/templates(MIT-0). All credit for the structural craft of the templates goes to that community; this skill is just the adapter.
The hardest part of a blog post is not the writing — it's deciding what shape the post should have. Good Docs templates already encode the right shape for each documentation intent. This skill maps blog-post intents to those templates, fetches the live template, and layers blog voice on top.
This is the blog-flavored counterpart to doc-generator (which produces neutral docs) and doc-improver (which improves existing rough markdown).
If the user used the explicit form ($good-docs-writer walkthrough adding auth to Astro), trust the intent and skip classification.
Otherwise, read references/template-index.md and walk the decision matrix top-to-bottom. Stop at the first row that matches.
If two rows fit equally — most commonly concept (explainer) vs. tutorial (walkthrough), or tutorial vs. how-to — call AskUserQuestion. Don't guess.
State the chosen intent and template back to the user in one sentence before generating, e.g. "Treating this as an explainer — using the Good Docs concept template as the spine."
If the topic is an opinion essay or personal narrative with no good template fit, tell the user and offer either a loose concept backbone or freeform.
The skill ships with a frozen snapshot of every supported Good Docs template under references/templates/. Use Read on the local files — do not WebFetch, the snapshot is the source of truth.
Read references/templates.md for the catalog and exact paths. For the chosen key, read:
references/templates/<key>/template.md — the scaffold to fill inreferences/templates/<key>/guide.md — explains what each section/placeholder meansAlso read references/writing-tips.md once per session if you need general voice/concision guidance. Only read the larger references/style-guide.md when verifying a specific style call (it's ~49 KB).
Do not reproduce template structure from memory. The bundled file is canonical — if you can't read it, stop and tell the user something is wrong with the install.
Two paths:
Glob / Grep / Read to collect concrete file paths, function names, code excerpts. For larger explorations, you can launch subagents — but most blog posts only need a focused scan, not parallel agents.Either way, ask the user once for: target audience (e.g. "Vue devs new to Pinia"), rough length, and any voice cues they want preserved (their existing posts, a tone they want to match). Skip if they already specified.
Walk the fetched template section by section:
{placeholder} with concrete content drawn from material gathered in step 3.Then layer blog voice using references/blog-voice.md:
Code snippets must be real — if the post is repo-tied, every snippet should be greppable in the repo. If general, mark sample code as illustrative.
adding-auth-to-astro.md).src/content/blog/ (Astro/most modern setups)content/blog/ (Nuxt/Hugo)posts/ (Jekyll/older blogs)_posts/ (Jekyll convention)blog/ (create if missing)After writing, print a short summary (≤ 10 lines):
The user will read the draft themselves — don't summarize the post content.
Read from references/templates/<key>/. If the file is missing, stop and tell the user the install is incomplete.AskUserQuestion for intent ties (concept vs. tutorial, tutorial vs. how-to) rather than guessing.$good-docs-writer explainer how Vue's reactivity proxy works
$good-docs-writer walkthrough adding Clerk auth to an Astro site
$good-docs-writer debug-story the trailing-slash 404 in production
write a blog post about Postgres advisory locks
draft a blog post on our migration from Webpack to Turbopack