Use when the user wants to write, continue, or revise the draft of a registered piece in a writing content repository, and move it through the drafting, review, and ready stages.
Install
npx skillscat add platypeeps/sd-ai-command-pack/sd-draft Install via the SkillsCat registry.
sd-draft
Write or revise the ## Draft of one registered piece, scrub it, run its gates, and move its stage forward.
Run from the root of a content repository (it holds content/, profile/ and templates/).
If the current directory has no content/, stop and say so.pack below means python3 scripts/pack.py, which only sd-writing has: in another content repository, skip a pack step and say so..claude/reference/pipeline.md and .claude/reference/database-workflow.md in that repository hold the reasons and the record format; this file holds the steps.
Workflow
- Resolve the piece with
sd writing get --piece <year>/<slug> --jsonand use its registereditem.path. A revived piece may stay undercontent-parked/. If no piece is registered, stop and suggestsd-research piece=<year>/<slug>. - Read
research.mdbeside it, and theOutlinesection ofindex.md. - Read
profile/brand-voice/VOICE.md(how it sounds) andprofile/personality-profile/PROFILE.md(what position it takes, and its boundaries). If either is missing, say so and continue.
Entity profiles that the repository'sCLAUDE.mdnames are background only: a claim from one needs a re-verified public source inresearch.mdfirst. - Before the first edit to
index.md, runsd-rules --for <item.path>/index.mdfrom the repository root and follow the printed rule IDs. Then write or revise prose under## Draftinindex.md. MatchVOICE.md, stay insidePROFILE.md, and keep every claim traceable toresearch.md.- Keep each claim at the strength
research.mdgives it. A note that says appears to, vendor-reported or search summary only keeps that hedge in the prose. To make the sentence firmer, verify the claim at its primary source and upgrade the note first. An unmarked claim is the weaker reading, not a confirmed one. - Source the prescription. Find the sentence that tells the reader what to do, and find evidence in
research.mdfor that remedy: someone ran it, what it cost, what it beat, how it fails. Evidence for the problem does not carry the fix. Without remedy evidence, change the register: write it as what the author does and why, or as a proposal with its untested parts named. Or go back withsd-researchfor the evidence.
- Keep each claim at the strength
- After every full write or large revision, run both scrubbers on the
## Draftprose:sd-humanizerin file mode, thenno-ai-slopin Edit mode. Calibrate both againstVOICE.md(Core identity,Always,Never,Signature sentence patterns).VOICE.mdwins a conflict. - A voice or position question the profiles do not answer goes into that profile's
## Gaps / open questions, and into the report.sd-profileresolves it later. Do not guess. - Read the stage with
sd writing get --piece <year>/<slug> --json(writing.stage). Move it withsd writing stage --piece <year>/<slug> --stage <new>; it moves forward only.- First full draft:
drafting. - Ready for feedback:
review. Run the step 4 prescription check before this move. If a person should comment, mentionsd-draft-review push; do not run it unasked, because it writes outside the repository. - Feedback addressed:
ready. Run these first, in order:- Fact-check gate. Run it as an
Agentsub-agent withmodel: opus, pointed at the installedsd-fact-checkskill and itsreferences/source-standards.mdandreferences/verification-protocol.md. Passinput=the## Draftprose plusresearch.md,scope=material,as_of=today,format=ledger. Effort is inherited, so say in the report which effort it ran at. Resolve every unverified or contradicted claim, or flag it. The gate never counts as passed without a claim ledger. - Adversarial gate.
sd writing adversarial --piece <year>/<slug>runs a model from another vendor against the draft in a read-only sandbox and writesadversarial.md. Its remit is argument and citations; discard any style finding. Treat each finding as a hypothesis: verify its "what would have to be true" line at the primary source before you change a word. A rebutted finding is a good result. A new fact needs its source inresearch.mdfirst. It also readsprofile/guardrails.mdwhen the repository has one. If the CLI thatsd writing adversarialcalls or the shared adversarial gate is missing, report the gate as skipped, not as passed. - Save the ledger as
fact-check.md. Record both verdicts and every finding disposition withsd writing gate --piece <year>/<slug> --artifact fact-check|adversarial. sd-writing's.claude/reference/database-workflow.mdgives the record format. - Drift check.
sd writing readiness --piece <year>/<slug> --jsonreportscurrent,stale,unstampedormissingforadversarial.mdandresearch.mdundercompanions. Run it after every revision pass. Do not stage the piecereadyorpublishedwhile either is stale. Clear it by re-running the gate, or withsd writing reconcile --piece <year>/<slug> --artifact adversarial|research --note-file <path>. The note says what became of each finding (confirmed, conceded, rebutted, with its source), or which claims the revision added and where each is sourced. An unstampedadversarial.mdneeds a re-run. Use--note-file: a backtick in a shell argument is a command substitution.
- Fact-check gate. Run it as an
- In sd-writing,
pack review statusalso reportspublish=, a re-render of the optional export. It blocks nothing. A piece that is not being published has nopublish/folder.
- First full draft:
- In sd-writing,
pack review tics [--show]counts the assert-then-narrow move across every draft. Warn when more than three pieces carry it, and name them; which pieces keep it is the author's call. - Bump frontmatter
updatedwhen prose changes. Never hand-edit publication state.
Final report
Current stage, word count, the piece's prescription and what in research.md sources it, new profile gaps, fact-check findings, adversarial findings with which you verified and which you rebutted, the companion states from readiness, the review tics warning if any, and what is still missing.