ワンクリックで
land
PR のコンフリクト監視・レビュー応答・CI 復旧・マージまでを一括で面倒見るスキル。「land して」「PR をマージ」「Merging を流して」等で発動する。マージ完了までユーザーへ制御を返さずウォッチャーループを回し続ける
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
PR のコンフリクト監視・レビュー応答・CI 復旧・マージまでを一括で面倒見るスキル。「land して」「PR をマージ」「Merging を流して」等で発動する。マージ完了までユーザーへ制御を返さずウォッチャーループを回し続ける
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
codex review CLIを使用したコードレビュー。セルフレビュー、PR作成前チェック、コミット確認に使用。「レビューして」「変更を確認して」で発動
AI 生成コード由来のノイズ検出。過剰コメント、防御的 try/catch、`any` キャスト、深いネスト、周辺と不整合な書き方を `origin/main` との diff から拾い指摘する。「deslop して」「AI っぽい部分削って」「不要なコメント探して」で発動
指定 PR の 3 channel feedback (top-level / inline review / review summary) を 1 回で取得し structured markdown で返す。引数は PR 番号 / PR URL / なし (現 branch から解決) の 3 パターン。channel を取りこぼさない単一手順
Symphony orchestrator からディスパッチされた bg セッションの共通実行手順。Linear issue のステータス振り分け、workpad 運用、実装から Human Review 遷移、マージまでを定義する。Symphony の bg セッション起動直後に呼ぶ
Linear issue 上の `## Codex Workpad` ヘッダ付き コメント を 検索 / 作成 / 更新 する スキル。バックグラウンドセッション の進捗を 1 つの コメント に集約し、ターン 上限到達 や CI 失敗 を跨いだ永続記憶として使う。バックグラウンドセッション 起動直後と作業節目ごとに発動する
MUST use whenever Claude wants the user to read or review a file it has prepared or modified — markdown reports / plan files / design docs / summaries, drafts before MCP writes (Notion / Slack / Linear / Gmail drafts / Obsidian), SQL queries, code files, config files, or any text file that needs human eyes before the next step. Opens the file(s) in a tmux split pane with nvim so the user reviews while Claude continues editing.
| name | land |
| description | PR のコンフリクト監視・レビュー応答・CI 復旧・マージまでを一括で面倒見るスキル。「land して」「PR をマージ」「Merging を流して」等で発動する。マージ完了までユーザーへ制御を返さずウォッチャーループを回し続ける |
gh CLI が認証済みcommit スキルでコミットし、push スキルで push してから次へ進むpull スキルで origin/main を fetch+merge してコンフリクトを解消し、push スキルで更新したブランチを publish するcommit スキルでコミット、push スキルで push、再度チェックを回す# ブランチと PR 文脈を取得
branch=$(git branch --show-current)
pr_number=$(gh pr view --json number -q .number)
pr_title=$(gh pr view --json title -q .title)
pr_body=$(gh pr view --json body -q .body)
# 許可 merge method を判定 (優先順位 squash → マージコミット → rebase)
read -r allow_squash allow_merge allow_rebase <<<"$(gh api repos/{owner}/{repo} \
--jq '[.allow_squash_merge, .allow_merge_commit, .allow_rebase_merge] | @tsv')"
if [ "$allow_squash" = "true" ]; then merge_flag="--squash"
elif [ "$allow_merge" = "true" ]; then merge_flag="--merge"
elif [ "$allow_rebase" = "true" ]; then merge_flag="--rebase"
else echo "no merge method allowed in this repo" >&2; exit 1
fi
# マージ可否とコンフリクトを確認
mergeable=$(gh pr view --json mergeable -q .mergeable)
if [ "$mergeable" = "CONFLICTING" ]; then
# `pull` スキルで fetch + merge + コンフリクト解消
# その後 `push` スキルで更新したブランチを publish
exit 1
fi
# 非同期ウォッチ補助 (後述) を優先する。下の手動ループは Python が動かない時のフォールバック
# レビューフィードバックの到来を待つ。Codex レビューは `## Codex Review — <persona>` で始まる issue コメント
# として届く。レビュアーフィードバックと同じ扱いで `[codex]` issue コメントで受領を返す
while true; do
gh api repos/{owner}/{repo}/issues/"$pr_number"/comments \
--jq '.[] | select(.body | startswith("## Codex Review")) | .id' | rg -q '.' \
&& break
sleep 10
done
# チェックをウォッチする
if ! gh pr checks --watch; then
gh pr checks
# 失敗した run を特定してログを見る
# gh run list --branch "$branch"
# gh run view <run-id> --log
exit 1
fi
# 判定した method でマージ (squash の時のみ subject/body を渡す)
if [ "$merge_flag" = "--squash" ]; then
gh pr merge --squash --subject "$pr_title" --body "$pr_body"
else
gh pr merge "$merge_flag"
fi
優先案 — asyncio ベースのウォッチャーでレビューコメント / CI / head 更新を並列に監視する。
python3 ~/.claude/skills/land/land_watch.py
exit code の意味
2 — レビューコメントを検知した (フィードバック対応へ)3 — CI チェックが失敗した4 — PR head が更新された (自動修正コミットを検知)5 — マージコンフリクトを検知した (pull スキルで解消)gh pr checks と gh run view --log で詳細を取り、修正して commit スキルでコミット、push スキルで push、再度ウォッチャーを回すorigin/main を merge し、実著者のコミットを 1 つ足して force-push で CI を再走させ、チェックループを再起動するorigin/main を fetch → merge → force-push → CI 再走UNKNOWN の時は待って再確認する## Codex Review — <persona> 形式の issue コメントの存在で行うgit push --force-with-lease## Codex Review — <persona> で始まり、レビュアーの方針 + 使ったガードレールを含む。マージ前に必ず受領するgh api で取得し、プレフィックス付きコメントで返信するgh api repos/{owner}/{repo}/pulls/<pr_number>/comments
gh api repos/{owner}/{repo}/issues/<pr_number>/comments
jq --rawfile + --input - で渡す
# body を draft file へ書く (Write ツールまたは heredoc)
body_path=.claude/tmp/review-reply-<comment_id>.md
# JSON ペイロードを組み立てて gh api へ stdin で渡す
jq -n \
--rawfile body "$body_path" \
--argjson reply_to <comment_id> \
'{body: $body, in_reply_to: $reply_to}' \
| gh api -X POST /repos/{owner}/{repo}/pulls/<pr_number>/comments --input -
gh api -f body='...' / gh api -F body=@file は使わない。zsh が body 中の backtick (`) や $ をコマンド置換 / 変数展開として解釈し、囲まれた部分が黙って消える$variable を含むことが多い。--rawfile + --input - を必ず経由させるgh issue comment や top-level gh pr comment にもある。これらは --body-file <path> を使うin_reply_to はレビューコメントの数値 ID (例 2710521800) を渡す。GraphQL の node ID (例 PRRC_...) は通らない。エンドポイントには PR 番号 (/pulls/<pr_number>/comments) を含める[codex] プレフィックスで始める[codex] を付け、対応 / 先送りの別と根拠を書く[codex] ...) を 元のレビューコメントへのインライン返信 として返す。レビューコメント用エンドポイントと in_reply_to を使う。issue コメントは使わない[codex] ...) を、受領した時と同じ場所 (Codex レビューは issue コメント、レビューコメントはインライン返信) に返す[codex] issue コメントが新しく付けば「受領済み」と判定する[codex] インライン返信済み) であることを確認する[codex] Changes since last review:
- <short bullets of deltas>
Commits: <sha>, <sha>
Tests: <commands run>
[codex] 更新に短い理由 (out-of-scope / 意図と相反 / 不要等) を書くcorrectness / design / style / clarification / scope に分類する本スキルは GitHub 側の land 作業を扱う。Linear status との関係は次のとおり
Merging であること (mcp__linear-mh4gf__get_issue の state.name で確認)merge event が発火し Done へ自動遷移する。10 秒待っても遷移しない時のみ mcp__linear-mh4gf__save_issue で手動遷移する (state ID は mcp__linear-mh4gf__list_issue_statuses 経由)Merging 以外の状態の時は本スキルを起動しない。直接 gh pr merge を叩かない