원클릭으로
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 を叩かない