Agent skill
branch-discipline
Use before any code changes - hard gate ensuring work never happens on main branch, with proper feature branch creation from correct base
Install this agent skill to your Project
npx add-skill https://github.com/troykelly/codex-skills/tree/main/skills/branch-discipline
SKILL.md
Branch Discipline
Overview
Never work on main. Create feature branches for all work.
Core principle: The main branch is sacred. All work happens in feature branches.
This is a HARD GATE. Do not proceed with code changes if on main.
The Gate
┌─────────────────────────────────────┐
│ CODE CHANGE NEEDED │
└─────────────────┬───────────────────┘
│
▼
┌─────────────────┐
│ Current branch? │
└────────┬────────┘
│
┌─────────┴─────────┐
│ │
main feature/*
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ STOP │ │ PROCEED │
│ Create │ │ with │
│ branch │ │ work │
└─────────┘ └─────────┘
Check Current Branch
# Show current branch
git branch --show-current
# If output is "main" or "master" → STOP
# If output is feature/* or fix/* → PROCEED
Branch Naming Convention
Format
[type]/issue-[number]-[short-description]
Types
| Type | Use For |
|---|---|
feature |
New functionality |
fix |
Bug fixes |
chore |
Maintenance, dependencies |
docs |
Documentation only |
refactor |
Code restructuring |
test |
Test additions/fixes |
Examples
feature/issue-123-user-authentication
fix/issue-456-login-redirect-loop
chore/issue-789-update-dependencies
docs/issue-101-api-documentation
refactor/issue-202-extract-validation
test/issue-303-add-integration-tests
Creating a Feature Branch
From Main (Default)
# Ensure main is up to date
git checkout main
git pull origin main
# Create and checkout new branch
git checkout -b feature/issue-[NUMBER]-[description]
# Push branch to remote (establishes tracking)
git push -u origin feature/issue-[NUMBER]-[description]
From Existing Feature Branch
When building on in-progress work:
# Checkout the base branch
git checkout feature/issue-100-base-feature
# Ensure it's up to date
git pull origin feature/issue-100-base-feature
# Create new branch from it
git checkout -b feature/issue-101-dependent-feature
Document the dependency in the issue.
Branch Lifecycle
Create → Work → Push → PR → Merge → Delete
After Merge
# Switch to main
git checkout main
# Pull the merge
git pull origin main
# Delete local branch
git branch -d feature/issue-123-completed-feature
# Delete remote branch (usually done via PR UI)
git push origin --delete feature/issue-123-completed-feature
Handling Stale Branches
If main has moved ahead:
# Option 1: Rebase (preferred for clean history)
git checkout feature/issue-123-my-feature
git fetch origin
git rebase origin/main
# Option 2: Merge (if conflicts are complex)
git checkout feature/issue-123-my-feature
git fetch origin
git merge origin/main
Protected Branches
Main should be protected. Never:
- Push directly to main
- Force push to main
- Delete main
If you accidentally commit to main:
# If not yet pushed - move commits to new branch
git branch feature/issue-123-accidental-main
git reset --hard origin/main
# If already pushed - DO NOT force push
# Instead, revert and recreate in proper branch
Multiple Issues, Same Branch?
Generally NO. Each issue gets its own branch.
Exception: Tightly coupled sub-issues from issue-decomposition MAY share a branch if:
- They are sequential dependencies
- They will be merged together
- They are part of the same PR
Document this in the issues if doing so.
Verification
Before making any code change:
# Check current branch
BRANCH=$(git branch --show-current)
# Verify not on main
if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then
echo "ERROR: On protected branch. Create feature branch first."
exit 1
fi
# Verify branch follows naming convention
if ! echo "$BRANCH" | grep -qE '^(feature|fix|chore|docs|refactor|test)/issue-[0-9]+-'; then
echo "WARNING: Branch name doesn't follow convention"
fi
Common Mistakes
| Mistake | Prevention |
|---|---|
| Committing to main | Check branch before every commit |
| Pushing to main | Branch protection rules |
| Wrong base branch | Verify before creating branch |
| Outdated branch | Rebase/merge before PR |
| Branch name typos | Use consistent naming |
Checklist
Before writing any code:
- Current branch is NOT main
- Branch name follows convention
- Branch is from correct base
- Branch is pushed to remote
- Issue number is in branch name
Integration
This skill is called by:
issue-driven-development- Step 6
This skill enables:
- Clean separation of work
- Easy PR creation
- Safe experimentation
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
hook-development
Use when the user wants to create Codex workflow hooks (pre/post run gates, tool-use validators, stop checks) or needs guidance on hook scripts and hooks.json configuration.
sentry-setup-ai-monitoring
Setup Sentry AI Agent Monitoring in any project. Use this when asked to add AI monitoring, track LLM calls, monitor AI agents, or instrument OpenAI/Anthropic/Vercel AI/LangChain/Google GenAI. Automatically detects installed AI SDKs and configures the appropriate Sentry integration.
agent-development
Use when the user wants to design Codex agent equivalents (specialized workers/profiles/prompt files), define triggering conditions, or build reusable agent prompts and validation tools.
skill-development
Use when the user wants to create or refine Codex skills, improve skill descriptions, organize skill resources, or follow Codex skill best practices.
sentry-setup-logging
Setup Sentry Logging in any project. Use this when asked to add Sentry logs, enable structured logging, setup console log capture, or integrate logging with Sentry. Supports JavaScript, TypeScript, Python, Ruby, React, Next.js, and other frameworks.
frontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Didn't find tool you were looking for?