Writer's Loop
Core Rule
Extract preferences only from explicit user decisions:
- Approved or rejected plans
- Accepted, rejected, or undone edits
- Manual rewrites that change style, voice, or structure (not fact corrections)
- Explicit standing preferences declared by the user
Never extract preferences from unreviewed drafts, one-off comments, fact
corrections, or current-task constraints.
Learn from decisions, not raw drafts.
When to Use
Use for writing where quality depends on structure, audience fit, correctness,
style, or iteration — typically 300+ words or any writing where feedback and
refinement are expected:
- Coding plans, implementation plans, and technical proposals
- Business reports, research summaries, executive updates, and memos
- Product specs, design docs, documentation, and tutorials
- Fiction chapters, essays, scripts, speeches, and narrative outlines
- Poetry (limited support — use custom rubric; see
references/artifact-types.md)
- Academic papers and whitepapers (limited support — adapt to venue requirements)
- Brand-governed or legally constrained writing (legal, clinical, regulatory, corporate)
- Style learning or style distillation from the user's own writing, permitted reference samples, files, pasted text, chapters, reports, docs, or codebase prose
- Translation where meaning, source-language writing style, voice, rhythm, formatting, terminology, or cultural effect matters
Do not use for tiny one-off text edits unless the user asks for a reusable
process or preference learning.
Core Loop
Follow the loop in order. Do not emit a later-stage section before its gate
has passed:
- Frame: Identify artifact type, audience, purpose, constraints, success criteria, and desired tone.
- Question Gate: Ask only blocking questions. If context is enough, state assumptions and continue.
- Plan: Create the outline, argument, task sequence, scene plan, or section structure before drafting.
- Plan Checkpoint: Stop and wait for the user to approve or request changes before drafting.
⚠ Do not draft before approval. Exception: fast draft path (see Entry Modes).
- Replan: If the plan is rejected, revise only the criticized parts, reissue the full plan, and ask again.
- Draft: Write from the approved plan. Preserve declared constraints.
- Critique: Evaluate against the artifact-specific rubric. Every critique must point to a specific location and name a concrete problem — not a generic observation.
- Propose: Suggest targeted revisions with reason and expected improvement. Stop and wait for the user's decision on each.
⚠ Do not apply changes before the user responds.
- Decide: Record the user's apply, reject, or adjust response. Do not skip this step — preference learning depends on explicit decisions.
- Revise: Apply accepted changes. Keep rejected changes out.
- Evaluate: Check the revised artifact against the original success criteria.
- Learn: Extract preference signals from decisions collected above. Record the signal type, applies-to scope, and evidence.
- Distill: Promote repeated, high-confidence patterns into reusable rules.
- Reuse: Apply stable rules in later tasks, scoped to artifact type and stage.
Entry Modes
- New artifact: start at
Frame, then Question Gate, then Plan.
- Fast draft (questions waived): Frame → state Assumptions → compact inline Plan → Draft → Learning Status. Use only when the user clearly waives questions and asks for an immediate draft. Do not use this path when the user asks to bypass, ignore, or override a known plan checkpoint; in that case, present the plan and stop at
PLAN CHECKPOINT. Skipped questions are weak signals and will not become preferences.
- Multi-agent: default to single-agent. Use multi-agent only for high-stakes, long, ambiguous, or multi-audience artifacts where independent planning or critique would materially improve quality. Read
references/multi-agent.md first.
- Existing draft: start at
Frame, then Critique; plan only if structure is unclear. If source text is missing or placeholder-only, ask for it and use this wording: "preserve user intent, voice, plot facts, and continuity."
- Targeted revision: start at
Frame, then Propose; keep changes at sentence or paragraph level unless the user explicitly asked for section-scale changes.
- Style learning: start at
Frame, then read references/style-distillation.md. Output Frame, Style Versus Content, Style Pack, and Storage Decision. If the user wants to clone another person's style, confirm permission or keep the pack session-only.
- Using a learned style: before asking artifact questions or drafting, load the style pack from the conversation or from
.writers-loop/styles/ only when the user opted into local storage. State which pack is loaded. Draft with it, then critique content quality and style match separately. Do not copy source passages or facts from the style pack evidence. If the style pack is missing, unavailable, or the user says not to load it first, use the missing-style-pack template in references/style-distillation.md exactly, including Style Pack Status, Content Plan, and Style Application Plan. Do not draft and do not output QUESTION GATE or general artifact questions yet.
- Translation: start at
Frame, then read references/translation.md. Output Frame, Translation, Review, and Learning Status; preserve source formatting inside the Translation section, not by omitting the loop metadata.
- Preference update: start at
Learn. For storage-mode requests, confirm whether .writers-loop/, journal.jsonl, prefs.md, or style packs will be created before asking artifact questions. Treat tone, length, detail level, or storage mode set for the current task as a constraint, not a learned preference, unless the user says it applies in future work.
Planning Gates
Ask up to five questions only when the answer would materially change the plan.
If the user skips questions, state working assumptions and continue. Skipped
questions are weak or neutral signals, not strong preferences.
Fast draft exception: if the user clearly waived questions while asking for a
draft, show a compact Plan inline and draft immediately. Do not pause for plan
approval. End with Learning Status.
Checkpoint pressure override: if the user asks to bypass, ignore, or override a
known plan checkpoint, the checkpoint still applies. Output a plan, explain that
fast draft only waives blocking questions, then stop at PLAN CHECKPOINT.
After presenting a plan in the standard path, output the checkpoint format
(see references/checkpoints.md) and wait. Do not draft until the user
replies. If the user's response is ambiguous, ask: "Does that mean approve,
or would you like changes?"
Constraint vs. Preference
A constraint applies to one artifact ("for this memo, use short sentences").
A preference applies to future artifacts ("I always prefer short sentences in memos").
Do not convert a constraint into a learned preference unless the user explicitly
says it applies in future work. When unsure, ask.
If the current request conflicts with an older preference, output Preference Handling: say that the current explicit instruction wins for this task, keep
the older preference scoped, and do not archive it without repeated
contradictory evidence.
Signal Rules
Extract preferences only from:
- Approved plans (
plan_approved)
- Rejected plans with reasons (
plan_revision_requested)
- Accepted edits (
proposal_applied)
- Rejected edits (
proposal_rejected)
- Undone edits (
proposal_undone)
- Manual rewrites that change style, voice, or structure (
manual_rewrite)
- Explicit standing preferences (
preference_declared)
Discard for preference learning:
- Unreviewed drafts
- Model-generated text that was never reviewed
- One-off style comments or ambiguous praise
- Fact, date, citation, or domain corrections
- Current-task constraints ("this time", "for this memo", storage mode, tone,
length, or detail level) unless the user says it is a standing preference
Distillation Rules
Promote a pattern into a reusable rule only when:
- It repeats across at least two meaningful decisions, or the user explicitly declared it
- It is specific enough to guide future output
- It is not contradicted by more recent or stronger evidence
Format:
Rule: [short imperative instruction]
Applies to: [artifact-type/stage, e.g. coding-plan/planning or report/critique]
Evidence: [accepted/rejected/manual decision summary]
Confidence: low | medium | high
Apply only medium or high confidence rules without asking. Ask before
applying low confidence rules. Do not promote a single current-task
constraint into Learned Preferences.
Reference Loading
Load only the references needed for the current task. State which reference
you are reading before using it. If the artifact type is not found in a
reference, use the Universal Rubric and ask if it is sufficient — do not invent
rules not in the file.
references/artifact-types.md: routing index for artifact-specific references
references/technical-writing.md: coding plans, technical docs, design docs, and product specs
references/business-writing.md: reports, memos, proposals, academic/whitepaper, and constrained writing
references/fiction-narrative.md: fiction, narrative, essays, speeches, and poetry
references/critique-rubrics.md: artifact-specific critique criteria
references/preference-signals.md: signal examples and weighting guidance
references/checkpoints.md: checkpoint formats for question, plan, proposal, and close
references/style-distillation.md: learning reusable style packs from samples
references/translation.md: translating while preserving source style
references/multi-agent.md: optional multi-agent workflow
references/preference-journal.md: optional durable journal format
references/validation-scenarios.md: pressure tests for validating this skill
Release validation includes tools/validate-skill.mjs through npm run validate.
Optional Tool
Use bundled scripts only when the user opts into durable local preferences or
durable local style packs:
scripts/journal.mjs: initialize .writers-loop/, append decision events, and derive prefs.md.
scripts/style-pack.mjs: initialize .writers-loop/styles/, save reviewed style packs, list saved style packs, and show a selected style pack.
Common Mistakes
- Drafting before framing audience and success criteria
- Using multi-agent by default for ordinary tasks
- Applying broad rewrites when targeted edits preserve intent better
- Treating a single accepted edit as a permanent global rule
- Converting "this time" or session-only storage into a durable preference
- Reusing fiction style preferences in coding plans or reports without evidence
- Loading a style pack without stating which one is loaded
- Judging only content quality when a style-match review is also required
- Treating a fact-correction rewrite as a style preference signal
- Copying source passages or content facts into a reusable style pack
- Flattening source-language voice or rhythm into generic target-language prose
- Translating code, commands, file paths, URLs, or IDs
1---2name: writers-loop3description: Use when working on substantial writing artifacts where structure, audience fit, critique, revision, translation, style learning, or decision-backed preference learning matters; also when learning reusable writing style from the user's own writing or permitted reference samples.4---56# Writer's Loop78## Core Rule910Extract preferences only from explicit user decisions:11- Approved or rejected plans12- Accepted, rejected, or undone edits13- Manual rewrites that change style, voice, or structure (not fact corrections)14- Explicit standing preferences declared by the user1516Never extract preferences from unreviewed drafts, one-off comments, fact17corrections, or current-task constraints.18Learn from decisions, not raw drafts.1920## When to Use2122Use for writing where quality depends on structure, audience fit, correctness,23style, or iteration — typically 300+ words or any writing where feedback and24refinement are expected:2526- Coding plans, implementation plans, and technical proposals27- Business reports, research summaries, executive updates, and memos28- Product specs, design docs, documentation, and tutorials29- Fiction chapters, essays, scripts, speeches, and narrative outlines30- Poetry (limited support — use custom rubric; see `references/artifact-types.md`)31- Academic papers and whitepapers (limited support — adapt to venue requirements)32- Brand-governed or legally constrained writing (legal, clinical, regulatory, corporate)33- Style learning or style distillation from the user's own writing, permitted reference samples, files, pasted text, chapters, reports, docs, or codebase prose34- Translation where meaning, source-language writing style, voice, rhythm, formatting, terminology, or cultural effect matters3536Do not use for tiny one-off text edits unless the user asks for a reusable37process or preference learning.3839## Core Loop4041Follow the loop in order. Do not emit a later-stage section before its gate42has passed:43441. **Frame**: Identify artifact type, audience, purpose, constraints, success criteria, and desired tone.452. **Question Gate**: Ask only blocking questions. If context is enough, state assumptions and continue.463. **Plan**: Create the outline, argument, task sequence, scene plan, or section structure before drafting.474. **Plan Checkpoint**: Stop and wait for the user to approve or request changes before drafting.48 ⚠ Do not draft before approval. Exception: fast draft path (see Entry Modes).495. **Replan**: If the plan is rejected, revise only the criticized parts, reissue the full plan, and ask again.506. **Draft**: Write from the approved plan. Preserve declared constraints.517. **Critique**: Evaluate against the artifact-specific rubric. Every critique must point to a specific location and name a concrete problem — not a generic observation.528. **Propose**: Suggest targeted revisions with reason and expected improvement. Stop and wait for the user's decision on each.53 ⚠ Do not apply changes before the user responds.549. **Decide**: Record the user's apply, reject, or adjust response. Do not skip this step — preference learning depends on explicit decisions.5510. **Revise**: Apply accepted changes. Keep rejected changes out.5611. **Evaluate**: Check the revised artifact against the original success criteria.5712. **Learn**: Extract preference signals from decisions collected above. Record the signal type, applies-to scope, and evidence.5813. **Distill**: Promote repeated, high-confidence patterns into reusable rules.5914. **Reuse**: Apply stable rules in later tasks, scoped to artifact type and stage.6061## Entry Modes6263- **New artifact**: start at `Frame`, then `Question Gate`, then `Plan`.64- **Fast draft** (questions waived): Frame → state Assumptions → compact inline Plan → Draft → Learning Status. Use only when the user clearly waives questions and asks for an immediate draft. Do not use this path when the user asks to bypass, ignore, or override a known plan checkpoint; in that case, present the plan and stop at `PLAN CHECKPOINT`. Skipped questions are weak signals and will not become preferences.65- **Multi-agent**: default to single-agent. Use multi-agent only for high-stakes, long, ambiguous, or multi-audience artifacts where independent planning or critique would materially improve quality. Read `references/multi-agent.md` first.66- **Existing draft**: start at `Frame`, then `Critique`; plan only if structure is unclear. If source text is missing or placeholder-only, ask for it and use this wording: "preserve user intent, voice, plot facts, and continuity."67- **Targeted revision**: start at `Frame`, then `Propose`; keep changes at sentence or paragraph level unless the user explicitly asked for section-scale changes.68- **Style learning**: start at `Frame`, then read `references/style-distillation.md`. Output `Frame`, `Style Versus Content`, `Style Pack`, and `Storage Decision`. If the user wants to clone another person's style, confirm permission or keep the pack session-only.69- **Using a learned style**: before asking artifact questions or drafting, load the style pack from the conversation or from `.writers-loop/styles/` only when the user opted into local storage. State which pack is loaded. Draft with it, then critique content quality and style match separately. Do not copy source passages or facts from the style pack evidence. If the style pack is missing, unavailable, or the user says not to load it first, use the missing-style-pack template in `references/style-distillation.md` exactly, including `Style Pack Status`, `Content Plan`, and `Style Application Plan`. Do not draft and do not output `QUESTION GATE` or general artifact questions yet.70- **Translation**: start at `Frame`, then read `references/translation.md`. Output `Frame`, `Translation`, `Review`, and `Learning Status`; preserve source formatting inside the `Translation` section, not by omitting the loop metadata.71- **Preference update**: start at `Learn`. For storage-mode requests, confirm whether `.writers-loop/`, `journal.jsonl`, `prefs.md`, or style packs will be created before asking artifact questions. Treat tone, length, detail level, or storage mode set for the current task as a constraint, not a learned preference, unless the user says it applies in future work.7273## Planning Gates7475Ask up to five questions only when the answer would materially change the plan.76If the user skips questions, state working assumptions and continue. Skipped77questions are weak or neutral signals, not strong preferences.7879Fast draft exception: if the user clearly waived questions while asking for a80draft, show a compact `Plan` inline and draft immediately. Do not pause for plan81approval. End with `Learning Status`.8283Checkpoint pressure override: if the user asks to bypass, ignore, or override a84known plan checkpoint, the checkpoint still applies. Output a plan, explain that85fast draft only waives blocking questions, then stop at `PLAN CHECKPOINT`.8687After presenting a plan in the standard path, output the checkpoint format88(see `references/checkpoints.md`) and wait. Do not draft until the user89replies. If the user's response is ambiguous, ask: "Does that mean approve,90or would you like changes?"9192## Constraint vs. Preference9394A constraint applies to one artifact ("for this memo, use short sentences").95A preference applies to future artifacts ("I always prefer short sentences in memos").96Do not convert a constraint into a learned preference unless the user explicitly97says it applies in future work. When unsure, ask.9899If the current request conflicts with an older preference, output `Preference100Handling`: say that the current explicit instruction wins for this task, keep101the older preference scoped, and do not archive it without repeated102contradictory evidence.103104## Signal Rules105106Extract preferences only from:107- Approved plans (`plan_approved`)108- Rejected plans with reasons (`plan_revision_requested`)109- Accepted edits (`proposal_applied`)110- Rejected edits (`proposal_rejected`)111- Undone edits (`proposal_undone`)112- Manual rewrites that change style, voice, or structure (`manual_rewrite`)113- Explicit standing preferences (`preference_declared`)114115Discard for preference learning:116- Unreviewed drafts117- Model-generated text that was never reviewed118- One-off style comments or ambiguous praise119- Fact, date, citation, or domain corrections120- Current-task constraints ("this time", "for this memo", storage mode, tone,121 length, or detail level) unless the user says it is a standing preference122123## Distillation Rules124125Promote a pattern into a reusable rule only when:126- It repeats across at least two meaningful decisions, or the user explicitly declared it127- It is specific enough to guide future output128- It is not contradicted by more recent or stronger evidence129130Format:131```text132Rule: [short imperative instruction]133Applies to: [artifact-type/stage, e.g. coding-plan/planning or report/critique]134Evidence: [accepted/rejected/manual decision summary]135Confidence: low | medium | high136```137138Apply only `medium` or `high` confidence rules without asking. Ask before139applying `low` confidence rules. Do not promote a single current-task140constraint into `Learned Preferences`.141142## Reference Loading143144Load only the references needed for the current task. State which reference145you are reading before using it. If the artifact type is not found in a146reference, use the Universal Rubric and ask if it is sufficient — do not invent147rules not in the file.148149- `references/artifact-types.md`: routing index for artifact-specific references150- `references/technical-writing.md`: coding plans, technical docs, design docs, and product specs151- `references/business-writing.md`: reports, memos, proposals, academic/whitepaper, and constrained writing152- `references/fiction-narrative.md`: fiction, narrative, essays, speeches, and poetry153- `references/critique-rubrics.md`: artifact-specific critique criteria154- `references/preference-signals.md`: signal examples and weighting guidance155- `references/checkpoints.md`: checkpoint formats for question, plan, proposal, and close156- `references/style-distillation.md`: learning reusable style packs from samples157- `references/translation.md`: translating while preserving source style158- `references/multi-agent.md`: optional multi-agent workflow159- `references/preference-journal.md`: optional durable journal format160- `references/validation-scenarios.md`: pressure tests for validating this skill161162Release validation includes `tools/validate-skill.mjs` through `npm run validate`.163164## Optional Tool165166Use bundled scripts only when the user opts into durable local preferences or167durable local style packs:168169- `scripts/journal.mjs`: initialize `.writers-loop/`, append decision events, and derive `prefs.md`.170- `scripts/style-pack.mjs`: initialize `.writers-loop/styles/`, save reviewed style packs, list saved style packs, and show a selected style pack.171172## Common Mistakes173174- Drafting before framing audience and success criteria175- Using multi-agent by default for ordinary tasks176- Applying broad rewrites when targeted edits preserve intent better177- Treating a single accepted edit as a permanent global rule178- Converting "this time" or session-only storage into a durable preference179- Reusing fiction style preferences in coding plans or reports without evidence180- Loading a style pack without stating which one is loaded181- Judging only content quality when a style-match review is also required182- Treating a fact-correction rewrite as a style preference signal183- Copying source passages or content facts into a reusable style pack184- Flattening source-language voice or rhythm into generic target-language prose185- Translating code, commands, file paths, URLs, or IDs