first-fluke/oma-scm
SCM (software configuration management) and Git: branching, merges, conflicts, worktrees, baselines, audit readiness, plus Conventional Commits and safe staging.
npx skills add https://github.com/first-fluke/oh-my-agent --skill oma-scm
oma-scm)Manage Git and software configuration management safely: commits, branches, merges, worktrees, releases, baselines, audit posture, CODEOWNERS, and Conventional Commits.
This skill is the single place for configuration management (CM) on a software repo and for Conventional Commits / safe staging.
/scm, message type/scope, splitting staged changes into multiple commits.oma-debugoma-qaoma-pm.agents/oma-config.yaml, Conventional Commit references, onboarding-risk and CODEOWNERS playbooks| Action | SSL primitive | Evidence |
|--------|---------------|----------|
| Read Git state | READ | git status, diff, log, config |
| Select SCM path | SELECT | Quick Path vs Full CM Path |
| Compare change scopes | COMPARE | Split by type/scope/feature |
| Validate commit/governance rules | VALIDATE | Config and CM controls |
| Stage explicit files | CALL_TOOL | git add <specific-files> |
| Commit or manage refs | CALL_TOOL | Git commit/branch/merge/rebase/tag |
| Write audit notes | WRITE | Commit message or CM report |
| Report result | NOTIFY | Final SCM summary |
git status -sb
git diff --staged
git log --oneline -5
Stage and commit only explicit paths:
git add <specific-files>
git commit -m "$(cat <<'EOF'
<type>(<scope>): <description>
[optional body]
Co-Authored-By: First Fluke <[email protected]>
EOF
)"
| Scope | Resource target |
|-------|-----------------|
| CODEBASE | Tracked files, diffs, conflicts, CODEOWNERS |
| LOCAL_FS | Git metadata, config files, commit message temp files |
| PROCESS | Git commands and verification commands |
| CREDENTIALS | Secret-sensitive files must not be staged or committed |
main/protected branches", broad staging, the commit-split rules, single vs. multiple commits, message type/scope/length, and shared-history rewrite. State briefly what you are doing and proceed; do not ask for re-confirmation of an instruction the user already gave. Only confirm if the instruction is genuinely ambiguous (multiple plausible interpretations) — never as a way to push back on a clear directive..env, keys, raw tokens). If the user's instruction would stage/commit such material, surface it once before proceeding; everything else proceeds without challenge..agents/oma-config.yaml before applying project-specific commit or CM rules.oma-config.yaml language: user-facing SCM output (status summaries, conflict explanations, CM audit notes, action plans) is localized. Per i18n-guide.md, commit messages, PR titles/body, branch names, and status keywords stay in English regardless of the setting.| File | Role |
|------|------|
| .agents/oma-config.yaml | Conventional Commit types, branch prefixes, message rules, and CM pointers |
Use this when the user intent is mainly "commit this safely."
commit-config.yamlUse this when the user asks about branching strategy, merges, rebase/cherry-pick, worktrees, release refs, CODEOWNERS, or audit posture.
../../workflows/scm.md| CM function | Intent | Typical artefacts / actions |
|-------------|--------|------------------------------|
| Management & planning | Agreed rules | CONTRIBUTING.md, SECURITY.md, commit-config.yaml |
| Configuration identification | What is managed, naming | Branch/tag rules, version files, .gitattributes, LFS |
| Configuration control | Reviewed change | PRs, checks, issue links, BREAKING CHANGE footers |
| Status accounting | As-built truth | main / release refs, CHANGELOG, tags, CI status |
| Verification & audit | Evidence | CI logs, signed commits, lockfiles / SBOM policy |
commit-config.yaml and files listed under documented_process.CONTRIBUTING.md / README; state assumptions.package.json, etc.)..gitattributes / LFS for binaries and generated assets.commit-config.yaml branch_prefixes when the project uses them.merge-base, git status, resolve markers, tests; suggest rerere when conflicts repeat.git worktree add; merge/rebase from the target branch’s checkout; all worktrees share one object database.--force-with-lease if force-push is unavoidable.git status -sb: branch, remote tracking, ahead/behind, merge state.CHANGELOG or tooling (semantic-release, release-please, changesets) if present.merge_group when merge queue applies..env, keys, raw tokens). Filename patterns from commit-config.yaml forbidden_patterns are enforced mechanically by the scm-guard PreToolUse hook; for content-level leaks (tokens hardcoded in ordinary source files), run a scanner when available (gitleaks protect --staged, trufflehog git) before large or unfamiliar commits..github/CODEOWNERS).*).Read change_governance.require_codeowners and ownership.* in commit-config.yaml when present.
Use this quick scan when joining or inheriting a repository to identify risky areas before major changes.
lookback window.Read thresholds from commit-config.yaml onboarding_metrics when present and cite caveats:
| Type | Description | Branch Prefix |
|------|-------------|---------------|
| feat | New feature | feature/ |
| fix | Bug fix | fix/ |
| refactor | Code improvement | refactor/ |
| docs | Documentation changes | docs/ |
| test | Test additions/modifications | test/ |
| chore | Build, configuration, etc. | chore/ |
| style | Code style changes | style/ |
| perf | Performance improvements | perf/ |
| build | Build system / external dependencies | build/ |
| ci | CI configuration and scripts | ci/ |
| revert | Revert a previous commit | (none) |
<type>(<scope>): <description>
[optional body]
Co-Authored-By: First Fluke <[email protected]>
git status
git diff --staged
git log --oneline -5
If changes span multiple features/domains, split commits by feature.
Split when: the changes are logically independent (different features, unrelated fixes).
Do not split when: one logical change (even if it touches code + tests + docs together), or the user asked for a single commit.
Precedence for edge cases (when both readings are defensible):
feat · Bug fix → fix · Structure-only → refactor · Docs only → docs · Tests → test · Build/config → choreUse module/component: feat(auth):, fix(api):, or omit: chore: update dependencies
≤72 chars (per commit-config.yaml), imperative mood, lowercase start, no trailing period.
Show the message, then commit with explicit paths:
git add <specific-files>
git commit -m "$(cat <<'EOF'
<type>(<scope>): <description>
[optional body]
Co-Authored-By: First Fluke <[email protected]>
EOF
)"
If HEREDOC is unstable in your shell (or body is long), use file-based commit input:
git add <specific-files>
msgfile="$(mktemp)"
cat > "$msgfile" <<'EOF'
<type>(<scope>): <description>
[optional body]
Co-Authored-By: First Fluke <[email protected]>
EOF
git commit -F "$msgfile"
rm -f "$msgfile"
Use HEREDOC by default, and switch to -F for long or flaky terminal sessions.
Push only when the user asks or a workflow requires it. Before pushing:
git status -sb — confirm branch, remote tracking, ahead/behind.commit-config.yaml sets require_pr_for_default_branch: true, push a topic branch and open a PR (gh pr create) instead of pushing directly — unless the user explicitly instructed a direct push (Guardrail 0).--force; after an approved history rewrite use git push --force-with-lease.First determine whether the target commits are shared:
git status -sb # ahead/behind vs upstream
git log --oneline @{u}..HEAD # commits not yet pushed (errors when no upstream — treat all as unpushed)
git commit --amend, git commit --fixup <sha> + git rebase -i --autosquash, and interactive rebase are safe — proceed.--force-with-lease when pushing the result.--amend, check git diff --staged: the amend must not silently absorb unrelated staged changes..agents/oma-config.yamlresources/conventional-commits.mdresources/onboarding-risk-signals.mdresources/codeowners-playbook.md../oma-observability/SKILL.md §Integrations — release markers (service.version), revert baseline diffgit add -A or git add . without explicit user permission.Take first-fluke/oma-scm from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.