
Write Product Spec
Draft a behavior-first PRODUCT.md before a substantial Warp-facing feature so implementation and review share one consumer-level contract.
Install
npx skills add https://github.com/warpdotdev/common-skills --skill write-product-specWhat is this skill?
- Produces PRODUCT.md focused on observable behavior, not internal modules or algorithms
- Defines "user" as whoever consumes the surface—UI humans, API callers, library users, or CLI operators
- Explicitly bans implementation details so agents implement against consumer invariants
- Triggers on PRD, desired behavior doc, or behaviorally ambiguous substantial features
- Aims to prevent regressions by making acceptance criteria unambiguous for reviewers
Adoption & trust: 3.5k installs on skills.sh; 18 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Grill Memattpocock/skills
Grill With Docsmattpocock/skills
Brainstormingobra/superpowers
Lark Tasklarksuite/cli
Lark Workflow Standup Reportlarksuite/cli
Cavemanjuliusbrussee/blueprint
Journey fit
Primary fit
Ambiguous features get scoped and de-risked in Validate before heavy Build work; PRODUCT.md is the canonical artifact at that gate. Scope is where desired behavior, invariants, and edge cases are nailed down without leaking implementation.
Common Questions / FAQ
Is Write Product Spec safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Write Product Spec
# write-product-spec Write a `PRODUCT.md` spec for a significant feature in Warp. ## Overview The product spec should make the desired behavior unambiguous enough that an agent can implement it correctly and avoid regressions. Describe the feature purely from the user's perspective — what the user sees, does, and experiences, and the invariants that must hold for them. Do not include implementation details (internal types, state layout, module boundaries, data flow, algorithms). "User" is not limited to the end user of the Warp app. It means whoever consumes the surface being designed: - For UI / UX features: the human using Warp. - For a data model: the code that reads and writes that model. - For an API, protocol, or library: the callers of that API — other services, client code, plugins, or agents. - For a CLI tool or developer-facing surface: the developer invoking it. The spec should describe behavior from that consumer's perspective: the shape of the surface, the operations they can perform, what they see back, invariants they can rely on, and edge cases they must handle — without prescribing how the surface is implemented underneath. Implementation details, validation, and test planning live in a companion `TECH.md`, produced by the `write-tech-spec` skill. Writing the product spec is usually the first step of a two-step process: once `PRODUCT.md` is agreed on, invoke `write-tech-spec` to produce `TECH.md` for the same feature (or let the user know that's the expected next step). The product spec should be written so the tech spec can be written directly from it. Write specs to `specs/<id>/PRODUCT.md`, where `<id>` is one of: - a Linear ticket number (e.g. `specs/APP-1234/PRODUCT.md`) - a GitHub issue id, prefixed with `gh-` (e.g. `specs/gh-4567/PRODUCT.md`) - a short kebab-case feature name (e.g. `specs/vertical-tabs-hover-sidecar/PRODUCT.md`) `specs/` should contain only id-named directories as direct children — no engineer-named subdirectories. Ticket / issue references are optional. If the user has a Linear ticket or GitHub issue, use its id. If they don't, ask them for a feature name to use as the directory. Only create a new Linear ticket or GitHub issue when the user explicitly asks for one; in that case use the Linear MCP tools or `gh` CLI respectively (and `ask_user_question` if team, labels, or repo are unclear). ## Before writing Gather only the context you need: directory id (Linear ticket, GitHub issue, or feature name), feature summary, target users, key behaviors, edge cases, and how the feature will be validated. Use `ask_user_question` for missing context rather than guessing. ### Figma mocks If the feature has any UI or interaction design, ask the user whether a Figma mock exists before drafting the Behavior section, and include the link in the spec when one is provided. A mock is often the most reliable source of truth for visual states, spacing, and edge-case layouts — not asking can cause the Behavior section to guess at intent the designer already settled. - If the user provides a link, include it under a short `## Figma` section (or inline near the top of Behavior) as `Figma: <link>`. - If the user confirms no mock exists, note `Figma: none provided` so the absence is explicit rather than ambiguous. - If the feature is purely backend (data model, API, CLI with no visual surface), skip the question and omit the section. Do not silently drop design context; an explicit "none" is preferable to no mention at all on features where design would normally be expected. ## Stru