Execute tasks based on GitHub Issue content using a git worktree
GitHub Issue $0 ã®å
容ãèªã¿åããå®è£
ããPRäœæãŸã§ãå®éããã¹ãã«ã§ãã
Instructionsã«åŸã£ãŠé ã«å®è¡ããåãã§ãŒãºã®ãå®äºæ¡ä»¶ããæºãããªããŸãŸæ¬¡ã®ãã§ãŒãºã«é²ãŸãªãããšã
èªåŸå®è¡åå: ãŠãŒã¶ãŒãžã®ç¢ºèªã¯è¡ããã倿ã¯ãã¹ãŠæ¬ã¹ãã«å ã®ã«ãŒã«ã«åŸã£ãŠèªåã§æ±ºå®ãããäžææ¡ä»¶ã«è©²åœããå Žåã®ã¿ãçç±ãåºåããŠçµäºããã
æ¬ã¹ãã«ã¯ claude-task-worker ã® cc-exec-issue ã©ãã«ãããªã¬ãŒã«èªåèµ·åãããæ³å®ã§ãã¯ãŒã«ãŒã¯ã¹ãã«ããã»ã¹ã®åæå®äºãæ ¹æ ã« cc-in-progress ã®é€å»ã cc-pr-created ä»äžãšãã£ãã©ãã«é·ç§»ãé²ããããã®ãããæ¬ã¹ãã«å
éšã§åŒã³åºã Agent / Skill / Bash ã絶察ã«ããã¯ã°ã©ãŠã³ãå®è¡ããªãããšïŒ
Agent ããŒã«ã¯æ¢å®ã run_in_background: trueïŒããã¯ã°ã©ãŠã³ãïŒããã®ããåŒã³åºãããšã« å¿
ã run_in_background: false ãæç€ºæå® ãããã©ã¢ã°ã©ãŠã³ãã§åæçã«çµæãåãåã£ãŠããæ¬¡ã®åŠçã«é²ããæå®ãçç¥ããå Žåã¯ããã¯ã°ã©ãŠã³ãã§èµ°ããæ¬ã¹ãã«ãæªå®ã®ãŸãŸçµäºããSkill ããŒã«åŒã³åºãã«ã run_in_background: true ãæå®ããªãïŒæ¢å®ã¯åæïŒãåæå®äºãåŸ
ã£ãŠããæ¬¡ãžé²ãBash ããŒã«ã«ã run_in_background: true ãæå®ããªããæ¢å®ã®åæå®è¡ã§çµæãåãåã£ãŠããæ¬¡ã®åŠçã«é²ãAgent / Skill ã䞊åã«æããã®ã¯ã䞊åå®è¡ãã§ãã£ãŠãããã¯ã°ã©ãŠã³ãå®è¡ãã§ã¯ãªããã蚱容ãããããã ã Agent ã¯åå¥ã« run_in_background: false ãæå® ãããã®å Žã§åæçã«å®äºãåŸ
ã€& ãä»ããããnohup / disown / setsid ãªã©ã§ããã»ã¹ããã¿ãããããããªãScheduleWakeup ãªã©ã§åŠçãåŸåãã«ããªãçç±: ããã¯ã°ã©ãŠã³ãåãããšåŠçå®äºåã«æ¬ã¹ãã«ãçµäºããã¯ãŒã«ãŒããæ£åžžå®äºããšèª€èªããŠã©ãã«é·ç§»ãåŸç¶ã¯ãŒã«ãŒèµ·åã«é²ããããå®è£
æªå®ã®ãŸãŸã¯ãŒã«ãŒãäºéèµ·åãããããã¹ãã»PRäœææªå®ã®ãŸãŸ cc-pr-created ãä»äžããããããŠãIssue/PRã®ç¶æ
ãå£ãããAgent ããŒã«ã®æ¢å®ã background ã§ããããšãèŠèœãšã㊠run_in_background ãçç¥ãããšããã®äºæ
ã確å®ã«èµ·ããã
é²æç®¡çãªã©ã§ TaskCreate ã䜿ãå Žåã以äžã®ã«ãŒã«ãå³å®ããããšãéåãããšããªããŒã·ã§ã³ãšã©ãŒïŒmissing subject/description ã unexpected parameter tasksïŒã§äžæãããã§ãŒãºãæªå®ã®ãŸãŸå€åŽã®ã¯ãŒã«ãŒããæ£åžžå®äºããšèª€èªããã
tasks / todos ãªã©ã®é
åãã©ã¡ãŒã¿ã¯ååšããªããè€æ°ã¿ã¹ã¯ãç»é²ãããå Žåã¯ãåäžã¡ãã»ãŒãžå
ã§ TaskCreate ãè€æ°åçºè¡ããïŒäžŠåå¯ïŒsubjectïŒçãã¿ã€ãã«ïŒãš descriptionïŒäœããããïŒã®2ã€ããããããããã¬ãã«æååãšããŠæž¡ãããã¹ããããªããžã§ã¯ãã®äžã«å
¥ããªãTaskCreate 㯠deferred tool ã®ãããã»ãã·ã§ã³éå§æç¹ã§ã¯ã¹ããŒããããã³ããã«å«ãŸããªãã䜿çšåã«å¿
ã ToolSearch(query: "select:TaskCreate") ã§1åã ãã¹ããŒããããŒããããããŒãããã«åŒã¶ãš typed parameters ãæåååãããŠã¯ã©ã€ã¢ã³ãåŽã§ã匟ããã䞊åã§ä»¥äžã確èªãã倿ã¯èªåã§è¡ãããŠãŒã¶ãŒã«è³ªåããªãããšã
pwd ã§ .claude/worktrees/ é
äžã«ããããšã確èªãããworktreeå€ãªã äžæ ããçç±ãåºåããŠçµäºããïŒããã©ã«ããã©ã³ãã§äœæ¥ããŠã¯ãªããªãïŒgh repo view --json defaultBranchRef -q .defaultBranchRef.name ã§ããã©ã«ããã©ã³ãåãååŸããgit rev-parse --abbrev-ref HEAD ã®çŸåšãã©ã³ããšæ¯èŒãããäžèŽããå Žåã¯ äžæãããã©ã«ããã©ã³ãåã®ååŸã«å€±æããå Žåã äžæ ããïŒfail-safeïŒgh issue view $0 --json number,title,state,labels ã§Issueãååšã OPEN ã§ããããšã確èªãããCLOSEDãªã äžægit status --short ã§æªã³ããã倿Žã確èªãããååšããå Žåã¯ãŠãŒã¶ãŒã«ç¢ºèªãã git stash push -u -m "exec-issue auto-stash $0" ã§èªåéé¿ãããã®æšãæçµå ±åã«æèšããå®äºæ¡ä»¶: worktreeå ãããã©ã«ããã©ã³ã以å€ã®ãã©ã³ããIssue OPENãäœæ¥ããªãŒãã¯ãªãŒã³ã§ããããšã
read-github-issue skill ã $0 ã§åŒã³åºãã以äžãååŸããïŒ
è¿åŽå 容ã¯åŸç¶ãã§ãŒãºã§åãµããšãŒãžã§ã³ãã«æž¡ããããå šæãä¿æããŠããããšã
è¿åŽã«ã¹ãã«å®è¡ã¹ãããã®æç€ºããŒãã³ã°ãããã°ãããå°éãããããŒãã³ã°ãæ¬ ããŠããã»äžå®å šãšå€æãããå Žåã¯ãå®è£ ãã©ã³åã¹ããããèµ°æ»ãã以äžã®å åãããã¹ãããã远å ã§ã¹ãã«å®è¡ã¹ããããšããŠæœåºããïŒ
ââã¹ãã«ãå®è¡ãããã/ââ ãåŒã¶ããbase-tools/skills/ââ/SKILL.md ãçºç«ãããçã®æç€ºçãªåŒã³åºãæç€ºãããbase-tools/skills/*/SKILL.mdïŒãšäžå¯Ÿäžã§å¯Ÿå¿ããæœåºããã¹ããã㯠{ã¹ãããå, åŒã³åºãã¹ãã¹ãã«å, åŒæ°, äŸåé¢ä¿} ã®æ§é ã§ä¿æããéåžžã¿ã¹ã¯ãšåããŠç®¡çãããå€å®ã埮åŠãªã¹ãããã¯ãã¹ãã«å®è¡ã¹ãããåè£ããšããŠå¥ã«åæãããã§ãŒãº2ã§æçµå€å®ããïŒæšæž¬ã§éåžžã¿ã¹ã¯ã«å¯ããªãïŒã
å®äºæ¡ä»¶: å®è£ ã¿ã¹ã¯ãã䞊åå®è¡å¯èœãªã°ã«ãŒããã鿬¡ã°ã«ãŒãããã¹ãã«å®è¡ã¹ããããã®3åé¡ã«æŽçã§ããŠããããšã
ãã§ãŒãº1ã§æœåºãããã¹ãã«å®è¡ã¹ããããã¯ãååãšã㊠ã¡ã€ã³ãšãŒãžã§ã³ããçŽæ¥ Skill ããŒã«ã§çºç«ããããµããšãŒãžã§ã³ãã«å§è²ãããšã¹ãã«åºæã®å¯äœçšïŒããã¯ã»ã¬ãŒãã¬ãŒã«ã»PRäœæã»ã©ãã«é·ç§»ã»ã¹ãããã·ã§ããåºåçïŒãä¿èšŒããããç¬èªå€æã§åçåŠçãæäœæ¥å®è£
ããããªã¹ã¯ãããããã
Skill ããŒã«ã§åŒã³åºãSkill tool call ãçºè¡ããŠäžŠåå®è¡ããŠããSkill ããŒã«ã§çºç«ãã代æ¿å®è£
ã¯çŠæ¢ãããæšãæèšããbase-tools/skills/ââ/SKILL.md ã®ååšïŒã確èªããå®åšããã°ã¹ãã«å®è¡ã¹ããããšããŠç¢ºå®ãå®åšããªããã°éåžžã¿ã¹ã¯ãžå·®ãæ»ãéåžžã¿ã¹ã¯ïŒã¹ãã«å®è¡ã¹ããã以å€ïŒã¯ã以äžã®å€æè»žã§ãµããšãŒãžã§ã³ããéžå®ããå®è¡ãå§ä»»ããïŒ
.pen ãåç
§å
ãšããŠUIã«å€æããïŒå Žåã¯å¿
ããã®ãšãŒãžã§ã³ãã䜿ãããš.penïŒèªäœã®ç·šéã»æŽæ°ïŒèŠçŽ è¿œå ãã¬ã€ã¢ãŠã倿Žãã¹ã¿ã€ã«ä¿®æ£ãããã¹ãå·®ãæ¿ããªã©ïŒã.pen ãžã®ç·šéã¿ã¹ã¯ã¯å¿
ããã®ãšãŒãžã§ã³ãã«ä»»ããããšä»¥äžã®ããããã«è©²åœããã¿ã¹ã¯åå£«ã¯ éæ¬¡ ã§å®è¡ããïŒ
ãã以å€ã¯ 䞊å ã§å®è¡ããã䞊åå®è¡ããå Žåã¯ã1ã¡ãã»ãŒãžå ã§è€æ°ã®Agent tool callãçºè¡ããããšïŒé 次åŒã³åºãã§ã¯äžŠåã«ãªããªãïŒã
ãµããšãŒãžã§ã³ãã¯çŸåšã®äŒè©±å±¥æŽãæããªããããèµ·åæã«ä»¥äžã ãã¹ãŠ ããã³ããã«å«ããããšïŒèªå·±å®çµããããªãŒãã£ã³ã°ãåè³ªãæ±ºããïŒã
ãèæ¯ãIssue #$0ã<title>ã: <èŠçŽ 1-2è¡>
ãããªããæ
åœããã¿ã¹ã¯ã
<ã¿ã¹ã¯åãšç®ç>
ã察象ç¯å²ïŒç·šéå¯ãã¡ã€ã«/ãã£ã¬ã¯ããªïŒã
<å
·äœãã¹ãåæãç¯å²å€ãè§Šããªãããš>
ãè§ŠããŠã¯ãããªããã¡ã€ã«ã
<䞊åå®è¡äžã®ä»ã¿ã¹ã¯ãè§Šãäºå®ã®ãã¡ã€ã«>
ãå®äºæ¡ä»¶ã
- <åãå
¥ãåºæº1>
- <åãå
¥ãåºæº2>
- 該åœç®æã®ãã¹ãã远å ã»æŽæ°ããããã¹ãŠpassããããš
- `npm run lint`ïŒãŸãã¯ãããžã§ã¯ãæå®ã®lintïŒã«è©²åœãã¡ã€ã«ã§ãšã©ãŒããªãããš
ãã¹ãã«å®è¡ã®æ±ãã
æ¬ã¿ã¹ã¯å
ã§ä»ã®ã¹ãã«ïŒ`base-tools/skills/ââ/SKILL.md` ã«å®çŸ©ããããã®ïŒãåŒã³åºãå¿
èŠãããå Žåã¯ã**å¿
ã `Skill` ããŒã«çµç±ã§å¯Ÿè±¡ã¹ãã«ãçºç«ããããš**ã代æ¿å®è£
ïŒã¹ãã«æé ãèªåã§åçŸãããªã©ïŒã¯çŠæ¢ãããã¹ãã«åºæã®ããã¯ã»ã¬ãŒãã¬ãŒã«ã»åŸåŠçã倱ãããæåŸ
ãããå¯äœçšãä¿èšŒãããªããªããããåŒã³åºãã¹ãã¹ãã«åãæ¬ããªãŒãã£ã³ã°å
ã«æç€ºãããŠããå Žåã¯ããã®ååã§ `Skill` ããŒã«ãåŒã³åºãã察象ã¹ãã«åãäžæã»ååšããªãå Žåã¯èªåå®è£
ã§ä»£æ¿ããããã®æšãå ±åããŠåŒã³åºãå
ã®å€æãä»°ãã
ãåèæ
å ±ã
- Issueã®ãªã³ã¯ã»é¢é£ç»åãã¹
- æ¢åã®é¡äŒŒå®è£
ã®åç
§å
ïŒããã°ïŒ
ãäœæ¥ãã£ã¬ã¯ããªã
<worktreeã®çµ¶å¯Ÿãã¹>ããã¹ãŠã®ã³ãã³ãã¯ãããåºæºã«å®è¡ããããšã
ãµããšãŒãžã§ã³ããå®äºå ±åãè¿ããããæ¬äœåŽã§ git diff --stat ãå®è¡ããŠå€æŽç¯å²ã宣èšéããæ€èšŒãããç¯å²å€ã®å€æŽãããã°ãåœè©²ãµããšãŒãžã§ã³ããåèµ·åããŠä¿®æ£ãããã
ãã§ãŒãº2ã§ç¢ºå®ãããã¹ãã«å®è¡ã¹ããããããäŸåé¢ä¿ã«æ²¿ã£ãŠå®è¡ããã
Skill tool call ãçºè¡ããŠäžŠåå®è¡ãããã¹ãŠã®å®è¡å®äºåŸããã§ãŒãº1ã§æœåºãããã¹ãã«å®è¡ã¹ããããäžèŠ§ïŒæåŸ
åŽïŒãšãå®è¡æžã¿ã¹ãã«äžèЧãïŒå®æž¬åŽãã¡ã€ã³ãšãŒãžã§ã³ãçŽæ¥çºç«å + ãã§ãŒãº3ã§ãµããšãŒãžã§ã³ãã«å§è²ããåïŒãçªãåããããæåŸ
åŽã«ãã£ãŠå®æž¬åŽã«ãªãã¹ãããããŸãã¯æåŸ
ããå¯äœçšïŒPRäœæã»ã©ãã«é·ç§»ã»ã¹ãããã·ã§ããçïŒãçºçããŠããªãã¹ããã㯠æªå®è¡ ãšå€å®ããäŸåé¢ä¿ãå確èªããããã§æ¬ãã§ãŒãºå
ã§ Skill ããŒã«ã«ããåçºç«ããïŒãµããšãŒãžã§ã³ãã«åå§è²ããªãïŒã
åçºç«ããŠãã¹ãã«ã倱æããå Žåã倱æãã°ã»å¯Ÿè±¡ã¹ãã«åã»äŸåé¢ä¿ãæçµå ±åã«å«ããäžã§æ¬¡ãã§ãŒãºãžé²ãïŒãŠãŒã¶ãŒã«å€æãä»°ããªãïŒã
ãã§ãŒãº1ã§æœåºãããªãã£ãå Žåãæ¬ãã§ãŒãºã¯äœãããã¹ãããããŠããïŒãã®æšãæçµå ±åã«äžè¡ã§æèšããïŒã
å®äºæ¡ä»¶: æœåºãããã¹ãŠã®ã¹ãã«å®è¡ã¹ãããã宿ž¬åŽã§ç¢ºèªã§ããŠãããããããã¯åçºç«å€±æãšããŠæçµå ±åã«èšé²ãããŠããããšã
ãã¹ãŠã®ãµããšãŒãžã§ã³ããšã¹ãã«å®è¡ã¹ããããå®äºããããæ¬äœã§ä»¥äžãé ã«å®è¡ïŒ
package.json ã® scripts.test ã確èªïŒscripts.lintïŒgeneral-purpose-assistant 㫠倱æãã°å
šæãšè©²åœãã¡ã€ã«ãã¹ ãæž¡ããŠä¿®æ£ããããã¹ã/Lintã³ãã³ãããããžã§ã¯ãã«ååšããªãå Žåã¯ã¹ãããããŠããïŒãã®æšãæçµå ±åã«å«ããããšïŒã
ä¿®æ£ã«ãŒãã¯æå€§3åãŸã§èªåã§ç¹°ãè¿ãã3å詊è¡ããŠãåæããªãå Žåã¯ã倱æãã°ã»æ®èª²é¡ã»æšå®åå ããŸãšããŠæçµå ±åã«å«ããäžã§ãã§ãŒãº6ãžé²ãïŒãŠãŒã¶ãŒã«å€æãä»°ããªãïŒã
ãŸãå·®åã®åºæºãã©ã³ãïŒBASE_BRANCHïŒã決å®ãããIssue $0 ã parentïŒEpic IssueïŒãæã€å Žåãworktree 㯠cc-epic-<parentçªå·> ãã©ã³ãããæŽŸçããŠãããããepic ãã©ã³ããåºæºã«ãããããã©ã«ããã©ã³ããåºæºã«ãããšãepic ãã©ã³ããžããŒãžæžã¿ã®ä»ãµãIssueã®å·®åãæ··ããããæ¬Issueã§ã®ã³ãŒã倿Žã®æç¡ãã誀å€å®ããïŒcreate-pr ã¹ãã«ã®ããŒã¹ãã©ã³ã決å®ãšåã確å®çå°åºãçšããïŒã
BASE_BRANCH=$(git symbolic-ref --short refs/remotes/origin/HEAD | sed 's@^origin/@@')
if ! PARENT=$(gh issue view "$0" --json parent --jq '.parent.number // empty'); then
echo "failed to resolve issue parent" >&2
exit 1
fi
if [ -n "${PARENT}" ] && git rev-parse --verify --quiet "refs/remotes/origin/cc-epic-${PARENT}" >/dev/null; then
BASE_BRANCH="cc-epic-${PARENT}"
fi
git status --short
git diff "origin/${BASE_BRANCH}..HEAD" --stat
gh issue comment $0 --body-file - ã«ãã¢ããã¥ã¡ã³ãã§æž¡ãïŒMarkdownã®äœè£ãä¿ã€ããïŒã## 調æ»çµæãµããª
<IssueèŠä»¶ã«å¯ŸããŠäœã確èªããã 1-3è¡>
## ã³ãŒã倿ŽãäžèŠãšå€æããçç±
<æ ¹æ ãæ¢ã«å®è£
æžã¿ã»èŠä»¶ãåçŸããªãã»å¥Issueã§ã«ããŒæžã¿çãå
·äœçã«>
## 確èªãããã¡ã€ã« / åèæ
å ±
- <ãã¹ããªã³ã¯ãåæããªããã°ã該åœãªãã>
gh issue close $0 --reason "not planned" ãå®è¡ãããã³ã¡ã³ãã«å€±æããå Žåã¯ã¯ããŒãºããã倱æãã°ãæçµå ±åã«å«ããŠçµäºããïŒèª¬æãªãã§ã¯ããŒãºããªãïŒcommit-push skill ãåŒã³åºãã倿Žãã³ãããã»pushcreate-pr skill ã $0 ã§åŒã³åºããPRãäœæpwd ãå確èªããããšãæšå¥šgit diff ã§å®éã®å·®åãå¿
ãæ€èšŒããSkill ããŒã«ã§çŽæ¥åŒã³åºãããµããšãŒãžã§ã³ãã«å§è²ããå ŽåãããªãŒãã£ã³ã°ã§å¯Ÿè±¡ã¹ãã«åãš Skill ããŒã«çºç«ãå¿
é æç€ºãšãã代æ¿å®è£
ã§èª€éåããªãããã§ãŒãº4ã®åãããŒãæ€ç¥ã§æªå®è¡ã®ã¹ãããããªããå¿
ã確èªãã--no-verify ããã¹ãã®ã¹ãããã§èª€éåããªããåå ãç¹å®ããŠããä¿®æ£ãã