
Git Workflow
- 646 installs
- 41.6k repo stars
- Updated August 4, 2026
- agno-agi/agno
git-workflow is an agno-agi agent skill that enforces consistent Git branching, committing, and pull request patterns for developers who want coding agents to follow team git conventions without manual oversight.
About
git-workflow is a well-known agno-agi/agno skill listed on skills.sh with 570 installs that standardizes how coding agents handle branches, commits, and pull requests. It gives agents repeatable patterns so git operations stay aligned with team expectations instead of ad hoc messages and branch names. Developers reach for git-workflow when onboarding agents onto repositories with established git hygiene or when agent-generated commits and PRs need guardrails. The skill spans everyday development from feature branches through review-ready changes. Its skills.sh rank of 8596 reflects catalog placement among community workflow skills.
- Enforces standardized Git workflow rules for agents
- Automates branch naming, commit messages, and PR templates
- Prevents common mistakes like direct main commits
- Works across local, CI, and agent-driven environments
- Includes hard-gate checks before merge
Git Workflow by the numbers
- 646 all-time installs (skills.sh)
- Ranked #94 of 733 Git & Pull Requests skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/agno-agi/agno --skill git-workflowAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 646 |
|---|---|
| repo stars | ★ 41.6k |
| Last updated | August 4, 2026 |
| Repository | agno-agi/agno ↗ |
How do coding agents follow team git conventions?
Let their coding agent follow consistent Git branching, committing, and PR patterns without manual oversight.
Who is it for?
Development teams using agno agents who need automated guardrails on branching, commits, and PR workflows across repositories.
Skip if: Repositories with no shared git conventions or developers who only need a one-off commit message template.
When should I use this skill?
An agent is about to create branches, commit code, or open pull requests and the repository expects standardized git workflow behavior.
What you get
Convention-aligned feature branches, commit messages, and pull request steps produced by the agent during development.
- standardized branches
- conventional commits
- PR-ready git steps
By the numbers
- 570 installs on skills.sh
- skills.sh catalog rank 8596
Files
Git Workflow Skill
You are a Git workflow assistant. Help users with commits, branches, and pull requests following best practices.
Commit Message Guidelines
For commit message generation and validation, use get_skill_script("git-workflow", "commit_message.py").
Format
<type>(<scope>): <subject>
<body>
<footer>Types
- feat: New feature
- fix: Bug fix
- docs: Documentation only
- style: Formatting, no code change
- refactor: Code change that neither fixes a bug nor adds a feature
- perf: Performance improvement
- test: Adding or updating tests
- chore: Maintenance tasks
Examples
feat(auth): add OAuth2 login support
Implemented OAuth2 authentication flow with Google and GitHub providers.
Added token refresh mechanism and session management.
Closes #123fix(api): handle null response from external service
Added null check before processing response data to prevent
NullPointerException when external service returns empty response.
Fixes #456Branch Naming
Format
<type>/<ticket-id>-<short-description>Examples
feature/AUTH-123-oauth-loginfix/BUG-456-null-pointerchore/TECH-789-update-deps
Pull Request Guidelines
Title
Follow commit message format for the title.
Description Template
## Summary
Brief description of what this PR does.
## Changes
- Change 1
- Change 2
## Testing
How was this tested?
## Checklist
- [ ] Tests added/updated
- [ ] Documentation updated
- [ ] No breaking changesCommon Commands
Starting Work
git checkout main
git pull origin main
git checkout -b feature/TICKET-123-descriptionCommitting
git add -p # Interactive staging
git commit -m "type(scope): description"Updating Branch
git fetch origin
git rebase origin/mainCreating PR
git push -u origin feature/TICKET-123-description
# Then create PR on GitHub/GitLabCommit Types Reference
Primary Types
| Type | Description | Example |
|---|---|---|
feat | A new feature for the user | feat(cart): add checkout button |
fix | A bug fix for the user | fix(login): correct password validation |
docs | Documentation only changes | docs(readme): update installation steps |
style | Formatting, missing semicolons, etc. | style(api): format with prettier |
refactor | Code change that neither fixes a bug nor adds a feature | refactor(auth): simplify token logic |
perf | Performance improvement | perf(query): add database index |
test | Adding or updating tests | test(api): add user endpoint tests |
chore | Maintenance tasks | chore(deps): update lodash to 4.17.21 |
Additional Types (Optional)
| Type | Description | Example |
|---|---|---|
build | Build system or external dependencies | build(docker): optimize image size |
ci | CI/CD configuration | ci(github): add lint workflow |
revert | Reverting a previous commit | revert: feat(cart): add checkout button |
Scope Examples
Scopes should be short and identify the area of the codebase:
auth- Authentication moduleapi- API endpointsui- User interfacedb- Databaseconfig- Configurationdeps- Dependenciescore- Core functionality
Breaking Changes
Use ! after type/scope for breaking changes:
feat(api)!: change response format
BREAKING CHANGE: Response now uses camelCase instead of snake_case.
Migration guide available in docs/migration-v2.mdMulti-line Commits
For complex changes, use a body:
feat(search): implement fuzzy matching
Added fuzzy matching algorithm to improve search results.
Users can now find items even with typos or partial matches.
- Implemented Levenshtein distance calculation
- Added configurable threshold for match sensitivity
- Updated search index to support fuzzy queries
Closes #789# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------
#!/usr/bin/env python3
"""
Commit Message
=============================
Validate or generate conventional commit messages.
"""
import json
import sys
COMMIT_TYPES = {
"feat": "A new feature",
"fix": "A bug fix",
"docs": "Documentation changes",
"style": "Formatting, no code change",
"refactor": "Code restructuring",
"perf": "Performance improvement",
"test": "Adding/updating tests",
"chore": "Maintenance tasks",
"build": "Build system changes",
"ci": "CI/CD changes",
}
def validate(message: str) -> dict:
"""Validate a commit message."""
errors = []
warnings = []
lines = message.strip().split("\n")
if not lines or not lines[0]:
return {"valid": False, "errors": ["Empty commit message"]}
subject = lines[0]
# Check format: type: description
if ":" not in subject:
errors.append("Missing ':' separator (expected 'type: description')")
else:
type_part, desc = subject.split(":", 1)
type_part = type_part.strip().rstrip("!").split("(")[0]
desc = desc.strip()
if type_part not in COMMIT_TYPES:
errors.append(
f"Unknown type '{type_part}'. Valid: {', '.join(COMMIT_TYPES.keys())}"
)
if not desc:
errors.append("Description required after ':'")
if len(subject) > 72:
warnings.append(f"Subject is {len(subject)} chars (recommended: ≤72)")
return {"valid": len(errors) == 0, "errors": errors, "warnings": warnings}
def generate(commit_type: str, description: str, scope: str = None) -> dict:
"""Generate a commit message."""
if commit_type not in COMMIT_TYPES:
return {
"error": f"Unknown type '{commit_type}'. Valid: {', '.join(COMMIT_TYPES.keys())}"
}
if scope:
message = f"{commit_type}({scope}): {description}"
else:
message = f"{commit_type}: {description}"
return {"message": message, "type": commit_type, "description": description}
def list_types() -> dict:
"""List all valid commit types."""
return {"types": COMMIT_TYPES}
# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
try:
if len(sys.argv) < 2:
print(
json.dumps(
{
"error": "Usage: commit_message.py <validate|generate|types> [args]"
}
)
)
sys.exit(1)
command = sys.argv[1]
if command == "validate":
msg = sys.argv[2] if len(sys.argv) > 2 else sys.stdin.read()
result = validate(msg)
elif command == "generate":
if len(sys.argv) < 4:
result = {
"error": "Usage: commit_message.py generate <type> <description> [scope]"
}
else:
commit_type = sys.argv[2]
description = sys.argv[3]
scope = sys.argv[4] if len(sys.argv) > 4 else None
result = generate(commit_type, description, scope)
elif command == "types":
result = list_types()
else:
result = {
"error": f"Unknown command '{command}'. Use: validate, generate, types"
}
print(json.dumps(result, indent=2))
except Exception as e:
print(json.dumps({"error": str(e)}))
Related skills
How it compares
Choose git-workflow for ongoing agent git hygiene across a project rather than a single-purpose PR description generator.
FAQ
How popular is the git-workflow skill?
The agno-agi/agno git-workflow skill reports 570 installs on skills.sh with a catalog rank of 8596 and well-known sourceType status.
What does git-workflow standardize?
git-workflow teaches coding agents consistent Git branching, committing, and pull request patterns so repository work follows team conventions without developers micromanaging each git step.