一键导入
planning
Work planning through GitHub issues. Invoke when: starting new work, planning a feature, or when asked 'let's plan X'. Every session = one issue = one PR.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Work planning through GitHub issues. Invoke when: starting new work, planning a feature, or when asked 'let's plan X'. Every session = one issue = one PR.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
GitHub CLI patterns for issues, projects, and PRs. Invoke when: creating issues, linking PRs to issues, updating project status, or any GitHub project operations.
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program," or "experiment playbook." Use this whenever someone is comparing two approaches and wants to measure which performs better, or when they want to build a systematic experimentation practice. For tracking implementation, see analytics. For page-level conversion optimization, see cro.
When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform. Also use when the user mentions 'ad copy variations,' 'ad creative,' 'generate headlines,' 'RSA headlines,' 'bulk ad copy,' 'ad iterations,' 'creative testing,' 'ad performance optimization,' 'write me some ads,' 'Facebook ad copy,' 'Google ad headlines,' 'LinkedIn ad text,' or 'I need more ad variations.' Use this whenever someone needs to produce ad copy at scale or iterate on existing ads. For campaign strategy and targeting, see ads. For landing page copy, see copywriting.
When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,' 'LinkedIn ads,' 'ad budget,' 'cost per click,' 'ad spend,' or 'should I run ads.' Use this for campaign strategy, audience targeting, bidding, and optimization. For bulk ad creative generation and iteration, see ad-creative. For landing page optimization, see cro.
When the user wants to optimize content for AI search engines, get cited by LLMs, or appear in AI-generated answers. Also use when the user mentions 'AI SEO,' 'AEO,' 'GEO,' 'LLMO,' 'answer engine optimization,' 'generative engine optimization,' 'LLM optimization,' 'AI Overviews,' 'optimize for ChatGPT,' 'optimize for Perplexity,' 'AI citations,' 'AI visibility,' 'zero-click search,' 'how do I show up in AI answers,' 'LLM mentions,' or 'optimize for Claude/Gemini.' Use this whenever someone wants their content to be cited or surfaced by AI assistants and AI search engines. For traditional technical and on-page SEO audits, see seo-audit. For structured data implementation, see schema.
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers or wants to build systems to prevent it. For post-cancel win-back email sequences, see emails. For in-app upgrade paywalls, see paywalls.
| name | planning |
| description | Work planning through GitHub issues, including creating and refining them. Invoke when: starting new work, drafting or editing an issue, or when asked 'let's plan X'. Each issue covers one coherent thing. |
| user-invocable | false |
Every unit of work gets a GitHub issue. Each issue covers one coherent thing — not a mix of unrelated concerns. A session may span multiple issues (planning several, working through several); an issue may not span multiple concerns.
| Situation | Action |
|---|---|
| Starting new work | Create issue first |
| "Let's plan X" | Create detailed issue |
| New work discovered mid-session | Pause → ask about new issue |
| Quick fix / trivial change | Ask if issue needed |
1. Understand the work
2. Draft issue content (do NOT create yet)
3. Include issue draft in plan file
4. Exit plan mode for approval
5. Create the issue (first step after approval)
6. Track issue as session context
7. Do the work (core-workflow)
8. If new work surfaces → see Discovered Work
9. Finalize → PR closes the issue
High level, always. An issue describes an outcome — what needs to be true when it's resolved. Never how. Files, function names, refactor steps, migration order, code snippets, "first do X then Y": none of it belongs in the body. If you catch yourself typing an implementation detail, delete it. The future session picking this up must investigate the code as it exists then — not follow a recipe you baked in now, which is almost certainly stale or wrong.
Plan Mode: During planning, draft the issue content and include it in your plan file. Do NOT run
gh issue createuntil after plan approval.
Gather what you need to describe the outcome — not how to reach it:
Do not draft an approach. Do not enumerate files. Do not sketch implementation steps. The future session picking this up needs to investigate the codebase itself, not follow a recipe you baked into the body.
The body shape depends on whether the issue is a leaf or a tracker.
Leaf issues — Task, Bug, Feature, or anything else meant to be resolved in a single PR. Body = Summary + Acceptance Criteria.
ISSUE_URL=$(gh issue create \
--repo <org>/<repo> \
--title "Brief description" \
--body "## Summary
High-level overview of what we need to achieve and why. Include only
constraints that must be honored (e.g. \"must not break the public v1 API\",
\"must preserve existing session behavior\"). No approach, no files,
no implementation steps.
## Acceptance Criteria
- [ ] Observable outcome 1
- [ ] Observable outcome 2
- [ ] Tests written")
printf '%s' "$ISSUE_URL" | pbcopy # issue URL copied to clipboard
echo "$ISSUE_URL"
Acceptance criteria are the source of truth for "done" on a leaf — each item should be something you can point at and verify, not an implementation task.
Tracker issues — Epic, or any parent issue whose purpose is to group sub-issues under one initiative. Body = Summary only. No acceptance criteria — the acceptance lives on the children. The tracker describes what the initiative is about; the sub-issues are the work.
ISSUE_URL=$(gh issue create \
--repo <org>/<repo> \
--title "Brief description" \
--body "## Summary
High-level overview of the initiative — what are we trying to achieve overall,
and why. Constraints that span all children (e.g. \"no child PR may break
the public v1 API\") go here.")
printf '%s' "$ISSUE_URL" | pbcopy
echo "$ISSUE_URL"
In plan mode: Include the draft in your plan file and exit plan mode.
After approval: Run gh issue create, capture the URL, and hand it back. Do not assume the next step is starting work on it.
Once an issue is created, track it as session context:
Active Issue: #123 - Feature description
Repo: <org>/<repo>
This context should be referenced:
If context compaction occurs, the issue contains the full context. Fetch it:
gh issue view <number> --repo <org>/<repo>
Sometimes planning reveals work that should be split into multiple issues.
## Issue Drafts
### Issue 1: Feature A
Summary, approach, acceptance criteria...
### Issue 2: Feature B
Summary, approach, acceptance criteria...
## Execution Order
1. Start with Issue 1 (no dependencies)
2. Issue 2 depends on Issue 1
When additional work surfaces mid-session, judge it against the acceptance criteria — not against a "scope" boundary.
If it's needed to meet acceptance criteria — it's part of the work. Do it. Don't defer under "out of scope" language.
If it's unrelated to acceptance criteria but small and adjacent (per leave-code-better) — do it.
If it's genuinely a separate initiative — STOP and ask:
I've discovered we also need to [X], and it's unrelated to the acceptance
criteria on #123.
Options:
1. Fold into current issue (update acceptance criteria)
2. Create a new issue and defer
3. Note it and skip
How do you want to handle this?
If folding in, update the issue body so the acceptance criteria reflect the new expected outcome — don't just leave it stale.
# View current body
gh issue view <number> --repo <org>/<repo>
# Edit (opens editor)
gh issue edit <number> --repo <org>/<repo>
Same rules apply. When editing an issue that already exists:
## Approach, ## Files/Areas, ## Notes, ## Scope, or step-by-step implementation sections. They short-circuit investigation.When work is complete and approved for commit:
PR_URL=$(gh pr create \
--draft \
--repo <org>/<repo> \
--title "feat: clear description" \
--body "## Summary
What was done.
## Changes
- Change 1
- Change 2
## Testing
- [ ] Tests pass
- [ ] Manual testing done
Closes #<issue-number>")
printf '%s' "$PR_URL" | pbcopy # draft PR URL copied to clipboard, ready to paste
echo "$PR_URL"
When presenting the PR:
PR ready to create:
Title: feat: add feature description
Body:
## Summary
Implemented the feature.
## Changes
- Added endpoint
- Added validation
- Added tests
Closes #123
The Closes #123 automatically:
| Action | Command |
|---|---|
| Create issue | gh issue create --repo <org>/<repo> ... |
| View issue | gh issue view <num> --repo <org>/<repo> |
| Edit issue | gh issue edit <num> --repo <org>/<repo> |
| Add comment | gh issue comment <num> --repo <org>/<repo> --body "" |
| Create PR | gh pr create --draft --repo <org>/<repo> ... Closes #N (pbcopy URL) |
## Scope section — the concept doesn't exist hereCloses #N