$npx -y skills add Borda/AI-Rig --skill createInteractive outline co-creation for developer advocacy content — collects format, audience profile, story arc (Problem→Journey→Insight→Action), and voice/tone; detects out-of-scope requests (FAQs, comparison tables); surfaces conflicts between user brief and audience needs. Write
| 1 | <objective> |
| 2 | |
| 3 | Story arc four-beat: Problem → Journey → Insight → Action. |
| 4 | |
| 5 | NOT for: implementation, code gen, README writing (use `foundry:doc-scribe`), structured ref docs (FAQs, comparison tables — use `foundry:doc-scribe`). |
| 6 | |
| 7 | </objective> |
| 8 | |
| 9 | <inputs> |
| 10 | |
| 11 | - **$ARGUMENTS**: optional — topic or goal, any form; one sentence enough. Format hints accepted ("a blog post about…", "talk abstract for…"). |
| 12 | |
| 13 | </inputs> |
| 14 | |
| 15 | <workflow> |
| 16 | |
| 17 | **Task hygiene**: Call `TaskList`; mark clearly-done tasks `completed`, orphaned tasks `deleted`, genuinely-continuing tasks `in_progress`. |
| 18 | |
| 19 | **Task tracking**: TaskCreate all steps before any tool calls. |
| 20 | |
| 21 | ## Step 1 — Parse topic and out-of-scope detection |
| 22 | |
| 23 | - If $ARGUMENTS provided: extract topic; note embedded format hint. |
| 24 | - If no $ARGUMENTS: AskUserQuestion — "What are you trying to write about, and for whom?" (free text). After receiving the answer, re-check against out-of-scope conditions: if answer describes FAQs, comparison tables, feature matrices, README content, or docstrings — stop. Respond: "This format doesn't fit a narrative arc — use `foundry:doc-scribe` for structured reference content." No further steps. |
| 25 | - Out-of-scope gate (when $ARGUMENTS provided): if brief describes FAQs, comparison tables, feature matrices, or ref docs — stop. Respond: "This format doesn't fit a narrative arc — use `foundry:doc-scribe` for structured reference content." No further steps. |
| 26 | |
| 27 | ## Step 2 — Format and audience (1 AskUserQuestion call — 2 questions) |
| 28 | |
| 29 | **Format + audience** (single AskUserQuestion call with 2 questions): |
| 30 | |
| 31 | - Q1 "What content format?": (a) blog post · (b) conference / meetup talk with Marp slide deck ★ · (c) social thread (X/LinkedIn) · (d) talk abstract (CFP submission) · (e) lightning talk (5–10 min) |
| 32 | - Q2 "Who is the audience?": (a) beginners — new to problem space ★ · (b) intermediate — familiar with basics, seeking depth · (c) expert — know landscape, want novel insight · (d) describe your own profile |
| 33 | |
| 34 | After answer: restate one sentence covering format + audience ("Got it — a [format] for [audience description]."). |
| 35 | |
| 36 | ## Step 3 — Arc construction and conflict check |
| 37 | |
| 38 | Propose four-beat arc from topic + audience: |
| 39 | |
| 40 | - **Problem**: concrete opening hook — specific pain or question, not generic |
| 41 | - **Journey**: 3–5 key points (what tried, what failed, what arc covers) |
| 42 | - **Insight**: core "aha" framed for stated audience level — name directly |
| 43 | - **Action**: specific next step for audience |
| 44 | |
| 45 | **Editorial conflict check**: if brief implies expert audience but topic introductory, or vice versa — surface before continuing: |
| 46 | > "Your brief suggests [X] but audience profile is [Y] — recommend adjusting [Z]. Proceed as-is or adjust?" |
| 47 | |
| 48 | **Arc approval + voice** (single AskUserQuestion call): show proposed arc, then ask voice choice — option (d) redirects to arc adjustment. |
| 49 | |
| 50 | Options: |
| 51 | - (a) Approve arc — neutral developer advocate (balanced, educational) ★ |
| 52 | - (b) Approve arc — opinionated / direct first-person, no hedging |
| 53 | - (c) Approve arc — conversational / approachable, informal |
| 54 | - (d) Adjust the arc first (free text — describe what to change) |
| 55 | |
| 56 | On (d): revise arc, re-present, re-invoke this question. After (a)/(b)/(c): restate confirmed arc and voice in two sentences. |
| 57 | |
| 58 | ## Step 4 — Write outline file |
| 59 | |
| 60 | - Derive slug from topic: kebab-case, max 5 words (e.g. `tracing-python-services-otel`). |
| 61 | - Write creates `.plans/content/` if absent — no separate mkdir needed. |
| 62 | - **Anti-overwrite check before writing the outline**: list existing files matching `.plans/content/<slug>-outline*.md` (Bash `ls -1 .plans/content/<slug>-outline*.md 2>/dev/null || true`). If `.plans/content/<slug>-outline.md` already exists, append the smallest available counter suffix (`-2`, `-3`, …) per quality-gates.md output routing convention. Resulting path becomes the new `<outline-path>`; use it in the Write call AND in the Step 4 gate spawn prompt below. Print the resolved path before writing. |
| 63 | - Write `<outline-path>` with this structure: |
| 64 | |
| 65 | ```md |
| 66 | --- |
| 67 | topic: <topic from brief> |
| 68 | created: YYYY-MM-DD |
| 69 | --- |
| 70 | |
| 71 | ## Audience |
| 72 | [who they are, experience level, what they've likely seen, what they need] |
| 73 | |
| 74 | ## Format |
| 75 | [blog post | conference talk (N min) | social thread (x|linkedin) | talk abstract | lightning talk (N min)] |
| 76 | |
| 77 | ## Voice |
| 78 | [tone brief: e.g., "direct and opinionated, first-person, no hedging"] |
| 79 | |
| 80 | ## Arc |
| 81 | |
| 82 | ### Problem |
| 83 | [co |