Author brief
Skill eugenelim/agent-ready-repo/.agents/skills/author-brief
Use this skill when the user has unstructured external input (an email thread, a prose description, a Linear Issue, a stakeholder message) and needs to produce a DoR-compliant product brief and queue it in workspace.toml. Triggers on "author a brief", "write a brief from this email", "create a brief from this Linear issue", "intake this brief", "turn this into a brief". Do NOT use to decompose an existing brief into specs (use receive-brief) or to author a single feature from scratch (use new-spec).From its SKILL.md
npx -y skills add eugenelim/agent-ready-repo --skill author-briefAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.1 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
Skill: author-brief
Turn any unstructured external input into a DoR-compliant product brief,
then queue it so workspace-status can surface it immediately.
author-brief stops at draft — it does not decompose the brief into specs
and does not set Status: Ready. Those are receive-brief's job. The two
skills have distinct entry points and must stay distinct.
When to invoke
- The user has an email thread, a prose description, a Linear Issue body, or a stakeholder message they want to turn into a brief.
- The unit of work is larger than one feature (otherwise use
new-spec). - The brief does not yet exist as a file in
docs/product/briefs/.
If the input is already a well-formed brief file, go directly to receive-brief.
If the user wants to record a decision already made, use new-adr.
Procedure
1. Ingest
Accept whatever the user provides: a pasted email, a prose block, issue text, a verbally-described idea. Do not reject partial or messy input — the brief template is a guide, not a form. The goal is to extract enough signal to elicit what is missing.
2. Identify
Scan the input for DoR fields already present:
- Outcome — a user-facing or system change the input is trying to achieve; often in the subject or opening sentence.
- Appetite — a time or effort constraint ("this needs to ship before the conference", "a sprint, not a quarter").
- Rabbit holes — named design traps, constraints, or things to avoid ("don't touch the billing system", "not the API redesign").
Name what you found and what is missing. Be specific: "I found an Outcome ('reduce checkout abandonment by surfacing error messages inline') but no Appetite and no Rabbit holes."
3. Elicit
Ask for each missing DoR field conversationally. Rules:
- Insist on Outcome. If the input contains no clear outcome, ask for it before proceeding. Do not fabricate an outcome.
- Offer defaults for the rest. If no Appetite is stated, offer a default ("no Appetite stated — shall I default to 'a few weeks, not a quarter'?") rather than blocking.
- Surface the Rabbit holes gap. ≥1 Rabbit hole is required for the DoR gate. If the input contains none, ask the user to name at least one design trap or out-of-bound exploration before proceeding.
- Do not invent. Never fabricate missing fields. Do not silently derive a Rabbit hole from the problem description without confirmation.
4. Create
- Confirm the slug with the user (kebab-case, matches the filename).
- Check for a slug collision: if
docs/product/briefs/<slug>.mdalready exists, stop and prompt the user before proceeding — do not silently overwrite an existing brief. - Write the brief file at
docs/product/briefs/<slug>.mdusing the updated template (_template.mdin that directory). Populate all fields gathered in steps 1–3. SetStatus: Draft. Leave a Spec map placeholder row (do not run decomposition — that isreceive-brief's job). - Stage the file.
5. Queue
Check workspace.toml in the working directory:
- Absent or unparseable: create the brief file only. Emit the named diagnostic below — do not throw an error.
- Present and parseable:
- If multiple sections have
status = "active", prompt the user to select which initiative'sbrief_queue.draftlist the new brief joins. Do not guess. - If no active initiative exists, or the active initiative has no
brief_queuesub-table: emit the named diagnostic below and continue with file-only operation. - Otherwise: append the brief's path as a string element to
["<initiative-slug>".brief_queue].draftusing a comment-preserving edit (targeted text insertion ortomlkit; never a fulltomllib+tomli_wround-trip). Stage the file.
- If multiple sections have
Named diagnostic (all no-write cases):
"workspace.toml not available — brief created at docs/product/briefs/<slug>.md; add the path manually as a string element in [\"<initiative-slug>\".brief_queue].draft (e.g. append \"docs/product/briefs/<slug>.md\" to the list)."
6. Hand off
Tell the user:
"Brief is queued as draft at
docs/product/briefs/<slug>.md. Runreceive-briefto decompose it into specs and mark it ready."
DoR gate
A brief is eligible for Ready when it carries:
- Outcome — non-empty outcome statement.
- Appetite — a time/effort constraint.
- ≥1 Rabbit hole — at least one named design trap or uncertainty.
- Spec map skeleton — at least one placeholder row.
author-brief elicits these fields but does not set Status: Ready,
even when all four are populated. The brief exits this skill as Status: Draft.
Only receive-brief's write-back step (after decomposition is confirmed) sets
Status: Ready.
Anti-patterns to refuse
- Running decomposition. That is
receive-brief's job. Stop at draft. - Setting
Status: Ready. That isreceive-brief's write-back step. - Inventing a slug the user did not confirm. Confirm it in step 4.
- Fabricating missing DoR fields. If Outcome is absent, ask. Do not derive it silently from the problem description.
- Silently overwriting an existing brief file. Prompt before proceeding if
docs/product/briefs/<slug>.mdalready exists. - Guessing the target initiative when multiple active ones exist in
workspace.toml. Prompt for selection in step 5. - Making
workspace.tomlwrites blocking. A missing, unparseable, or no-brief_queue file degrades to file-only operation with the named diagnostic. Never stop skill execution for a TOML write failure.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.