From khemoo-skills
Use when there are uncommitted changes in the working tree, an unmerged branch with no PR, an open PR awaiting review or with unresolved comments, or merged commits since the last semver tag.
How this skill is triggered — by the user, by Claude, or both
Slash command
/khemoo-skills:vc-khemooThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Core principle:** Every change flows through commit → PR → review → merge → release. Context detection picks up from wherever you are.
references/agents/api-contract.mdreferences/agents/design.mdreferences/agents/devops.mdreferences/agents/documentation.mdreferences/agents/observability.mdreferences/agents/security-deep.mdreferences/agents/systems-performance.mdreferences/agents/ui-ux.mdreferences/bump-decision.mdreferences/cores.mdreferences/deferred-issue-template.mdreferences/pr-body-template.mdreferences/release-commands.mdreferences/resolved-findings-comment.mdreferences/review-output.mdscripts/test-references.shCore principle: Every change flows through commit → PR → review → merge → release. Context detection picks up from wherever you are.
Announce at start: "Using vc-khemoo to run the version control pipeline."
Before running, detect the current state and start at the first stage below whose condition is true. If none match, there is nothing to do.
| Detected state | Start at |
|---|---|
| Uncommitted changes in working tree | Stage 1: Commit |
| Branch ahead of base, no open PR | Stage 2: PR |
| Open PR with no review activity | Stage 3: Review |
| Open PR with unresolved review comments (human or subagent) | Stage 4: Resolve & Merge |
| PR review issues all resolved, not merged | Stage 4: Merge |
| Merged commits since last semver tag | Stage 5: Release |
Working on the default branch: if HEAD is on main/master with uncommitted changes, auto-create a feature branch named <type>/<slug> from the dominant change type (feat, fix, docs, refactor, chore, test, etc.) where <slug> is a 2–4 word summary (e.g. fix/empty-diff-handling). Run git switch -c <branch>, announce, continue. Stop and ask only if (a) the user said to commit on the default branch this session, or (b) branch creation fails. Never silently commit to the default branch.
Sub-command overrides:
/vc-khemoo — full pipeline from detected state/vc-khemoo commit — Stage 1 only/vc-khemoo review [uncommitted|branch|pr] — Stage 3 only, on the chosen scope (auto-detect if no arg). Standalone: produces the consolidated review report and stops; does not auto-progress to Stage 4./vc-khemoo release major|minor|patch [--github-release|--tag-only] — Stage 5 onlyRule: One concern per commit.
git status and git diff to see all changesSplitting heuristic — separate commits for: different features in different files; formatting/lint fixes; config changes; anything that doesn't clearly fit. Test + implementation for the same feature → one commit.
Commit message format:
<type>[!]: <short imperative description>
<optional body explaining why>
<optional footers, e.g. BREAKING CHANGE: ...>
Type: short lowercase word — standard categories (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert) or domain-specific (docker, sim, auth, api, etc.). No parenthesized scope (feat(auth): etc.) — type alone. Use ! for breaking changes (feat!:); BREAKING CHANGE: footer describes the break.
Red flags — stop and re-split: 5+ unrelated files; message needs "and"; mix of feature code and unrelated cleanup.
main or master)HEAD is on a named branch, not detached. If detached, stop and ask.origin exists (git remote get-url origin). If not, stop and ask.gh auth status succeeds. If not, instruct the user to run gh auth login and stop.git push -u origin <branch>. If push fails, surface the error verbatim and stop — do not retry blindly.PR title and body template — load references/pr-body-template.md (always required at Stage 2). Title <Type>: <Subject>. Body has Summary, Changes, How to Test, Release-Note (consumed by Stage 5 for patch-vs-minor), Checklist. Fill from micro-commit messages and report the PR URL.
Dispatch parallel review subagents. No "too small to review" exemption — diff size, language, and triviality do not exempt a change.
Review scopes:
| Scope | Diff source |
|---|---|
uncommitted | git diff HEAD plus git diff --cached |
branch | git diff <base>...HEAD (<base> = main or master) |
pr | gh pr diff <pr-number> |
Auto-detect: in the full pipeline, scope follows the entry stage. Standalone /vc-khemoo review picks the most specific present (PR > branch > uncommitted), or stops if none.
Fix per scope: uncommitted → fold into working tree; branch → new micro-unit commits; pr → new commits pushed to PR branch + re-run Stage 3 (the Stage 4 loop).
Reviewer roster (cores always dispatched; agents when their trigger matches):
| Reviewer | Agent | Model | Trigger / Focus | Brief |
|---|---|---|---|---|
| Code | code-reviewer | opus | always · logic, architecture, contracts | references/cores.md |
| Security | security-reviewer | sonnet | always · OWASP, injection, auth, BOLA | references/cores.md |
| Quality | quality-reviewer | sonnet | always · naming, patterns, anti-patterns | references/cores.md |
| Performance | quality-reviewer | opus | always · complexity, memory, latency | references/cores.md |
| Test Engineer | test-engineer | sonnet | always · coverage, edge cases | references/cores.md |
| UI/UX | designer | sonnet | **/*.{tsx,jsx,vue,svelte}, components | references/agents/ui-ux.md |
| Design | designer | sonnet | **/*.{css,scss,sass,less}, styles, design tokens | references/agents/design.md |
| DevOps | build-fixer | sonnet | Dockerfile*, .github/workflows/**, *.tf, k8s/**, deploy/** | references/agents/devops.md |
| Documentation | writer | sonnet | **/*.md, docs/**, public-API surface | references/agents/documentation.md |
| Observability | code-reviewer | sonnet | log / metric / trace SDK calls, observability libs | references/agents/observability.md |
| API/Contract | code-reviewer | opus | **/api/**, OpenAPI / GraphQL / proto, exported public types, new endpoint accepting user-controlled identifiers | references/agents/api-contract.md |
| Systems Performance | code-reviewer | opus | native code, locks, atomics, hot paths, bench/** | references/agents/systems-performance.md |
| Security Deep | security-reviewer | opus | crypto, auth flows, supply-chain, sandboxing, new endpoint accepting user-controlled identifiers (BOLA surface) | references/agents/security-deep.md |
quality-reviewer is dispatched twice intentionally (sonnet for Quality, opus for Performance). When a system agent dispatches, the matching core reviewer still runs — the agent adds depth, not replacement.
Load only the brief files for reviewers you actually dispatch. Multiple agents may dispatch on the same diff; deduplication happens at aggregation time.
Report format and aggregation: see references/review-output.md. When dispatching a reviewer, include the per-reviewer report format from this file in the subagent's prompt so the reviewer (which only loads its own brief) knows what shape to return.
gh pr view <pr> --json comments,reviews.critical / REQUEST_CHANGES / in-scope finding. Each fix is a new micro-unit commit (Stage 1 rules) pushed to the PR branch. Record (finding, fix-commit-sha).critical or REQUEST_CHANGES. Load references/deferred-issue-template.md only when actually deferring. Record (finding, issue-number). If from a human comment, reply on the PR linking the issue.references/resolved-findings-comment.md. Reply to every human comment with fixed in <sha> or deferred to #<issue>. Skip both this step and loading the template if zero findings.gh pr merge <pr-number> --merge --delete-branch. Use --squash only if the user explicitly says "squash" for this PR.Versions follow strict semver vMAJOR.MINOR.PATCH. Default: major/minor → tag + GitHub Release; patch → tag only.
Bump rule (inline — covers >95% of cases, no reference load needed):
BREAKING CHANGE: footer, ! after the type, or the literal word "breaking" in the message. Stop and ask the user to confirm before tagging.Release-Note line that would be a release-page headline an end user would care about. Stop and ask the user to confirm before bumping minor. Load references/bump-decision.md here for the full anti-rationalization checklist; otherwise do NOT load it.Last tag and commits since:
LAST_TAG=$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1)
git log ${LAST_TAG:+${LAST_TAG}..}HEAD --oneline
Bump: strip leading v from LAST_TAG (start at 0.1.0 if empty). Major: X.Y.Z → X+1.0.0. Minor: X.Y.Z → X.Y+1.0. Patch: X.Y.Z → X.Y.Z+1.
Version files (.claude-plugin/plugin.json, package.json, pyproject.toml, Cargo.toml, etc.) — bump them, commit chore: bump to v<version>, then git push origin HEAD BEFORE tagging.
Release commands: see references/release-commands.md. Do not gh release create for a patch unless the user explicitly asked.
Never:
REQUEST_CHANGES unresolvedgh release create for a patch without explicit user requestAlways:
^v\d+\.\d+\.\d+$) when reading version historyBREAKING CHANGE, !, or "breaking" before tagging — ask before bumping if any matchGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub kickthemoon0817/khemoo-skills --plugin khemoo-skills