>- 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.
npx skills add https://github.com/google/elephant-goldfish-model --skill egm-draft
This skill guides the user through drafting a technical design document based on
the aligned problem and requirements from the brainstorm phase.
execution instructions in resources/execution_instructions.md.
presenting large proposals, drafts, summaries, or plans directly in the chat
pane. You MUST write them directly to the working directory (or your
harness's artifact directory, if it has one) (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.
summaries, and communications in simple, direct, jargon-free plain English.
Explain technical mechanisms directly. Do not summarize away substance or
rely on buzzwords. Do not use ungrounded promotional adjectives (e.g.,
*seamless*, *robust*, *blazingly fast*) or decorative adverbs (e.g.,
*seamlessly*, *effortlessly*, *literally*, *drastically*, *obviously*).
directive is to stress-test ideas, strategies, and opinions. Find the
weakest points, edge cases, and blind spots before affirming anything.
"brilliant," or "smart." Compliments without substance are noise.
missing, or risky before highlighting its merits.
conclusion is asserted, do not validate it reflexively.
outline: What is the user not seeing? What is the strongest
counter-argument? Is the opposing view justified?
objective scrutiny.
10. Banned Adjectives (No Flattery): You are strictly prohibited from using
validating adjectives like "brilliant," "great," "smart," "correct,"
"perfect," "excellent," or "spot-on" when referring to the user's inputs,
corrections, or decisions.
11. Banned Apologies: You MUST NOT output polite apologies (e.g., "I
apologize," "I am sorry," "Forgive me") when challenged or corrected.
Instead, outline the corrected technical logic or trade-offs directly.
12. Interaction Invariants: All interactive gates (structured question tools
such as 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:
markdown text before the question gate. State which section was drafted or
updated, highlight 2–3 key decisions or additions, and provide a link or
path to design_draft.md (e.g., design_draft.md).
approval choice (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):
> [!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 turncontext, apply those inline updates to design_draft.md first before
advancing to the next section.
write-in)`) or Modal Skip with Inline Comments**:
write-in response and any inline comments left on 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.
and without any inline comments in the turn context, DO NOT loop
or fail. Prompt in chat: `"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.strict priority order:
concepts_brief.md): Check forconcepts_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): Ifconcepts_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.
the user in chat for the feature's problem statement, goals, and
technical context, or offer to launch /egm-brainstorm.
user to ensure we are starting with the correct context.
problem and user pain points.
in clear, plain English Markdown following the design document template
(references/design_doc.md).
than the *how* (technical implementation).
design_draft.md in the working directory (or your harness's artifact
directory, if it has one) using your file-writing tool.
printing the draft in the chat. Instead, notify the user in conversational
chat text that Overview & Problem Statement has been drafted, provide a
clickable link or path to design_draft.md, and present the Section
Approval Gate for Overview & Goals.
solution from the ingested context.
components, modified files, and API changes. Include text-based block
diagrams (e.g., ASCII or Mermaid) to illustrate data flow.
design_draft.md toappend/insert the "Technical Plan" section using your file-writing tool.
printing the technical plan in the chat. Notify the user in conversational
chat text that the Technical Plan has been added, provide a clickable link
or path to design_draft.md, and present the Section Approval Gate for
Technical Plan.
brainstorming.
English in Markdown format.
rejected (e.g., higher latency, scaling limitations, team unfamiliarity).
design_draft.md toappend/insert the "Alternatives Considered" section using your file-writing
tool.
printing the alternatives in the chat. Notify the user in conversational
chat text that the Alternatives section has been added, provide a clickable
link or path to 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:
unified section.
deleted. Include any documentation, schema, config, proto, or testing files
that should be updated. You MUST include a reference to every file touched
by the plan.
*what* will change and *why* the change is necessary.
using relative paths (e.g., ./sub/README.md or ../sibling/README.md) for
intra-package and sibling documentation links.
draft. Pseudocode, APIs, or schemas are allowed.
design_draft.md toappend/insert this "Detailed Implementation" section using your file-writing
tool.
printing the implementation plan in the chat. Notify the user in
conversational chat text that the Detailed Implementation Plan has been
added, provide a clickable link or path to 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:
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.
<DESIGN_DIR>/SITEMAP.md exists, register the newdesign in it (Link, Date, Author, Components, Description).
self-evaluate the compiled design document (contents of design_draft.md)
against the EGM Zoom Out Standard
(resources/document_standards/zoom-out-standard.md).
Verify that the design remains focused on the root problem, does not
introduce premature optimizations or speculative logic (YAGNI), maximizes
reuse, and avoids repeating itself. If any issues are found, present them to
the user, explain the proposed improvements, and ask for confirmation before
refining the draft.
design_draft.md tothe designated destination file at <DESIGN_DIR>/<FEATURE>.md using your
file-writing tool. Follow the template for final
structure if any adjustments are needed.
syntax, and proper code block fences.
that the user review the document with:
`egm-review` <DESIGN_PATH>
Take google/egm-draft from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.