基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/joshsymonds/gambit --skill finishing-branch命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Turns a rough idea into an approved epic contract with immutable requirements, anti-patterns, and a first wave of executable tasks.
Turns a rough idea into an approved epic contract with immutable requirements, anti-patterns, and a first wave of executable tasks.
Executes an approved epic one wave at a time, dispatching a worker per task and stopping at a checkpoint after each wave. Use when an approved epic contract and native wave plan exist in the current root session, when resuming work after a previous checkpoint, or when iteratively building a feature and execution learnings require a later wave. User phrases like "continue the plan", "next wave", "resume where we left off", "pick up the epic".
| name | finishing-branch |
| description | Integrates a finished branch — merge, pull request, keep, or discard — after verifying tests on the result. |
| when_to_use | Use when all epic tasks show completed, when ready to integrate after review approval, when choosing between merge / PR / keep / discard for a branch, when tests need final verification before integration, or when a merge produced conflicts that require re-testing. User phrases like "ready to merge", "open a PR", "done with this branch", "ship it". |
| user_invokable | true |
Freedom: LOW — verify tests before integrating (unless review's handoff guarantees green), never discard without typed confirmation, always use AskUserQuestion for the options.
Complete development work by verifying readiness, presenting integration options, and executing the user's choice. Handles merge, PR creation, keeping work, or discarding — with appropriate safety gates for each.
Core principle: Verify everything passes → Present options → Execute choice → Clean up only what should be cleaned up.
Announce at start: "I'm using gambit:finishing-branch to complete this work."
| Step | Action | STOP If |
|---|---|---|
| 1. Verify Tasks | TaskList — all must be "completed" | Any task incomplete |
| 2. Verify Tests | Run full test suite (skip if review just ran it) | Any test fails |
| 3. Base Branch | Detect via git merge-base | Can't determine base |
| 4. Present Options | AskUserQuestion with 4 choices | No response |
| 5. Execute Choice | Merge / PR / Keep / Discard | Git command fails |
| 6. Cleanup | Remove worktree if applicable | Only for merge/discard |
Iron Law: Tests must be known-green BEFORE presenting options — either freshly run here (standalone invocation) or verified by gambit:review at its handoff (chained invocation). Never present options without recent green evidence.
gambit:review approves the implementationDon't use when:
gambit:executing-plansgambit:review firstgambit:brainstormingRun TaskList. All tasks must show status="completed".
If tasks still open — STOP:
Cannot finish: N tasks still open:
- [task-id]: Task Name (status: in_progress)
- [task-id]: Task Name (status: pending)
Complete all tasks before finishing.
If all complete: Read the epic with TaskGet and verify all success criteria are met.
Skip this step if invoked by gambit:review. Review's handoff guarantees tests are green (either freshly run at its Step 9 gate decision after remediation, or already green since review began and no code changed). Re-running here is pure redundancy. Trust review's handoff announcement and go to Step 3.
Run the full suite only when invoked standalone (user ran /gambit:finishing-branch directly without a prior review, or invoked from any path other than review's approval gate). Detect the test command from project files (go.mod → go test ./..., package.json → npm test, Cargo.toml → cargo test, pyproject.toml → pytest, Makefile → make test).
Determine the branch name this work should integrate into. git merge-base returns a commit
SHA, not a branch — it cannot answer this, and Step 5 needs a name to check out.
git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||'
If that is empty or the repo has several long-lived bases, ask the user which base branch to use.
Do not guess between main and master.
Use AskUserQuestion — do not print options as text.
AskUserQuestion
questions:
- question: "All tasks complete, tests passing. How should we integrate?"
header: "Integration"
options:
- label: "Merge locally"
description: "Merge to <base-branch>, delete feature branch"
- label: "Create Pull Request"
description: "Push and create PR for review"
- label: "Keep as-is"
description: "Leave branch and worktree, handle later"
- label: "Discard"
description: "Delete all work (requires typed confirmation)"
multiSelect: false
STOP. Wait for user response. Do not add recommendations, defaults, or explanations.
The 4 options above are fixed. Never modify, reorder, add variants (like "merge and push"), or remove any. The "Never push main" rule means the base branch is never pushed — the user pushes it manually after merge. (Option 2 does push the feature branch; that is what opening a PR requires.)
git checkout <base-branch>
git pull
git merge <feature-branch>
Run tests on merged result — if tests fail, present sub-options:
git merge --abort)STOP and wait for user choice.
git branch -d <feature-branch> (safe delete)
Go to Step 6
Do NOT push to remote. User pushes when ready.
git push -u origin <feature-branch>TaskGet for PR contentgh pr create --title "feat: <epic-name>" --body "$(cat <<'EOF'
## Summary
<2-3 bullets from epic requirements>
## Tasks Completed
<list from TaskList>
## Test Plan
- [ ] All tests passing
- [ ] <verification steps from epic>
EOF
)"
DONE — do NOT go to Step 6. Branch and worktree (if any) are preserved for PR feedback.
Report: "Keeping branch <name>." If worktree exists, add: "Worktree preserved at <path>."
DONE — do NOT go to Step 6.
git log --oneline <base-branch>..HEAD
This will permanently delete:
- Branch <name>
- All N commits listed above
- Worktree at <path> (if applicable)
Type 'discard' to confirm.
STOP. Wait for exact text "discard". Anything else → clarify, do not proceed.
git checkout <base-branch>git branch -D <feature-branch>Only runs for Options 1 and 4. Options 2 and 3 skip this entirely.
Check if a worktree exists for this branch:
git worktree list
EnterWorktree this session → ExitWorktree action: "remove" (for Discard, pass discard_changes: true only after the typed confirmation).claude/worktrees/, .worktrees/) → return to the base branch, then git worktree remove <path>Report cleanup results.
Step 1: TaskList → all 4 tasks completed
Step 2: npm test → 127 tests passed
Step 3: git merge-base HEAD main → abc123
Step 4: [AskUserQuestion with 4 options]
User selects: Merge locally
Step 5: git checkout main
git pull
git merge feature-auth
npm test → 127 tests passed (verify merged result)
git branch -d feature-auth
Step 6: ExitWorktree action:"remove" (or git worktree remove for an older worktree)
Done. Feature merged to main.
Step 1: Tasks complete
Step 2: SKIPPED ← WRONG: tests might fail
Step 4: User selects PR
Step 5: git push, gh pr create
git worktree remove ← WRONG: PR needs worktree
# Merged broken code. Lost worktree for PR feedback.
git log --oneline main..HEAD
→ a1b2c3d Add OAuth
→ d4e5f6g Add rate limiting
"This will permanently delete branch and 2 commits.
Type 'discard' to confirm."
User: "discard"
git checkout main && git branch -D feature-experimental
git worktree remove .claude/worktrees/experimental
Called by:
/gambit:finishing-branchgambit:review (after approval — the normal workflow path)gambit:executing-plans → gambit:review completesCalls:
gh CLI (PR creation)git commands (merge, branch, worktree)Pairs with:
.claude/worktrees/ via ExitWorktree, or repo-managed) — cleaned up here on merge/discard