gh webhook extension を使うと、GitHub の webhook をローカルで受けられる。
gh extension install cli/gh-webhook
gh webhook forward \
--repo OWNER/REPOSITORY \
--events workflow_run \
--url http://127.0.0.1:8765/webhook
GitHub event
→ gh webhook forward
→ localhost
→ agentを起動するサーバ
たとえば main のCIが落ちたら、listener が worktree を作り、LLM agent に修正させる。agent がPRを作り、CIを通れば fast-forward でmergeする。
main のCI failure
→ worktree
→ Devin / Codex / Claude
→ 修正PR
→ CI
→ merge
ローカルで受けたイベントは、必ずしも直接agentを起動しなくてよい。issueを作って Symphony のような実行基盤へ渡してもよい。
概念コード
def on_workflow_run(event):
if event["conclusion"] != "failure":
return
worktree = create_worktree(event["head_sha"])
pr = run_agent(
worktree,
prompt=f"CIが失敗した。失敗ログを読んで直し、テストしてPRを作って: {event['id']}",
)
for _ in range(5):
if required_checks_pass(pr):
merge_fast_forward(pr)
return
run_agent(worktree, prompt=f"このPRのCIがまだ落ちている。直してpushして: {pr.url}")
PRが増えるほど、個別に拾って直してmergeする作業は重い。webhookを入口にすると、CI failureからmain修正までを自動でつなげられる。