skills/commit/SKILL.md
Smart commit, push, and npm publish with auto-splitting across domains. Creates atomic commits. Use when asked to "commit", "push changes", "publish", "save my work", or after completing implementation work. Automatically groups changes into logical commits.
npx skillsauth add howells/arc commitInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
<arc_runtime> This workflow requires the full Arc bundle, not a prompts-only install.
Paths in this skill use these conventions:
agents/..., references/..., disciplines/..., templates/..., scripts/..., rules/..., skills/<name>/... are Arc-owned files at the plugin root. Resolve the plugin root from this skill's filesystem location — it's the directory containing agents/ and skills/../... is local to this skill's directory..ruler/..., docs/..., src/..., or any project-relative path refers to the user's project repository.
</arc_runtime>Commit, push, and publish changes, intelligently splitting into separate commits when changes span multiple domains.
Usage:
/arc:commit - Auto-analyze and commit (may create multiple commits)/arc:commit push - Commit, push, then publish changed npm packages if present/arc:commit publish - Alias for the push-and-publish path$ARGUMENTS will be empty, "push", or "publish". Treat "push" and "publish" as the same push-and-publish path.
Status:
!`git status --porcelain 2>/dev/null || echo "(no changes)"`
Changes summary:
!`git diff --stat 2>/dev/null | head -20 || echo "(no diff)"`
Recent commits (for style reference):
!`git log --oneline -5 2>/dev/null || echo "(no commits)"`
Review the git state above. If you need more detail:
Single commit if:
Multiple commits if changes span multiple unrelated domains:
packages/ui, packages/api)apps/web, apps/admin)Common groupings:
packages/<name>/** - Package-specific changesapps/<name>/** - App-specific changes.eslintrc, turbo.json, etc.) - Config*.stories.tsx with their component - Same commit as component*.test.ts with their source - Same commit as sourceFor each logical group:
Stage only files for that group:
git add [files...]
Create commit with conventional message format:
git commit -m "$(cat <<'EOF'
type(scope): description
EOF
)"
Commit types:
feat - New featurefix - Bug fixrefactor - Code refactoringchore - Maintenance, deps, configdocs - Documentationtest - Testsstyle - Formatting, no code changeperf - Performance improvementci - CI/CD changesCommit message rules:
If TypeScript or lint errors block the commit:
CRITICAL RULES:
--no-verify or skip hooksas unknown as, as any)@ts-ignore, @ts-expect-error, or eslint-disable commentsFixing Process:
unknown and narrow it with type guardspush or publish argument provided)Skip this step unless $ARGUMENTS starts with "push" or "publish".
If pushing:
git push
If the branch has no upstream:
git push -u origin $(git branch --show-current)
If push fails (e.g., diverged history), report the issue - do NOT force push unless explicitly authorized.
push or publish argument provided)Skip this step unless $ARGUMENTS starts with "push" or "publish".
Publish only after commits and push have succeeded.
Detect candidate packages:
package.json files and changed files under directories containing a package.json.node_modules, dist, build, .next, .turbo, and coverage output.package.json has a name, a version, and does not have "private": true.publishConfig, files, bin, exports, or an explicit package-level prepublishOnly / prepare / build script. If package intent is unclear, ask before publishing.Pre-publish checks for each candidate:
Read the package's package.json.
Confirm the package has an npm package name and version.
Check whether that exact version is already published:
npm view <package-name>@<version> version
Run package-local verification when scripts exist, using the repo's detected package manager consistently:
test if a test script existsbuild if a build script existstypecheck if a typecheck script existsPublish from the package directory:
npm publish
Use npm publish --access public for scoped public packages when publishConfig.access is public or the existing package is public.
Publishing rules:
--force or delete registry versions.Tell the user:
If you cannot fix an error properly:
development
Create, review, or revise a concise project vision document that captures what a project is, who it is for, why it exists, success criteria, constraints, non-goals, and decision principles. Use when starting a new project, clarifying product direction, aligning a codebase for future agent work, defining a north star, or turning a vague idea into docs/vision.md.
tools
Use when starting any conversation - establishes Arc's skill routing, instruction priority, and bootstrap rules
development
Characterization testing and safety-net backfill for existing code. Use when legacy, under-tested, or risky code needs tests before a refactor, bug fix, or behavior change. Captures current behavior through public interfaces, identifies coverage gaps, and adds focused unit, integration, or E2E tests without replacing TDD implementation workflows.
testing
Run expert review on a plan, spec, or implementation approach with parallel reviewer agents. Presents findings as Socratic questions. Use when asked to "review the plan", "check this approach", or before implementation to validate architectural decisions. Optional argument: reviewer name (e.g., `/arc:review daniel-product-engineer`)