About cawplan-plan-create
cawplan-plan-create is a skill for creating CawPlan versions and tickets, aimed at product teams turning specified release plans or OKRs into tracked work. It checks the backlog for duplicates and requires confirmation before creating or moving tickets.
Key features
- 01Create a specified version
- 02Turn tasks into version tickets
- 03Check backlog for semantic duplicates
- 04Move matching backlog tickets
- 05Preview and confirm before changes
Use cases
- 01Create a plan from explicit release needs
- 02Turn OKR goals into ticket candidates
- 03Move existing backlog work into a version
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ cawcut/ skill-cawplan --skill cawplan-plan-createAfter installing, type/cawplan-plan-createin Claude Code to confirm it loaded.
Details
From the project READMECawPlan Plan Create
Bootstrap
cawplan skill check
Entry Routing
| Input | Flow |
|---|---|
| Explicit version name + optional explicit ticket list | A — Direct create |
| Pasted OKRs / stage goals, asking to generate a plan from them | B — OKR-driven plan |
Ticket field semantics
For every ticket create or update, use description for the short title/summary and remarks for the detailed page description/body (HTML supported). Never put a long description body in description.
Workflow A — Direct create
-
Resolve product name to
product_id:cawplan products list --search "<product name>"Continue only after an exact accessible-name match (case-insensitive after trimming whitespace), a unique short-form/token-prefix match, or explicit user confirmation of a listed candidate. If the user's stated product is absent or ambiguous, list candidates (name +
product_id) and ask which product they mean; do not guess or create anything. If more than one match exists, ask the user to pick. This applies whether reached from Workflow A or Workflow B. -
Create the version:
cawplan versions create <product_id> --name <X.Y.Z> --description "<goals>" -
If the user provided tickets or tasks, create them on the new version:
cawplan tickets create-version <product_id> <version_id> \ --description "<ticket title/summary>" \ --remarks "<html body>" \ --type FEATURE --priority MEDIUMRepeat for each ticket. Include
--remarksonly when the user provides ticket body details; it supports HTML. Resolve assignees withcawplan users query --email <email>when provided.
Workflow B — OKR-driven plan
CawPlan has no effort-estimate or story-point field anywhere in the ticket schema — any estimate here is a rough LLM guess, never an authoritative number, and must be labeled as such everywhere it's shown.
- Resolve product (Workflow A step 1) and get the target version name — same rule as Workflow A: ask if not provided, never invent one.
- Fetch the existing backlog to dedupe against:
Page through fully — a partial backlog list makes dedup unreliable, not just incomplete. The response is acawplan backlog list <product_id> --page_size 100CommonPageResp(data,page_num,page_size,total); keep incrementingpage_numwhilepage_num * page_size < total, don't stop after one page just because it came back full. Keep each result'sunique_id(notdisplay_id— the display ID is for showing to the user, the API calls needunique_id), plus its currenttype/priority, for steps 4 and 6. - Extract candidate work items from the pasted OKRs/goals — one ticket per distinct goal/initiative the text actually states. Don't invent scope, sub-tasks, or acceptance criteria that aren't in the source text; if a goal is too vague to turn into a concrete ticket, list it as a question for the user instead of guessing.
- Dedupe against the backlog for each candidate, by meaning, not exact string match:
- Strong match (the backlog item is clearly the same piece of work) → don't create a duplicate ticket. Plan to move the existing backlog ticket into the new version instead (see step 6); carry over its existing
unique_id,type, andpriorityfrom step 2 — a moved ticket's preview row reflects what it actually is today, not Workflow A's FEATURE/MEDIUM defaults (those only apply to genuinely new tickets). - Partial/uncertain overlap → treat the OKR item as a new ticket, but flag the backlog item alongside it as "possibly related — worth checking manually" rather than silently merging two things that might not actually be the same. Persist this flag into the new ticket's
--remarks, not just the preview — it should survive after the chat session ends. - No overlap → new ticket, no flag.
- Strong match (the backlog item is clearly the same piece of work) → don't create a duplicate ticket. Plan to move the existing backlog ticket into the new version instead (see step 6); carry over its existing
- For each new-ticket candidate, add a rough effort estimate labeled unambiguously as a guess (e.g. "~M rough estimate, unverified" in the remarks or in the preview — not as a committed number), based only on the scope described in the source text.
- Preview before creating anything — this step involves interpretation (goal → ticket) and reuse decisions (move vs. create), both of which carry real misread risk. Show: version name, and for each candidate — title, type, priority, rough estimate, and whether it's "new" or "move existing backlog ticket
<display_id>". Get explicit confirmation before running any create/update command. - On confirmation:
- Create the version (Workflow A step 2).
- For "new" candidates:
cawplan tickets create-version(Workflow A step 3), same field conventions. - For "move existing" candidates: a backlog ticket's
version_idequals its ownproduct_idby convention (that's what makes it "backlog" rather than version-scoped — seereferences/CAWPLAN_OPEN_API.md's backlog ticket notes), so:
Use thecawplan tickets update <product_id> <product_id> <backlog_ticket_unique_id> --target_version_id <new_version_id>unique_idkept from step 2, not the display ID. Moving, not duplicating, keeps the ticket's history intact.
Rules
- Ask for the version name if not provided. Do not invent or auto-increment a version number.
- Require an exact version name in
X.Y.Zformat before creating. - If a
--major_idis needed (to associate with a major version), resolve it first:cawplan versions list <product_id> - Default ticket type to
FEATURE, priority toMEDIUMunless specified. - Do not create tickets unless the user explicitly describes them (Workflow A) or the OKR/goal text actually states them (Workflow B).
Confirmation
After creating the version, report:
- Version name and unique ID.
- Product name and ID.
- Description (truncated if long).
- List of created tickets (display ID, type, title/summary, remarks if provided), or "No tickets created" if none.
- For Workflow B: also list which tickets were moved from backlog (with their original display ID) vs. newly created, and repeat the rough-estimate caveat once at the end of the summary — not just in the preview.
References
references/CAWPLAN_OPEN_API.md