fix-develop skill
Automates the diagnosis and fixing of failing CI workflows on a repository's default branch by creating worktrees and pull requests.
- GitHub stars
- 32
- Files
- 1
- Last commit
- Nov 10, 2026
- License
- Apache-2.0
- Allowed tools
- —
What does the fix-develop skill do?
fix-develop automates the diagnosis and fixing of failing CI workflows on a repository's default branch by creating worktrees and pull requests.
Summary generated from the skill's SKILL.md.
About the fix-develop skill
Automating the repair of broken continuous integration pipelines on a repository's default branch is the primary function of this skill. It is designed for developers and DevOps engineers who need to maintain a healthy main or develop branch without manual intervention for every build failure. The tool identifies failing workflow runs using the GitHub CLI, analyzes logs to categorize errors as test failures, linting issues, or dependency problems, and then implements targeted fixes.
When an agent loads this skill, it operates by creating a separate git worktree to ensure the primary repository remains untouched during the repair process. It produces a pull request targeting the default branch that includes a summary of the root cause and the specific evidence of the fix. The process follows a strict protocol of minimal changes, avoiding refactoring to focus solely on resolving the reported error. It continues to iterate through fixes and address review comments until the CI status returns to a passing state or it reaches a limit of ten attempts.
What an agent can do with it
- 1Repair failing CI workflowsAn agent can be tasked to diagnose and fix broken builds on the main branch automatically.
- 2Identify flaky test issuesThe tool can distinguish between actual code errors and transient infrastructure failures to prevent unnecessary pull requests.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the fix-develop skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the fix-develop skill in Plugin
/plugin marketplace add bjcoombs/ai-native-toolkit /plugin install ai-native-toolkit@ai-native-toolkit
Install the fix-develop skill in Claude Code
~/.claude/skills/fix-develop/SKILL.md
$ npx degit bjcoombs/ai-native-toolkit/skills/fix-develop ~/.claude/skills/fix-developInstall the fix-develop skill in Claude Code (project)
.claude/skills/fix-develop/SKILL.md
$ npx degit bjcoombs/ai-native-toolkit/skills/fix-develop .claude/skills/fix-developInstall the fix-develop skill in Codex
~/.agents/skills/fix-develop/SKILL.md
$ npx degit bjcoombs/ai-native-toolkit/skills/fix-develop ~/.agents/skills/fix-developInstall the fix-develop skill in Gemini CLI
~/.gemini/skills/fix-develop/SKILL.md
$ npx degit bjcoombs/ai-native-toolkit/skills/fix-develop ~/.gemini/skills/fix-developInstall the fix-develop skill in Claude.ai
npx degit bjcoombs/ai-native-toolkit/skills/fix-develop fix-develop && zip -r fix-develop.zip fix-develop # claude.ai → Customize → Skills → + → Create skill → Upload a skill → fix-develop.zip
SKILL.md
View on GitHubFix Default Branch
Assess failing CI on the repo's default branch (main / develop / etc., or nightly build), create a worktree with a fix, push a PR, and loop until CI passes and review comments are addressed.
Usage: /fix-develop [repo-path] - defaults to current repo context. (Command name is historical; works on whichever branch the repo treats as default.)
Step 1: Assess Default Branch Health
set -euo pipefail
# Identify the repo
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo "")
REPO_NAME=$(basename "$REPO_ROOT")
ORG=$(gh repo view --json owner --jq '.owner.login')
REPO=$(gh repo view --json name --jq '.name')
DEFAULT_BRANCH=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name')
# Fail fast if any of the above came back empty (wrong pane, no gh auth, not a repo)
: "${REPO_ROOT:?Not inside a git repo — re-run from the target repo}"
: "${ORG:?gh repo view returned no owner — check gh auth and current directory}"
: "${REPO:?gh repo view returned no name — check gh auth and current directory}"
: "${DEFAULT_BRANCH:?gh repo view returned no defaultBranchRef — check gh auth}"
# Get latest CI status on the default branch
gh api repos/$ORG/$REPO/commits/$DEFAULT_BRANCH/status --jq '{state: .state, total: .total_count}'
# Get failing workflow runs on the default branch
gh run list --branch $DEFAULT_BRANCH --status failure --limit 5 --json databaseId,name,conclusion,createdAt \
| jq '.[] | {id: .databaseId, name, conclusion, created: .createdAt}'
If the default branch is green, report "$DEFAULT_BRANCH is healthy, nothing to fix" and STOP.
Step 2: Diagnose Failures
# For each failing run, get the failed jobs and logs
RUN_ID=<from step 1>
gh run view $RUN_ID --json jobs | jq '.jobs[] | select(.conclusion == "FAILURE") | {name, conclusion}'
gh run view $RUN_ID --log-failed 2>&1 | tail -100
Categorize failures:
- Test failures - read the failing test + source code to understand root cause
- Lint/build errors - read the offending file at the reported line
- Flaky/infrastructure - check if the same test passed on a recent re-run. If so, report as flaky (not actionable) and STOP
- Dependency issues - check if a dependency update broke something
Report diagnosis to user before proceeding:
## Default Branch Diagnosis
Branch: <DEFAULT_BRANCH>
Failing runs: <list>
Root cause: <assessment>
Proposed fix: <plan>
Proceeding to create fix PR...
Step 3: Create Worktree and Fix
set -euo pipefail
: "${ORG:?ORG unset — re-run Step 1 to derive repo identity}"
: "${REPO:?REPO unset — re-run Step 1 to derive repo identity}"
: "${DEFAULT_BRANCH:?DEFAULT_BRANCH unset — re-run Step 1 to derive repo identity}"
# From repo-main (sacred, always on default branch)
cd ~/dev/github.com/$ORG/$REPO/$REPO-main
git checkout $DEFAULT_BRANCH && git pull origin $DEFAULT_BRANCH
# Create fix branch and worktree (slug the default branch in case it contains '/')
DEFAULT_BRANCH_SLUG="${DEFAULT_BRANCH//\//-}"
BRANCH_NAME="fix-${DEFAULT_BRANCH_SLUG}-$(date +%Y%m%d)-$(echo '<brief-description>' | tr ' ' '-')"
git branch $BRANCH_NAME
git worktree add ../worktree/$BRANCH_NAME $BRANCH_NAME
cd ../worktree/$BRANCH_NAME
Implement the fix. Keep changes minimal - fix the failing tests/build only. Do not refactor, do not improve, do not clean up.
# Commit and push
git add <specific-files>
git commit -m "fix: <description of what was failing and why>"
git push -u origin $BRANCH_NAME
# Create PR targeting the default branch
gh pr create --base $DEFAULT_BRANCH --title "fix: Resolve failing CI on $DEFAULT_BRANCH" --body "$(cat <<'EOF'
## Summary
- <What was failing>
- <Root cause>
- <What this PR fixes>
## Evidence
- Failing run: <link>
- Error: <brief>
EOF
)"
Step 4: Loop Until Green
Use the pr-review-merge skill to drive the fix PR to merge-ready, passing $PR and
$DEFAULT_BRANCH and the project's bot rules. It owns the CI/threads/conversation checks
and the positive-jq-filter pitfalls.
Protocol
-
Autonomous Loop - no permission needed between iterations:
- Check CI + comments, fix, push
- Report: "Iteration N: Fixed X issues" or "Iteration N: Waiting for CI"
-
Stop when green:
PR #X: CI passing, all comments addressed. Ready for merge. This fixes the following $DEFAULT_BRANCH failures: - <list of what was broken> --- ## Current Work PR: #X - Fix failing CI on $DEFAULT_BRANCH https://github.com/org/repo/pull/X Latest: All green after N iterations -
Only ask for help if:
- Root cause is unclear after reading logs + source
- Fix requires architectural decision
- After 5+ iterations with no progress
- Failure is in code you don't have context on
-
After merge (if user merges):
cd ~/dev/github.com/$ORG/$REPO cd $REPO-main && git worktree remove --force ../worktree/$BRANCH_NAME git branch -d $BRANCH_NAME
Important
- Minimal fixes only - fix what's broken, nothing else
- Use positive jq filters -
select(.state == "FAILURE")notselect(.state != "SUCCESS") - Never work in repo-main - always create a worktree
- Max iterations: 10 (ask for help after that)
- If flaky/infrastructure: Report and STOP - don't create a PR for transient failures
Files in this skill
1fix-develop skill questions
How do I install the fix-develop skill in Claude Code?
Run npx degit bjcoombs/ai-native-toolkit/skills/fix-develop ~/.claude/skills/fix-develop. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the fix-develop skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
How much refactoring is allowed when implementing a fix?
The agent must keep changes minimal, focusing only on fixing the failing tests or build without refactoring or cleaning up code.