Drafts a design document section-by-section using the concepts brief from egm-brainstorm (or user notes). This is the second step in the Elephant-Goldfish (EGM) feature flow. Use when you are ready to write a design doc after aligning on requirements + solution.
When running in Codex or ChatGPT Work, first read Codex integration.
In Claude Code or Cowork, read ${CLAUDE_PLUGIN_ROOT}/docs/claude.md first.
This skill guides the user through drafting a technical design document based on the aligned problem and requirements from the brainstorm phase.
resources/execution_instructions.md.design_draft.md or
./design_draft.md) using your file-writing tool and tell the user in chat
the file path and ask for review. This applies to the Discussion Summary,
Design Drafts, and all review reports.ask_question, if your harness has one, or plain chat) MUST contain
strictly one question (len(questions) == 1), be the sole tool call in the
turn, and provide clear, action-oriented options without (Recommended)
prefixes.Context File (Optional): File path to a predecessor document (e.g.,
docs/designs/<feature_name>.md, concepts_brief.md, or
discussion_summary.md). If omitted, the skill defaults to consuming
predecessor context (e.g., concepts_brief.md or discussion_summary.md).Follow these steps sequentially. Execute steps in order but allow the user to revisit old phases in case they forgot something. Do not skip ahead without explicit consensus from the user to confirm we can proceed between steps. Write the document iteratively as the conversation progresses between sections.
After writing or updating each section in design_draft.md using your
file-writing tool, you must present the approval gate in the same turn following
this strict generation order:
design_draft.md (e.g., [design draft](/absolute/project/design_draft.md) in Codex).ask_question
with len(questions) == 1 and is_multi_select: false if your harness has
one, or plain chat):[!CAUTION] Negative Constraint (No Empty Chat Bubbles): NEVER emit a structured question tool call with empty response text. Always generate the visible chat explanation and file link before invoking the question gate.
{
"questions": [
{
"question": "Drafted [Section Name] in design_draft.md. Please review. How would you like to proceed?",
"options": [
"Approve [Section Name] and proceed to next section",
"Request revisions to [Section Name] (via inline comments or write-in)"
],
"is_multi_select": false
}
]
}
Approve [Section Name] and proceed to next section):
design_draft.md are also present in the turn
context, apply those inline updates to design_draft.md first before
advancing to the next section.Request revisions to [Section Name] (via inline comments or write-in)) or Modal Skip with Inline Comments:
design_draft.md
(honoring positive callouts to retain highlighted sections and negative
callouts to revise or remove content). Apply all revisions to
design_draft.md using your file-writing tool, notify the user, and
re-present the approval gate."Please specify the adjustments or additions needed for [Section Name] (either via inline comments on design_draft.md or here in chat) so I can revise the draft." and yield active execution
to wait for user clarification in chat.Context File is specified, read and parse it directly.concepts_brief.md): Check for
concepts_brief.md in ./concepts_brief.md, the conversation artifact
directory, or scratch/concepts_brief.md. If found, ingest and parse
the brief.discussion_summary.md): If
concepts_brief.md is not found, check for discussion_summary.md in
./discussion_summary.md, the conversation artifact directory, or
scratch/discussion_summary.md. If found, ingest and parse the summary.
Do NOT prompt the user to start /egm-brainstorm or warn of
deprecation.egm-brainstorm
skill with the host's command form (for example /egm:egm-brainstorm
in Claude Code and agy CLI, or the skill picker in Codex).Author from the ingested brief if it has one.
Otherwise use git config user.name, then GIT_AUTHOR_NAME. If neither is
set, prompt the user in chat. Record it in the document header.references/design_doc.md).design_draft.md in the working directory (or your harness's artifact
directory, if it has one) using your file-writing tool.design_draft.md, and present the Section
Approval Gate for Overview & Goals.design_draft.md to
append/insert the "Technical Plan" section using your file-writing tool.design_draft.md, and present the Section Approval Gate for
Technical Plan.Alternatives Weighed section of the ingested context. Do not
rely on memory: drafting often runs in a new session. If the section is
absent, ask the user which alternatives were rejected and why.Rejected by author: [technical rationale].
Do NOT state Rejected by maintainer unless quoting an upstream maintainer
issue, discussion, or PR URL.design_draft.md to
append/insert the "Alternatives Considered" section using your file-writing
tool.design_draft.md, and present the Section Approval Gate for
Alternatives Considered.Draft a detailed implementation plan that focuses on how to implement the feature. This plan must be detailed. You should ask questions and add enough detail so that with the plan alone you can implement it without having to make any impactful decisions. Follow these guidelines:
./sub/README.md or ../sibling/README.md) for
intra-package and sibling documentation links.design_draft.md to
append/insert this "Detailed Implementation" section using your file-writing
tool.design_draft.md, and present
the Section Approval Gate for Detailed Implementation.When you are asked to write or save the design document, follow these rules strictly:
Reconcile against the Predecessor Context: Do not grade the draft
against the Zoom Out standard here. The session that wrote the draft agrees
with it; /egm-review Stage 5 runs that check from a fresh context.
Instead, re-read the context ingested at Step 1 and compare it with the
draft. No Goldfish can do this check, because no Goldfish reads the brief.
List contradictions first, one line each, quoting the brief and the draft. Ask the user to decide each one. Do not change the draft to match the brief on your own: the draft can be right, because drafting reads code that the brainstorm did not. If nothing diverges, say so in one line. If Step 1 found no predecessor file, skip this step.
If a contradiction is open, stop and wait for the user. Apply each
decision to design_draft.md before Step 6.2.
Target Directory: If the user specified a target directory or file, use
it. Otherwise, probe the workspace for existing design directories (from
Context File directory, docs/designs/, or <project>/docs/designs/),
bind [DiscoveredPath] (defaulting to docs/designs/), and present a
single-select gate (using a structured question tool such as ask_question
with len(questions) == 1 and is_multi_select: false if your harness has
one, or plain chat):
{
"questions": [
{
"question": "Where should the design be saved?",
"options": [
"Save to detected directory: [DiscoveredPath]",
"Specify custom target directory"
],
"is_multi_select": false
}
]
}
<DESIGN_DIR> to [DiscoveredPath].<DESIGN_DIR> to supplied path. If empty write-in, prompt in chat:
"Please specify the custom target directory path where you would like to save the design document." and yield active execution.Update Sitemap: If <DESIGN_DIR>/SITEMAP.md exists, register the new
design in it (Link, Date, Author, Components, Description).
Write doc: Once finalized, write the contents of design_draft.md to
the designated destination file at <DESIGN_DIR>/<FEATURE>.md using your
file-writing tool. Follow the template for final
structure if any adjustments are needed.
Clean Formatting: Ensure clean standard Markdown formatting, valid table syntax, and proper code block fences.
Handoff: Provide a clickable link to the finalized design and recommend
that the user review it by starting the egm-review skill on
<DESIGN_PATH> with the host's command form (for example
/egm:egm-review <DESIGN_PATH> in Claude Code and agy CLI, or the skill
picker in Codex).
Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/egm-draft · pinned to the source commit
# Run from your project root
git clone https://github.com/google/elephant-goldfish-model.git .skillboard-tmp
git -C .skillboard-tmp checkout bdcfe8cdaee99699c4b2cb7ad4e3b2c1a6b56a31
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/distributions/claude/skills/egm-draft" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/google/elephant-goldfish-model.git .skillboard-tmp
git -C .skillboard-tmp checkout bdcfe8cdaee99699c4b2cb7ad4e3b2c1a6b56a31
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/distributions/claude/skills/egm-draft" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/egm-draft
Scanner static-checks@0.1.0 · commit bdcfe8cdaee9. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
References parent-directory traversal, which can escape a target directory.
Evidence: ../· fingerprint fa08499e14d0113b