From GitOps Workflow
End-to-end GitOps workflow governance and automation covering branching, Conventional Commits, PR lifecycle, CI gating, and release management. Use when the task involves: (1) Creating a Git branch from the default branch, (2) Writing or enforcing Conventional Commit messages, (3) Creating, updating, reviewing, or merging pull requests, (4) Generating squash-merge commit messages or release notes, (5) Setting up or enforcing CI gating policies, (6) Automating Git or GitHub CLI (gh) workflows, (7) Enforcing team Git workflow standards or branch naming conventions, or (8) Any task requiring structured Git operations with auditability and governance. Includes helper scripts for git and GitHub CLI.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gitops-workflow:gitops-workflowThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill packages a **repeatable, auditable GitOps workflow** with **policy-as-code** options (templates + CI checks) and **automation helpers** (scripts). It is designed to be:
assets/config/github-governance-policy.v1.jsonassets/config/gitleaks.tomlassets/config/gitops-workflow.jsonassets/github/workflows/commitlint.ymlassets/github/workflows/pr-title-lint.ymlassets/github/workflows/release-please.ymlassets/github/workflows/sensitive-scan.ymlassets/templates/commitlint.config.cjsassets/templates/issue-body.mdassets/templates/pull-request-body.mdassets/templates/release-notes.mdassets/templates/squash-merge-message.mdreferences/AUTOMATED_REVIEWERS.mdreferences/CHECKLISTS.mdreferences/CONVENTIONAL_COMMITS.mdreferences/ENFORCEMENT.mdreferences/GH_CLI_SNIPPETS.mdreferences/GH_GOVERNANCE_RUNBOOK.mdreferences/GOVERNANCE_POLICY.mdreferences/RECEIPTS.mdThis skill packages a repeatable, auditable GitOps workflow with policy-as-code options (templates + CI checks) and automation helpers (scripts). It is designed to be:
Use this skill when the user asks you to:
ship, ship raw, ship sync, doctor, or doctor fix for higher-level workflow routinggit available and the current working directory is a git repo.gh authenticated (primary tool; falls back to git/curl if unavailable).Optional helpers:
python3 (for generator scripts)jq (some gh JSON queries are easier with it, but not required)Sensitive scan platform note:
sensitive-scan.sh support is Linux-first; native Windows is out of scope for this skillgh (GitHub CLI) is the primary tool. WHEN gh is not available or not authenticated THEN you SHALL fall back to git/curl targeting the GitHub REST API.git.Keep the agent context narrow by loading only what the current request needs.
bash "$SKILL_ROOT/scripts/gitops-help.sh" --json first instead of loading large prose sections.Preferred short-path routing:
gitops-help.sh --json is the primary capability-discovery surface for agents and wrappers; invoke it as bash "$SKILL_ROOT/scripts/gitops-help.sh" --json.ship, ship raw, ship sync, ship ready, doctor, and doctor fix should route directly to their bundled scripts with --json.sync raw / raw sync should route to sync-raw.sh with --json.commit and push raw / push raw should route to ship.sh raw --json.ship.sh or batch-commit.py plan returns commit inventory, the agent is responsible for choosing the final commit groupings and writing Conventional Commit messages with mandatory bullet bodies.manual_bypass_* helper fields THEN you SHALL explicitly tell the user that a bypass option exists, what it will do, and that it requires approval before use.manual_bypass_* helper fields THEN you SHALL treat them as opt-in guidance only and ask the user before using the bypass command.Unless the repo explicitly defines otherwise, follow these rules:
main/master/etc.) unless the user explicitly requested in-place raw work on that branch.feat/<short-desc>, fix/<short-desc>, docs/<short-desc>, refactor/<short-desc>, test/<short-desc>Fixes #123, Closes #123, …).--deterministic for fully mechanical bodies without placeholders.validate -> plan -> apply -> audit commands rather than ad hoc edits in the GitHub UI.bash "$SKILL_ROOT/scripts/sensitive-scan.sh" --staged --redactgitleaks update when network is available; pin with SENSITIVE_SCAN_GITLEAKS_VERSION=vX.Y.Z if neededgit push --force-with-lease (never git push --force).When a bundled script exists for the requested operation, use the script first.
Direct ad hoc gh/git command sequences are fallback-only.
Path resolution (mandatory):
scripts/, references/, and assets/ paths in this skill as relative to this skill folder (the folder containing this SKILL.md), not relative to the target repository where git work is being performed.gitops-workflow, prefer the copies under the active worktree/repository being edited so script behavior matches the branch under review. Use the canonical skill-source path only when it matches the active checkout or when the active repository is not modifying this skill.SKILL_ROOT=<absolute-path-to-this-skill-folder><absolute-path>/gitops-workflow"$SKILL_ROOT/scripts/..." so they are found even when CWD is another repo.| Task | Required script |
|---|---|
| Help / capability discovery | bash "$SKILL_ROOT/scripts/gitops-help.sh" [--json] [--verbose] [--topic <ship|sync|doctor|branch|pr|issue|governance|all>] |
| Start branch (worktree default) or adopt existing | bash "$SKILL_ROOT/scripts/start-branch.sh" <type> [<slug>] [--issue <id>] [--base <branch>] [--stash-name <note>] [--no-worktree] [--existing] [--no-install-hooks] [--no-detached-recovery] [--json] |
| Auto-adopt linked worktree for non-raw feature branch work | bash "$SKILL_ROOT/scripts/ensure-worktree.sh" [--repo <path>] [--branch <name>] [--json] |
| Bootstrap security setup in repo | bash "$SKILL_ROOT/scripts/setup-security.sh" [--repo <path>] [--force] [--no-hooks] [--no-ci] [--json] |
| Install managed pre-commit hook | bash "$SKILL_ROOT/scripts/install-hooks.sh" [--repo <path>] [--force] [--json] |
| Diagnose current repo or related tree state | bash "$SKILL_ROOT/scripts/repo-state.sh" [--repo <path>] [--json] [--no-recurse-related] [--no-fetch] |
| Recover safe sequencer/detached state before continuing work | bash "$SKILL_ROOT/scripts/recover-repo-state.sh" [--repo <path>] [--json] [--no-recurse-related] [--no-detached-recovery] |
| High-level repo/tree doctor report | `bash "$SKILL_ROOT/scripts/doctor.sh" [fix] [--repo ] [--scope current |
| Sensitive-data pre-commit gate | bash "$SKILL_ROOT/scripts/sensitive-scan.sh" [--staged] [--all] [--repo <path>] [--format <fmt>] [--redact] [--no-download] |
| Raw in-place sync of current branch and related repo tree | bash "$SKILL_ROOT/scripts/sync-raw.sh" [--repo <path>] [--json] [--pull-strategy <rebase|merge|ff-only>] [--no-push] [--no-detached-recovery] [--no-recurse-related] [--no-reconcile] |
High-level ship workflow (draft-first by default; raw stays in place; sync is sync-only mode) | `bash "$SKILL_ROOT/scripts/ship.sh" [raw |
| Plan agent-authored Conventional Commit batches | `python3 "$SKILL_ROOT/scripts/batch-commit.py" plan --repo [--scope current |
| Apply agent-authored Conventional Commit batches | `python3 "$SKILL_ROOT/scripts/batch-commit.py" apply --plan [--mode normal |
| Deterministic commit fallback (opt-in only) | `python3 "$SKILL_ROOT/scripts/batch-commit.py" fallback --repo [--scope current |
| Reconcile parent/submodule gitlinks and clean child checkouts | `bash "$SKILL_ROOT/scripts/reconcile-tree.sh" [--repo ] [--json] [--mode check |
| Generate Conventional Commit message with mandatory bullet body | python3 "$SKILL_ROOT/scripts/commit-message.py" --type <type> [--scope <scope>] --subject "<subject>" --bullet "<line>" [--bullet "<line>" ...] [--footer "<line>" ...] [--out <path>] |
| List available PR labels (names + descriptions) | `bash "$SKILL_ROOT/scripts/pr-labels-list.sh" [--repo owner/repo] [--format text |
| Discover remote PR templates | `bash "$SKILL_ROOT/scripts/pr-template-discover.sh" [--repo owner/repo] [--format text |
| Create PR body + PR (draft-first) | bash "$SKILL_ROOT/scripts/pr-create.sh" --title \"<title>\" [--create --force-create] [--ready] [--base <branch>] [--head <branch>] [--repo owner/repo] [label args] [--template-id <path>] |
| Update existing PR body | `bash "$SKILL_ROOT/scripts/pr-update-body.sh" <pr_number> [--repo owner/repo] (--body-file |
| PR hygiene audit | bash "$SKILL_ROOT/scripts/pr-audit.sh" <pr_number> |
| PR readiness audit (CI + review + local/tree state) | `python3 "$SKILL_ROOT/scripts/pr-readiness-report.py" <pr_number> [--repo owner/repo] [--local-repo ] [--scope current |
| Strict PR workflow (metadata + unresolved threads + checks) | bash "$SKILL_ROOT/scripts/pr-workflow.sh" <pr_number> [--repo owner/repo] [--watch-checks] [--full-comments] |
| Add top-level PR comment (newline-safe) | bash "$SKILL_ROOT/scripts/pr-comment.sh" <pr_number> --body "<text>" [--repo owner/repo] |
| Request bot re-review deterministically | bash "$SKILL_ROOT/scripts/pr-request-review.sh" <pr_number> [--repo owner/repo] [--note "<text>"] |
| Mark draft PR ready (strict gates) | bash "$SKILL_ROOT/scripts/pr-mark-ready.sh" <pr_number> [--repo owner/repo] [--watch-checks] |
| List unresolved inline threads | bash "$SKILL_ROOT/scripts/pr-unresolved-threads.sh" <pr_number> [--repo owner/repo] [--fail-on-unresolved] |
| Resolve unresolved inline threads | bash "$SKILL_ROOT/scripts/pr-resolve-threads.sh" <pr_number> [--repo owner/repo] --all [--author <login>] [--dry-run] |
| Resolve specific inline threads | bash "$SKILL_ROOT/scripts/pr-resolve-threads.sh" <pr_number> [--repo owner/repo] --thread-id <id> [--thread-id <id> ...] [--dry-run] |
| Reply to inline review comment | `bash "$SKILL_ROOT/scripts/pr-reply.sh" <pr_number> <comment_id> (--body-file |
| Discover remote issue templates | `bash "$SKILL_ROOT/scripts/issue-template-discover.sh" [--repo owner/repo] [--format text |
| Create issue with deterministic body/template flow | `bash "$SKILL_ROOT/scripts/issue-create.sh" --title "" [--create --force-create] [--repo owner/repo] [--body-file <path> |
| Squash merge a PR (auto-deletes source branch) | bash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> [--repo owner/repo] [--summary \"<desc override>\"] [--body-file <path> | --body-out <path>] [--deterministic] [--admin] [--dry-run] |
| Clean up merged branch or worktree and return to base | bash "$SKILL_ROOT/scripts/finish-work.sh" [--branch <name>] [--base <branch>] [--dry-run] [--no-detached-recovery] [--json] |
| Detect commit signing availability | bash "$SKILL_ROOT/scripts/detect-signing.sh" |
| Receipt generation | python3 "$SKILL_ROOT/scripts/receipt.py" --branch <branch> --base <base> [--pr-url <url>] |
| Governance capability preflight | `bash "$SKILL_ROOT/scripts/gh-scope-check.sh" --repo <owner/repo> [--format text |
| Governance enforcement sequence | bash "$SKILL_ROOT/scripts/governance-enforce.sh" [--policy <path>] --repo owner/repo [--no-write-codeowners] |
Exception protocol:
Script bypass reason: <specific blocker>.Detailed routing notes: references/SCRIPT_ROUTING.md
Default scope heuristics:
repo-state.sh, recover-repo-state.sh, sync-raw.sh, and reconcile-tree.sh inspect the full related tree by default.start-branch.sh, ensure-worktree.sh, agent-authored commit batching, and finish-work.sh stay on the current repo by default unless the user explicitly asks for root/tree/all behavior.When you are asked to “do Git work” in a repo, do this first:
origin/HEAD)gh pr view --json number,title,state,baseRefName,headRefName,url when gh is available and the branch already has a PR; do not infer unsupported gh pr status --json fieldssync raw / raw sync / ship sync / commit and push raw → Raw-mode playbook (I) — ship sync is sync-only; other raw wording emits internal inventory for the agent and then continues through the requested raw stepsDetailed checklists live in:
Recommended repo-context probe order:
git symbolic-ref --short refs/remotes/origin/HEAD
git rev-parse --abbrev-ref HEAD
git status --short
git remote get-url origin
# If GitHub CLI is available and the current branch already has a PR:
gh pr view --json number,title,state,baseRefName,headRefName,url
If gh pr view reports that no pull request exists for the current branch,
continue without PR metadata and move to the relevant playbook.
Minimal deterministic command path (progressive-disclosure entrypoint):
bash "$SKILL_ROOT/scripts/start-branch.sh" feat add-json-output
bash "$SKILL_ROOT/scripts/ensure-worktree.sh" --json
# or stay in current checkout instead of creating a worktree:
# bash "$SKILL_ROOT/scripts/start-branch.sh" feat add-json-output --no-worktree
bash "$SKILL_ROOT/scripts/setup-security.sh"
bash "$SKILL_ROOT/scripts/sensitive-scan.sh" --staged --redact
bash "$SKILL_ROOT/scripts/pr-create.sh" --title "feat(cli): add json output"
# Step 1 (required before --create): inspect labels and templates
bash "$SKILL_ROOT/scripts/pr-labels-list.sh" --repo <owner/repo>
bash "$SKILL_ROOT/scripts/pr-template-discover.sh" --repo <owner/repo>
# edit generated body file if needed, then explicitly create PR
# draft by default; pass --ready for non-draft
# bash "$SKILL_ROOT/scripts/pr-create.sh" --title "feat(cli): add json output" --create --force-create --repo <owner/repo> --label bug --label enhancement
# audit readiness first:
# python3 "$SKILL_ROOT/scripts/pr-readiness-report.py" <pr_number> --repo <owner/repo> --watch-checks --json
# then, only when the report is clear:
# bash "$SKILL_ROOT/scripts/pr-mark-ready.sh" <pr_number> --repo <owner/repo> --watch-checks
# draft merge body for optional edits:
# bash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> --body-out /tmp/squash-body.md --dry-run
# edit /tmp/squash-body.md if desired, then:
bash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> [--body-file /tmp/squash-body.md]
python3 "$SKILL_ROOT/scripts/receipt.py" --branch "$(git rev-parse --abbrev-ref HEAD)" --base origin/main
# after confirming merge landed on main and remote branch is gone:
# bash "$SKILL_ROOT/scripts/finish-work.sh"
Create a correctly named branch from the default branch, without accidentally working on main. Default behavior creates a clean linked worktree at <repo>.worktrees/<type>/<slug> (GitKraken-compatible layout); add --no-worktree to stay in the current checkout instead. For later non-raw work on an existing feature branch, run ensure-worktree.sh so the workflow auto-adopts the linked worktree instead of continuing from the main checkout.
--no-worktree): tracked + untracked changes are stashed with deterministic metadata and restored after branch switch.scripts/start-branch.sh handles both cases automatically.--no-install-hooks to skip).origin exists and auto-recovers safe sequencer/detached state; rescue-grade recovery still stops for review.git checkout <default-branch> && git pullstart-branch.sh resolve from the default branch without switching the current checkout<main-checkout>.worktrees/<type>/<slug> (default), or--no-worktree is passed.--existing.bash "$SKILL_ROOT/scripts/ensure-worktree.sh" --json and continue from the returned path.Recommended helper (handles default-branch detection + naming validation):
scripts/start-branch.sh
"$SKILL_ROOT/scripts/start-branch.sh"Example:
bash "$SKILL_ROOT/scripts/start-branch.sh" feat add-json-output
bash "$SKILL_ROOT/scripts/start-branch.sh" chore --issue 4321 --stash-name "carry-local-wip"
bash "$SKILL_ROOT/scripts/start-branch.sh" feat add-json-output --no-worktree
bash "$SKILL_ROOT/scripts/start-branch.sh" feat add-json-output --existing
Use:
<type>(<scope>): <description>
<bullet-list body>
[optional footer]
git log --oneline -10 and adapt to the project's conventions (see references/CONVENTIONAL_COMMITS.md for body guidelines)python3 "$SKILL_ROOT/scripts/commit-message.py" ... when you need a deterministic commit body skeletonbash "$SKILL_ROOT/scripts/sensitive-scan.sh" --staged --redactSee:
WHEN committing, the agent MAY run detect-signing.sh to diagnose whether signing is available:
bash "$SKILL_ROOT/scripts/detect-signing.sh"WHEN a commit fails because signing is unavailable THEN you SHALL explicitly tell the user that an unsigned retry option exists, what it will do, and that it requires approval before use. WHEN a commit fails because signing is unavailable THEN you SHALL surface the workflow helper text that explains an unsigned retry exists and that the user can be asked whether to enable it.
WHEN the user has explicitly enabled GITOPS_ALLOW_UNSIGNED_COMMIT_RETRY=1 THEN you MAY retry the failed commit once with commit.gpgsign=false.
WHEN signing is not configured (exit code 2) THEN you SHALL commit normally without signing flags.
Recommended long-term fix: configure SSH agent forwarding so signing keys are available on remote hosts. For 1Password SSH agent, add ForwardAgent yes to the remote host in ~/.ssh/config. For GPG, use RemoteForward of the GPG agent socket. See 1Password SSH agent forwarding docs and GnuPG agent forwarding wiki.
gh issue list --search "keyword"Fixes #123 / Closes #123 in the PR body when appropriate--create (deterministic step 1):
bash "$SKILL_ROOT/scripts/pr-labels-list.sh" --repo <owner/repo>bash "$SKILL_ROOT/scripts/pr-template-discover.sh" --repo <owner/repo>\n rendering):
gh pr create --title "<title>" --body-file <file>bash "$SKILL_ROOT/scripts/pr-create.sh" --title "<title>" --create --force-create --repo <owner/repo> --label <label>--ready--label or explicit --no-labels.--template-id <id> before --create.Optional helper:
scripts/pr-create.sh (prefers local checkout PR templates, then remote repository templates, and augments the selected template with generated reviewer context; otherwise renders the skill fallback PR template; PR creation requires explicit --create --force-create, creates draft by default, and requires explicit labels when labels exist)
"$SKILL_ROOT/scripts/pr-create.sh"scripts/pr-labels-list.sh (deterministically list available labels before create)
"$SKILL_ROOT/scripts/pr-labels-list.sh"scripts/pr-template-discover.sh (discover/extract local checkout PR templates first, then remote PR templates when repo context is available; --template-id required for multi-template repos before --create)
"$SKILL_ROOT/scripts/pr-template-discover.sh"scripts/pr-mark-ready.sh (strict deterministic draft->ready transition after checks/threads pass)
"$SKILL_ROOT/scripts/pr-mark-ready.sh"Before pushing any new commits to a PR branch:
gh pr view <number> --commentsbash "$SKILL_ROOT/scripts/pr-unresolved-threads.sh" <number>gh pr checks <number> --watchvalid/relevant or not applicable/invalid.not applicable/invalid, reply with rationale in-thread and resolve the thread when permissions allow.pr-reply.sh normalizes literal \n in --body text into real newlines.--body-file for replies containing complex markdown or shell metacharacters.--, use --body=<text> or --body-file.@codex review then /gemini review (post in top-level PR Conversation comments).@gemini-code-assist <question>.bash "$SKILL_ROOT/scripts/pr-request-review.sh" <pr_number> [--repo owner/repo] [--note "<text>"]\n escapes; use --body-file:
gh pr comment <number> --body-file <file>Guidance for handling automated reviewer feedback:
scripts/pr-workflow.sh (strict deterministic wrapper)
"$SKILL_ROOT/scripts/pr-workflow.sh"scripts/pr-update-body.sh (deterministic existing PR body update helper)
"$SKILL_ROOT/scripts/pr-update-body.sh"scripts/pr-mark-ready.sh (strict deterministic draft->ready transition wrapper)
"$SKILL_ROOT/scripts/pr-mark-ready.sh"Draft-ready lifecycle:
pr-create.sh --create always creates draft PRs unless --ready is set.ship ready or pr-readiness-report.py for a non-mutating readiness audit, then use pr-mark-ready.sh only when the report is clear.bash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> --body-out /tmp/squash-body.md --dry-run<!-- AGENT: --> placeholders in the body file with natural prose describing what changed, new features, bug fixes, and breaking changes. Remove sections that don't apply. The ## Commits and ## Refs sections are already filled deterministically — leave them as-is.bash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> --body-file /tmp/squash-body.md--delete-branch to remove the source branch after successful merge.--deterministic:
bash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> --deterministicbash "$SKILL_ROOT/scripts/pr-merge-squash.sh" <pr_number> --admin--admin (while preserving --delete-branch) to gh pr merge and relaxes approval/check gatespython3 "$SKILL_ROOT/scripts/receipt.py" --branch <branch> --base <default-branch> --pr-url <url>bash "$SKILL_ROOT/scripts/finish-work.sh"Use:
Optional helper (builds a skeleton from git history):
python3 "$SKILL_ROOT/scripts/generate-release-notes.py" --since <tag-or-sha> --version vX.Y.Z
## New Features, ## What's Changed, ## Bug Fixes, ## Breaking Changes)## Commits and ## Refs--include-commits adds per-commit SHA bullets inside ## Commits; the section is emitted regardlessEnforce repository governance as desired-state policy for branch/ruleset protections, required checks, CODEOWNERS, and labels.
assets/config/github-governance-policy.v1.jsonpython3 "$SKILL_ROOT/scripts/repo-governance.py" validate --policy "$SKILL_ROOT/assets/config/github-governance-policy.v1.json"python3 "$SKILL_ROOT/scripts/repo-governance.py" plan --policy "$SKILL_ROOT/assets/config/github-governance-policy.v1.json" --repo <owner/repo>python3 "$SKILL_ROOT/scripts/repo-governance.py" apply --policy "$SKILL_ROOT/assets/config/github-governance-policy.v1.json" --repo <owner/repo> --write-codeownerspython3 "$SKILL_ROOT/scripts/repo-governance.py" audit --policy "$SKILL_ROOT/assets/config/github-governance-policy.v1.json" --repo <owner/repo> --format jsonWrapper helper:
bash "$SKILL_ROOT/scripts/governance-enforce.sh" --policy "$SKILL_ROOT/assets/config/github-governance-policy.v1.json" --repo <owner/repo>bash "$SKILL_ROOT/scripts/required-checks-discover.sh" --repo <owner/repo>bash "$SKILL_ROOT/scripts/labels-export.sh" --repo <owner/repo>python3 "$SKILL_ROOT/scripts/codeowners-lint.py" --path .github/CODEOWNERSOperational details:
bash "$SKILL_ROOT/scripts/issue-template-discover.sh" --repo <owner/repo>--body-file <path> if pre-authored--body "<text>" for inline deterministic contentbash "$SKILL_ROOT/scripts/issue-create.sh" --title "<title>" --create --force-create --repo <owner/repo>--template-id <path> before --createHelper references:
scripts/issue-template-discover.sh
"$SKILL_ROOT/scripts/issue-template-discover.sh"scripts/issue-create.sh
"$SKILL_ROOT/scripts/issue-create.sh"assets/templates/issue-body.mdRun explicit raw in-place work on the current branch without creating branches or worktrees. Sync-only raw flows stop after raw sync; raw commit/push flows continue through the requested commit and push steps.
This playbook handles explicit raw in-place flows. "ship sync" is the sync-only ship.sh mode and stops after the raw sync step. Other raw wording such as "sync raw", "raw sync", "commit and push raw", "push raw", "raw push", or "ship raw" syncs in place first, then emits internal inventory so the agent can decide commit groupings and messages before continuing the same raw flow. Use deterministic fallback only when the user explicitly approves it.
WHEN the user says "ship sync" THEN you SHALL run bash "$SKILL_ROOT/scripts/ship.sh" sync ... and SHALL NOT continue into commit, push, or PR steps after the raw sync stage.
WHEN the user includes "raw" in a sync/commit/push request THEN you SHALL use this playbook.
WHEN the user says "commit and push" without "raw" THEN you SHALL follow the normal flow:
bash "$SKILL_ROOT/scripts/sync-raw.sh" and keep every repo on its current branch.ship.sh mode and stop after this step.ship.sh raw --json emit the inventory, then write the commit plan yourself, apply it with batch-commit.py apply, and continue the same raw flow without asking the user again unless consent or tree-scope choice is required.--no-recurse-related to stay on the current repo only.origin exists and auto-recovers safe sequencer/detached state; rescue-grade recovery still stops for review.bash "$SKILL_ROOT/scripts/sensitive-scan.sh" --staged --redactbash "$SKILL_ROOT/scripts/detect-signing.sh"unsigned_retry_available THEN you SHALL explicitly tell the user that an unsigned retry option exists, what it will do, and that it requires approval before use.unsigned_retry_available THEN you SHALL surface the helper text and ask the user before enabling the unsigned retry path.git push
manual_bypass_* helper fields THEN you SHALL explicitly tell the user that a bypass option exists, what it will do, and that it requires approval before use.manual_bypass_* helper fields for a one-off HTTPS --no-verify publish path; ask before using it.python3 "$SKILL_ROOT/scripts/receipt.py" --branch "$(git rev-parse --abbrev-ref HEAD)" --base <default-branch>WHEN raw mode is active THEN you SHALL NOT create branches, worktrees, or PRs.
WHEN raw mode continues into commit/push steps THEN you SHALL still follow Conventional Commits, the sensitive-data gate, and receipts.
High-level shortcuts:
ship syncs the current scope, batches commits in a linked worktree when needed, pushes, and stops at a draft PR by default.ship ready audits the current branch PR readiness only; it does not create a PR or mark one ready.ship raw keeps work on the current branch, syncs in place, emits inventory for the agent, and the agent writes the actual Conventional Commit batches and messages before resuming the same raw flow.ship sync is the sync-only ship.sh mode; it stops after the in-place raw sync path.doctor reports repo and related-tree health.doctor fix applies safe recovery and sync, then reports remaining reconciliation work without creating commits, pushes, or PRs.This skill includes ready-to-copy templates:
assets/github/workflows/pr-title-lint.ymlassets/github/workflows/commitlint.ymlassets/github/workflows/sensitive-scan.ymlassets/github/workflows/release-please.ymlSee:
Template resolution policy for PR creation:
.github/, repo root, and docs/ (both pull_request_template.md and PULL_REQUEST_TEMPLATE.md) and multi-template directories in .github/PULL_REQUEST_TEMPLATE/, PULL_REQUEST_TEMPLATE/, and docs/PULL_REQUEST_TEMPLATE/.pr-create.sh --create requires explicit --template-id.After any push/merge operation, include a receipt like:
- **branch `<branch-name>`**
- `<SHA>` `<type>[(<scope>)]:` _<description>_
- `<SHA>` `<type>[(<scope>)]:` _<description>_
Helper:
python3 "$SKILL_ROOT/scripts/receipt.py"Details:
npx claudepluginhub devguyrash/agent-tooling --plugin gitops-workflowGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.