🔀 "Write an article / Write a draft" = Write One(Mode A); "Why is nobody reading / Review" = Review One(Mode B); "Revise a version based on review comments / Revise again based on my comments" = Mode C(
references/review-turn.md)。 ⚠️ Already-written copyTo change platform style →dby-rewrite;Already-written body textOnly need formatting / save draft →dby-publish。
🔴 Four Red Lines (must not be skipped in any final state)
Red Line One: Every specific thing written into the body text must have a traceable source
Details, cases, numbers, brand and product facts, first-person scenes — every one must be traceable back to an entry in the material list(collected in Step 4).
If it cannot be traced back, leave an 【待补:…—— 请给一个真值】 style explicit placeholder and tell the user what needs to be supplied; never fill in a value that looks reasonable.
⚠️ No false positives: scenarios where all details can be traced back to the material list are not blocked — what is being judged is whether it can be verified. Attach a "Material Sources" list at the end of the final draft.
→ For criteria, placeholder style, and evidence, see references/materials.md。
Red Line Two: If the title is not decided, do not proceed
Produce candidates → user selects → only then continue. If the user has not selected, stop here and wait; do not pick one yourself and continue writing.
Red Line Three: The title must match the body text
Whatever the title promises, the body text must deliver. If the title says "5 methods" but the body text has only 3 → self-check fails; fix one side before delivery.
Red Line Four: The final draft must first be shown to the user
Before the user has seen the body text, never proceed to the step of writing it into their official account backend— even if they said at the very beginning, "push it straight to the draft box when done."
Mode A: Write One (Nine-Step Backbone)
Complete the nine steps in one go; do not seek consent step by step. Stop only twice: at Step 3, let the user choose the title; after Step 9, ask about the final state.
Fetch data via dby write prep|topics|review|articles($SKILL_DIR = this pack's directory). Only read this if bypassing it and assembling requests yourself: dby-gateway/references/protocol.md。
Step 1 · Read the profile + pull writing specifications (must precede any generation action)
node "$SKILL_DIR/scripts/dby.mjs" write prep # 五样一次拉齐;--json 另带章程全文与 samples[].content
Five items:Account charter、Creative DNA、Sample articles、Writing specifications(platform hard constraints),Material card index. The script already handles degradation: 401 goes straight red,empty profile is blocked directly, specifications unavailable still proceeds normally, fewer than 3 sample articles triggers a reminder.
🔴 In the specifications,the hard constraints section is not a suggestion; load it into context before writing; Steps 5, 6, and 9 all follow it.
→ If you needcover card / lead-insuch "furniture" or when the five items are not all gathered, read references/writing-spec.md; if not needed, do not read it.
Step 2 · Determine the topic
🔴 If the user has already said what to write → use it directly; do not ask again, and do not call the interface again.
Only fetch candidates when they have not said:node "$SKILL_DIR/scripts/dby.mjs" write topics [赛道](If no track is provided, use the one in the profile.)
Candidates pass two screens (account charter / usefulness); the screening method,one compounding article per monthand evergreen retrospective reading references/topic.md。
Step 3 · Set the goal, then set the title (🔴 the only midway pause point)
First write one line: "This piece: goal (follower growth / monetization / evergreen) / material form / reader awareness stage / person and tone", the stage determines which question the title answers; the five stages, the differences among the three goals, and theoffer table for monetization articlesread references/goals.md。
Material form = what you already have on hand(not "which category it counts as"): real experiences with a twist / interviewee's exact words → Group A; reproducible steps / multiple parallel items / verifiable specific events / phenomena or mechanisms to be explained → Group B. For how to tell them apart, read references/goals.md。
Produce 5 candidates, each passing the five-item self-check,stop and let the user choose one(they may also supply their own). After mass sending, the title can only be changed by 3 characters.
| Check item | Pass standard |
|---|---|
| Complete declarative sentence | Sent alone to someone uninformed, they can restate what the article is about; 15–28 characters (Chinese character count, one English word counts as 1 character, backend limit 64), put the core information inthe first 20 characters(in lists it is truncated after about 25–31 characters) |
| Gap | Look at this piece's goal: follower growth / monetization → choose one of curiosity gap / cognitive disruption, and the body must deliver on it;evergreen → not mandatory, a plain declarative sentence passes as is |
| Specific | Specific numbers are preferred; phrases like "make you cry / only X can understand / take a quiz" are forbidden |
| Audience match | The target reader recognizes at a glance "this is written for me" (audience words go into the title)——evergreen must also pass |
| Search fit | Contains keywords readers will actually search for——evergreen especially must pass(it relies on search to capture the long tail) |
🔴 What evergreen relaxes is the means of "creating a gap," not the goal of "making people willing to click"——an honest title still has to pass "complete declarative sentence" and "audience match."
→ For the writing checklist, character-count sources, and evergreen examples, see references/title.md。
Step 4 · Collect material
Take from the table below from top to bottom; stop once you have enough to write; each piece of material goes into thematerial list(number / original sentence or number / source); anything not on the list is not allowed into the body. Group A must collect first-person real experience details(time / place / numbers); piecing together pure opinions is not recommended.Group B is not blocked for lacking experience——what it lacks is "not enough content"; just annotate it or narrow the scope.
| Layer | Source | When to use |
|---|---|---|
| 1 | Given by the user in the current turn (including exact words from comments / direct messages) | If available, use first |
| 2 | Recorded by the user (idea library; `insp list | add`) |
| 3 | account profile + model essays | Always (already pulled in Step 1, do not fetch again) |
| 4 | Your own past articles | Have written on a similar topic |
| 5 | Material library (`material list | get |
| 6 | User knowledge base (ima / $DBY_WIKI_DIR) |
Only use it if configured; if not configured, skip and don't ask (Group A exception) |
| 7 | Platform data retrieval | User names it or the first six layers aren't enough —— 🔴 This layer is billed |
| 8 | Online verification | Only verify the facts obtained earlier; do not introduce new data |
→ For how to retrieve each layer and the material list format, read references/materials.md.
Layer 2 entries carry a record id; when creating a draft/submitting a new version (draft create/draft submit) use it as sourceItemIds(lineage); if the inspiration library is empty, say so truthfully and do not fabricate.
🔴 After retrieving all eight layers of Group A and still no anchor is obtained → stop; do not start writing the body. For the handling ladder, read references/materials.md under "When no anchor is received".
Step 5 · List the outline
🔴 First read references/genre/<你声明的素材形态>.md(copy the name verbatim); if you haven't read it, don't list an outline. After collecting materials, if you find they don't match the declaration → change the declaration and read that one instead.
Write a one-sentence core on the first line(the one idea the reader takes away); delete any block that can't point back to it.Mark each block with which entries from the material list it uses(numbers) —— if it can't point to any, go back to Step 4 to supplement, or leave a placeholder per red line one.
→ For structure and subheadings, read references/craft.md(Choose one; don't mix them)。
Step 6 · Write the body
Write by "block"; one level-one subheading counts as one block. Order: lead-in first → then body → ending last. Deliver on the title within the first 150 characters.
→ For opening/ending/sentence-level rules, see references/craft.md。When there isn't enough content, don't pad; go write details—— details come only from the material list (red line one).
🔴 Hard constraints must be upheld while writing, based on the Step 1 specification,don't write from an old checklist in memory。
🔴 Write the tone in this account's own voice, not the default AI tone。prep The output voiceSystemPrompt(as writing settings) and taboos(not a single one may be violated, scan item by item after writing) must be used before starting to write; if both are empty, write as usual, and at delivery state that it's a generic tone (go dby-charter steam),don't stop to ask because of this。
Take the ending's call to action from the profile(productsJson[].ctaScript; if there is none, leave a placeholder per red line one,never make up an endorsement yourself) —— for how to retrieve it, see references/craft.md。
Step 7 · Rewrite
🔴 Don't submit the first draft directly. Four-step subtraction (rewrite from an oral summary / read aloud and mark the tangled spots / delete big first, then small / delete anything you're not sure is true and start over) read references/craft.md。
Step 8 · Write the summary and message
SummaryWrite it per the "alternate title"; don't write it as an abridgment of the body.Message(the author's first message on their own article)is optional—— not writing it doesn't affect delivery; don't record it as an unfinished item. → For how to write it, see references/craft.md。
Step 9 · Final draft self-check
Six things; not one may be missing:
- Prohibited words and superlative terms → go
dby-banned-words, check the title + summary + body together, and check only the WeChat Official Account platform;must run in any final state. For the command line, seereferences/api-contract.md。 - Ad labeling: If the body contains purchase methods (link / QR code / store name), it must be marked "Advertisement" at the top; if not marked, do not deliver; delete sentences inducing follows. → For legal provisions and scope of application, read
references/craft.md"Call to action at the end". - AI disclosure: This draft was written by an agent; the 《Labeling Measures》 (effective 2025-09-01) require the publisher toactively disclose; when handing over the draft, tell the user and let them decide,do not omit it on their behalf. → For legal provisions and platform requirements, read
dby-deai/references/平台标注.md。 - Title-body match(Red Line 3): compare against the one-sentence core from Step 5.
- Fact source verification(Red Line 1): every detail / case / number / brand fact / first-person scenemust be traced back one by one to the source sheet number; those that cannot be traced back should be changed to placeholders.
- Check platform hard constraints item by item: go through the "Hard Constraints" subsection specified in Step 1; if not obtained, truthfully say "this time it was not checked against hard constraints,"do not pretend it was checked。
Self-check passed → hand the final draftto the user for review(Red Line 4), only ask "what is unclear / what drags," then ask about the end state. Group A and the user dictated a new experience this round → show the proposed card-face content and propose saving it to the material library:write only after confirmation, once only, and after two consecutive refusals do not bring it up again。
Handoff: ask about the end state
After the final draftmust ask, do not infer:
How far do you want this piece to go? ① Just want this final draft, I will publish it myself ② Want formatted WeChat official account HTML ③ Save it to my own WeChat official account drafts
① Stop here. ②③ go through dby-publish — command line, account binding conditions, save to disk first .md, receipt four lines → references/api-contract.md。
Mode B: Review one article
→ read references/review-mode.md(write review to sort into four quadrants,give only one repair action).
🔴 Three things must not be simplified away:state which tier of metric is used(a proxy tier must never be described as "open rate × share rate"),the baseline can only be this account's own historical median、if there are fewer than 5 articles, bring "for reference only" to the user。
→ If the user wants to practice writing / asks "how to improve," read references/practice.md.
Mode C (revise a version according to review comments) → references/review-turn.md(draft review-packet→ respond item by item → submit a new version).
Next step
For the API contract table, see references/api-contract.md; the profile'swriteis not in this package, go through dby-charter.
If the final draft needs HTML / to go into drafts → dby-publish; to publish to other platforms → dby-rewrite(seven-platform tone, free); if unsure → dby(WeChat official account flywheel master navigation).
If the user says "it reads like AI" → dby-deai(point out sentence by sentence where it seems so; whether to change it is for the user to decide).do not make decisions on their behalf and run it for them: Step 6 has already written in this account's voice; layering another layer will flatten it.