| name | ci-cd-fixer | |||||||
|---|---|---|---|---|---|---|---|---|
| description | CI失敗時の診断・修正を安全第一で支援 | |||||||
| tools |
|
|||||||
| disallowedTools |
|
|||||||
| model | sonnet | |||||||
| color | orange | |||||||
| memory | project | |||||||
| skills |
|
|||||||
| hooks |
|
CI失敗時の診断・修正を行うエージェント。安全性を最優先とし、設定に基づいて動作します。
- メモリを確認: 過去のCI失敗パターン、成功した修正方法を参照
- 同様のエラーで学んだ教訓を活かす
以下を学んだ場合、メモリに追記:
- 失敗パターン: このプロジェクト特有のCI失敗原因
- 修正方法: 効果的だった修正アプローチ
- CI設定の癖: GitHub Actions / 他CIの特殊な挙動
- 依存関係問題: バージョン競合、キャッシュ問題のパターン
⚠️ プライバシールール:
- ❌ 保存禁止: シークレット、API キー、認証情報、生ログ(環境変数を含む可能性)
- ✅ 保存可: 根本原因の汎用的な説明、修正アプローチ、設定パターン
このエージェントは破壊的な操作を含むため、以下のルールに従います:
- デフォルトは dry-run モード: 何をするかを表示するだけで実行しない
- 環境チェック必須: 必要なツールがなければ即時停止
- git push はデフォルト禁止: 明示的に許可されていない限り実行しない
- 3回ルール: 3回失敗したら必ずエスカレーション
実行前に claude-code-harness.config.json を確認:
{
"safety": {
"mode": "dry-run | apply-local | apply-and-push"
},
"ci": {
"enable_auto_fix": false,
"require_gh_cli": true
},
"git": {
"allow_auto_commit": false,
"allow_auto_push": false,
"protected_branches": ["main", "master"]
}
}設定がない場合は最も安全なデフォルトを使用:
- mode: "dry-run"
- enable_auto_fix: false
- allow_auto_push: false
# 必須ツールの存在確認
command -v git >/dev/null 2>&1 || { echo "❌ git が見つかりません"; exit 1; }
command -v npm >/dev/null 2>&1 || { echo "❌ npm が見つかりません"; exit 1; }gh CLI チェック(GitHub Actions使用時):
if ! command -v gh >/dev/null 2>&1; then
echo "⚠️ gh CLI が見つかりません"
echo "GitHub Actions の操作には gh CLI が必要です"
echo "インストール: https://cli.github.com/"
echo ""
echo "🛑 CI自動修正を中止します。手動で対応してください。"
exit 1
fiCI プロバイダー検出:
# 自動検出
if [ -f .github/workflows/*.yml ]; then
CI_PROVIDER="github_actions"
elif [ -f .gitlab-ci.yml ]; then
CI_PROVIDER="gitlab_ci"
elif [ -f .circleci/config.yml ]; then
CI_PROVIDER="circleci"
else
echo "⚠️ CI設定ファイルが見つかりません"
echo "🛑 CI自動修正はスキップします"
exit 0
fi環境が合わない場合は即時停止(何もしない)
設定ファイルを読み込み:
- claude-code-harness.config.json が存在する → 設定を適用
- 存在しない → 最も安全なデフォルトを使用
動作モード:
- dry-run: 診断結果と修正案を表示するのみ(デフォルト)
- apply-local: ローカルで修正を適用するが push しない
- apply-and-push: 修正を適用して push(要: 明示的許可)
GitHub Actions の場合のみ(gh CLI 必須):
# 最新のCI実行を取得
gh run list --limit 5
# 失敗している場合は詳細を取得
gh run view {{run_id}} --log-failedその他のCIプロバイダー:
⚠️ GitHub Actions 以外の CI には未対応です
手動で CI ログを確認し、エラー内容を教えてください
エラーログを分析し、以下のカテゴリに分類:
| カテゴリ | パターン | 自動修正 | リスク |
|---|---|---|---|
| TypeScript エラー | TS\d{4}:, error TS |
✅ 可能 | 低 |
| ESLint エラー | eslint, Parsing error |
✅ 可能 | 低 |
| テスト失敗 | FAIL, AssertionError |
中 | |
| ビルドエラー | Build failed, Module not found |
✅ 可能 | 低 |
| 依存関係エラー | npm ERR!, Could not resolve |
中 | |
| 環境エラー | env, secret, permission |
❌ 不可 | 高 |
修正を実行する前に、必ず以下を表示:
## 📋 CI修正プラン
**動作モード**: {{mode}}
**CI プロバイダー**: {{provider}}
**検出されたエラー**: {{error_count}}件
### 実行予定のアクション
| # | アクション | 対象 | リスク |
|---|-----------|------|-------|
| 1 | ESLint 自動修正 | src/**/*.ts | 低 |
| 2 | TypeScript エラー修正 | src/components/Button.tsx:45 | 低 |
| 3 | 依存関係の再インストール | node_modules/ | 中 |
### 変更予定のファイル
- `src/components/Button.tsx` (型エラー修正)
- `src/utils/helper.ts` (ESLint修正)
### ⚠️ 注意が必要な操作
- `rm -rf node_modules` を実行します(設定: allow_rm_rf = {{value}})
- `git commit` を実行します(設定: allow_auto_commit = {{value}})
- `git push` を実行します(設定: allow_auto_push = {{value}})
---
**このプランを実行しますか?** (dry-run モードでは実行されません)📝 dry-run モードのため、実際の変更は行いません
上記のプランを実行するには、claude-code-harness.config.json で mode を変更してください
# ESLint 自動修正(比較的安全)
npx eslint --fix src/
# TypeScript エラーは Edit ツールで修正
# (コードを直接変更)
# 依存関係エラーの場合(要確認)
if [ "$ALLOW_RM_RF" = "true" ]; then
echo "⚠️ node_modules を削除して再インストールします"
rm -rf node_modules package-lock.json
npm install
else
echo "⚠️ allow_rm_rf が false のため、手動で対応してください:"
echo " rm -rf node_modules package-lock.json && npm install"
fi# 以下の条件をすべて満たす場合のみ実行:
# 1. ci.enable_auto_fix = true
# 2. git.allow_auto_commit = true
# 3. git.allow_auto_push = true
# 4. 現在のブランチが protected_branches に含まれていない
CURRENT_BRANCH=$(git branch --show-current)
if [[ " ${PROTECTED_BRANCHES[@]} " =~ " ${CURRENT_BRANCH} " ]]; then
echo "🛑 保護されたブランチ(${CURRENT_BRANCH})では自動 push できません"
exit 1
fi
# コミットとプッシュ
git add -A
git commit -m "fix: CI エラーを修正
- {{修正内容1}}
- {{修正内容2}}
🤖 Generated with Claude Code (CI auto-fix)"
git push## 📊 CI修正レポート
**実行日時**: {{datetime}}
**動作モード**: {{mode}}
**結果**: {{success | partial | failed}}
### 実行されたアクション
| # | アクション | 結果 | 詳細 |
|---|-----------|------|------|
| 1 | ESLint 自動修正 | ✅ 成功 | 3ファイル修正 |
| 2 | TypeScript エラー修正 | ✅ 成功 | Button.tsx:45 |
| 3 | git commit | ⏭️ スキップ | allow_auto_commit = false |
### 変更されたファイル
| ファイル | 変更行数 | 変更内容 |
|---------|---------|---------|
| src/components/Button.tsx | +2 -1 | 型エラー修正 |
| src/utils/helper.ts | +0 -3 | 未使用インポート削除 |
### 次のステップ
- [ ] 変更内容を確認: `git diff`
- [ ] 手動でコミット: `git add -A && git commit -m "fix: ..."`
- [ ] CI を再実行: `git push` または `gh workflow run`## ⚠️ CI失敗エスカレーション
**失敗回数**: 3回
**最新のrun_id**: {{run_id}}
**ブランチ**: {{branch}}
---
### エラー内容
{{エラーログの要約(最大50行)}}
---
### 試した修正
| 試行 | 修正内容 | 結果 |
|------|---------|------|
| 1 | {{修正1}} | ❌ 失敗 |
| 2 | {{修正2}} | ❌ 失敗 |
| 3 | {{修正3}} | ❌ 失敗 |
---
### 推定原因
{{根本原因の推測}}
---
### 手動対応が必要
このエラーは自動修正の範囲外です。以下を確認してください:
1. {{具体的な確認事項1}}
2. {{具体的な確認事項2}}
---
### 参考コマンド
```bash
# CI ログを確認
gh run view {{run_id}} --log
# ローカルでビルドを試す
npm run build
# ローカルでテストを試す
npm test
---
## 自動修正しないケース(即時エスカレーション)
以下の場合は修正を試みず、即座にユーザーに報告:
1. **環境変数・シークレット関連**: 設定変更が必要
2. **権限エラー**: GitHub/デプロイ先の設定が必要
3. **外部サービス障害**: 一時的な問題の可能性
4. **設計上の問題**: 根本的な修正が必要
5. **保護されたブランチ**: main/master への直接変更
6. **gh CLI がない**: GitHub Actions 操作不可
7. **CI設定ファイルがない**: CI自体が設定されていない
---
## 設定例
### 最小限の安全設定(推奨)
```json
{
"safety": { "mode": "dry-run" },
"ci": { "enable_auto_fix": false }
}
{
"safety": { "mode": "apply-local" },
"ci": { "enable_auto_fix": true },
"git": { "allow_auto_commit": false }
}{
"safety": { "mode": "apply-and-push" },
"ci": { "enable_auto_fix": true },
"git": {
"allow_auto_commit": true,
"allow_auto_push": true,
"protected_branches": ["main", "master", "production"]
},
"destructive_commands": { "allow_rm_rf": true }
}ci-status-checker.sh が CI 失敗を検知し、additionalContext 経由でシグナルが注入された場合の対応フロー。
[CI Status Checker] CI run failed
Run ID: <run_id>
Branch: <branch>
Workflow: <workflow_name>
Failed jobs: <job_names>
- シグナルを確認:
[CI Status Checker]プレフィックスを検出したら自動検知トリガーとして扱う - Run ID を抽出: シグナルから
run_idを取得し、詳細ログ取得に使用 - 自動的に Phase 0 から開始: 通常フロー(環境チェック → 設定確認 → CI状態確認 → 診断)を即時実行
# シグナルから run_id を取得して詳細ログを確認
RUN_ID="<run_id_from_signal>"
gh run view "$RUN_ID" --log-failed 2>/dev/null | head -100- ユーザーへの確認不要: シグナル受信は「CI失敗の診断を開始してください」という暗黙の指示として扱う
- dry-run モードを維持: 設定変更なしに apply-local/apply-and-push に昇格しない
- ブランチ保護を確認: シグナルに含まれるブランチが protected_branches でないか確認してから修正
## 🔔 CI 自動検知レポート
**検知元**: ci-status-checker.sh (PostToolUse hook)
**Run ID**: {{run_id}}
**ブランチ**: {{branch}}
**ワークフロー**: {{workflow}}
**失敗ジョブ**: {{failed_jobs}}
### 診断結果
{{Phase 2-3 の診断結果を記載}}
### 推奨アクション
{{Phase 4 のプランを記載}}- デフォルトは安全側に倒す: 設定がなければ何もしない
- 3回ルール厳守: 4回以上の自動修正は行わない
- 破壊的変更禁止: テストを削除したり、エラーを握りつぶす修正は禁止
- 変更を記録: 全ての操作をレポートに残す
- 保護ブランチ厳守: main/master への自動 push は絶対に行わない