skills/rig/SKILL.md
Idempotently bootstrap any repository with standard development tools, hooks, and workflows. Use when starting work on a new repo, onboarding to an existing project, or ensuring a repo has proper CI/CD setup. Configures: git hooks (lefthook), commit message templates, PR templates, and GitHub Actions for lint/format/type-check/build. Prompts for user confirmation before changes. Triggers: "bootstrap repo", "setup hooks", "configure CI", "rig", "standardize repo".
npx skillsauth add slamb2k/mad-skills rigInstall 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.
When this skill is invoked, IMMEDIATELY output the banner below before doing anything else. Pick ONE tagline at random — vary your choice each time. CRITICAL: Reproduce the banner EXACTLY character-for-character. The first line of the art has 4 leading spaces — you MUST preserve them.
{tagline}
⠀ ██╗██████╗ ██╗ ██████╗
██╔╝██╔══██╗██║██╔════╝
██╔╝ ██████╔╝██║██║ ███╗
██╔╝ ██╔══██╗██║██║ ██║
██╔╝ ██║ ██║██║╚██████╔╝
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝
Taglines:
After the banner, display parsed input:
┌─ Input ────────────────────────────────────────
│ {Field}: {value}
│ Flags: {parsed flags or "none"}
└────────────────────────────────────────────────
Pre-flight results:
── Pre-flight ───────────────────────────────────
✅ {dep} {version or "found"}
⚠️ {dep} not found → {fallback detail}
❌ {dep} missing → stopping
──────────────────────────────────────────────────
Stage/phase headers: ━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
Idempotently bootstrap repositories with standard development infrastructure.
Prompts and report schemas are in references/. Configuration procedures are
in references/configuration-steps.md.
Key principle: Prompt user before making changes. Report findings first, get approval, then act.
Detect the hosting platform before pre-flight so dependency checks are platform-specific:
REMOTE_URL=$(git remote get-url origin 2>/dev/null)
if echo "$REMOTE_URL" | grep -qiE 'dev\.azure\.com|visualstudio\.com'; then
PLATFORM="azdo"
elif echo "$REMOTE_URL" | grep -qi 'github\.com'; then
PLATFORM="github"
else
PLATFORM="github" # default fallback
fi
Pass {PLATFORM} into all phase prompts. Each phase uses the appropriate
CLI tool: gh for GitHub, az repos/az pipelines for Azure DevOps.
Before starting, check all dependencies in this table. The table contains all dependencies — some are platform-conditional (see notes after table).
| Dependency | Type | Check | Required | Resolution | Detail |
|-----------|------|-------|----------|------------|--------|
| git | cli | git --version | yes | stop | Install from https://git-scm.com |
| sync | skill | ls .claude/skills/sync/SKILL.md ~/.claude/skills/sync/SKILL.md ~/.claude/plugins/marketplaces/slamb2k/skills/sync/SKILL.md 2>/dev/null | no | fallback | Repo sync; falls back to manual git pull |
| lefthook | npm | npx lefthook --help | yes | install | npm install -g lefthook |
| gh | cli | gh --version | yes | url | https://cli.github.com |
| az devops | cli | az devops -h 2>/dev/null | no | fallback | Falls back to REST API with PAT; see AzDO tooling below |
Platform-conditional rules:
gh: Only required when PLATFORM == github. Skip for AzDO repos.az devops: Only checked when PLATFORM == azdo. Skip for GitHub repos.For each applicable row, in order:
{PLATFORM}When PLATFORM == azdo, determine which tooling is available. Set AZDO_MODE
for use in all subsequent phases:
if az devops -h &>/dev/null; then
AZDO_MODE="cli"
else
AZDO_MODE="rest"
fi
cli: Use az repos / az pipelines commands (preferred)rest: Use Azure DevOps REST API via curl. Requires a PAT (personal
access token) in AZURE_DEVOPS_EXT_PAT or AZDO_PAT env var. If no PAT
is found, prompt the user to either install the CLI or set the env var.Report in pre-flight:
az devops cli — version foundaz devops cli — not found → using REST API fallbackaz devops cli — not found, no PAT configured → halt with setup instructionsWhen PLATFORM == azdo, extract organization and project from the remote URL
and validate they are usable. These values are needed by every az repos /
az pipelines command and every REST API call.
# Extract org and project from remote URL patterns:
# https://dev.azure.com/{ORG}/{PROJECT}/_git/{REPO}
# https://{ORG}@dev.azure.com/{ORG}/{PROJECT}/_git/{REPO}
# {ORG}@vs-ssh.visualstudio.com:v3/{ORG}/{PROJECT}/{REPO}
REMOTE_URL=$(git remote get-url origin 2>/dev/null)
if echo "$REMOTE_URL" | grep -q 'dev\.azure\.com'; then
AZDO_ORG=$(echo "$REMOTE_URL" | sed -n 's|.*dev\.azure\.com/\([^/]*\)/.*|\1|p')
AZDO_PROJECT=$(echo "$REMOTE_URL" | sed -n 's|.*dev\.azure\.com/[^/]*/\([^/]*\)/.*|\1|p')
AZDO_ORG_URL="https://dev.azure.com/$AZDO_ORG"
elif echo "$REMOTE_URL" | grep -q 'vs-ssh\.visualstudio\.com'; then
AZDO_ORG=$(echo "$REMOTE_URL" | sed -n 's|.*vs-ssh\.visualstudio\.com:v3/\([^/]*\)/.*|\1|p')
AZDO_PROJECT=$(echo "$REMOTE_URL" | sed -n 's|.*vs-ssh\.visualstudio\.com:v3/[^/]*/\([^/]*\)/.*|\1|p')
AZDO_ORG_URL="https://dev.azure.com/$AZDO_ORG"
elif echo "$REMOTE_URL" | grep -q 'visualstudio\.com'; then
AZDO_ORG=$(echo "$REMOTE_URL" | sed -n 's|.*//\([^.]*\)\.visualstudio\.com.*|\1|p')
AZDO_PROJECT=$(echo "$REMOTE_URL" | sed -n 's|.*/\([^/]*\)/_git/.*|\1|p')
AZDO_ORG_URL="https://${AZDO_ORG}.visualstudio.com"
fi
# URL-decode for CLI/display; keep URL-safe versions for REST API paths
AZDO_PROJECT_URL_SAFE="$AZDO_PROJECT"
AZDO_ORG=$(python3 -c "import urllib.parse; print(urllib.parse.unquote('$AZDO_ORG'))")
AZDO_PROJECT=$(python3 -c "import urllib.parse; print(urllib.parse.unquote('$AZDO_PROJECT_URL_SAFE'))")
if [ -z "$AZDO_ORG" ] || [ -z "$AZDO_PROJECT" ]; then
echo "❌ Could not extract organization/project from remote URL"
echo " Remote: $REMOTE_URL"
echo ""
echo "Ensure the remote URL follows one of these formats:"
echo " https://dev.azure.com/{ORG}/{PROJECT}/_git/{REPO}"
echo " https://{ORG}.visualstudio.com/{PROJECT}/_git/{REPO}"
echo " {ORG}@vs-ssh.visualstudio.com:v3/{ORG}/{PROJECT}/{REPO}"
# HALT — cannot proceed without org/project context
fi
When AZDO_MODE == cli, also configure the defaults so commands work correctly:
az devops configure --defaults organization="$AZDO_ORG_URL" project="$AZDO_PROJECT"
When AZDO_MODE == rest, store these for API calls:
$AZDO_ORG_URL/$AZDO_PROJECT_URL_SAFE/_apisAuthorization: Basic $(printf ":%s" "$PAT" | base64 | tr -d '\n')Report in pre-flight:
azdo context — org: {AZDO_ORG}, project: {AZDO_PROJECT}azdo context — could not parse from remote URL → halt with instructionsPass {AZDO_MODE}, {AZDO_ORG}, {AZDO_PROJECT}, {AZDO_ORG_URL} into
all phase prompts alongside {PLATFORM}.
Invoke /sync to ensure the working tree is up to date with origin/main before
bootstrapping. If /sync is unavailable, run git pull manually. This prevents
rigging against stale repo state.
Launch Bash subagent (haiku — simple checks):
Task(
subagent_type: "Bash",
model: "haiku",
description: "Check system requirements",
prompt: <read from references/phase-prompts.md#phase-1>
)
Parse SYSTEM_REPORT. If any requirement fails, use AskUserQuestion:
Options for missing git config:
Stop if user chooses manual. Configure if values provided.
Launch Bash subagent (haiku):
Task(
subagent_type: "Bash",
model: "haiku",
description: "Analyze repository",
prompt: <read from references/phase-prompts.md#phase-2>
)
Parse REPO_REPORT.
Present analysis to user with AskUserQuestion:
Repository Analysis Complete
Current State:
Git initialized: {status}
Branch: {branch}
Lefthook: {status}
Commit template: {status}
PR template: {status}
CI workflow: {status}
{if azdo and unregistered_pipelines:}
Azure Pipelines: {N} YAML file(s) found, {M} not yet registered
Detected Stack:
Type: {project_type}
Components: {detected_components}
Available scripts: {available_scripts}
Proposed Changes:
{numbered list of what will be added/configured}
{if azdo and unregistered_pipelines: "Register Azure Pipelines: {list of YAML paths}"}
Options:
If "Let me choose", present individual options as multi-select.
For each approved item, follow the procedures in
references/configuration-steps.md.
If the project has an existing CLAUDE.md:
## Branch Discipline already exists:
grep -q "## Branch Discipline" CLAUDE.md
## Guardrails:
## Guardrails## Guardrails section exists, append at the end of the fileThe Branch Discipline content to inject is the ## Branch Discipline section
from skills/brace/references/claude-md-template.md. Read that file to get
the exact content — this avoids duplication and ensures both /brace and /rig
inject identical text.
Launch Bash subagent (haiku):
Task(
subagent_type: "Bash",
model: "haiku",
description: "Verify configuration",
prompt: <read from references/phase-prompts.md#phase-5>
)
Parse VERIFY_REPORT.
Present summary using the template in references/report-template.md.
If any step fails:
Common issues:
testing
Run the full OMC idea-to-merged-PR pipeline — cancel + deep-interview + ralplan + autopilot + mad-skills:ship — in a single invocation. Explicit-only; this skill never auto-activates. Only run when the user literally types /launch. Do not invoke on phrases like "launch this", "ship it", "full pipeline", or similar — none of those should trigger this skill.
testing
Ship changes through the full PR lifecycle. Use after completing feature work to commit, push, create PR, wait for checks, and merge. Handles the entire workflow: syncs with main, creates feature branch if needed, groups commits logically with semantic messages, creates detailed PR, monitors CI, fixes issues, squash merges, and cleans up. Invoke when work is ready to ship.
development
Generate container-based release pipelines that build once and promote immutable artifacts through environments (dev → staging → prod). Detects your stack, interviews for infrastructure choices, then outputs deterministic CI/CD files (Dockerfile, workflows, deployment manifests) that run without an LLM. Use when setting up deployment pipelines, containerizing an app, creating release workflows, or connecting CI to container-friendly infrastructure (Azure Container Apps, AWS Fargate, Google Cloud Run, Kubernetes, Dokku, Coolify, CapRover, etc.).
development
Initialize any project directory with a standard scaffold for AI-assisted development. Creates specs/ and context/ directories, a project CLAUDE.md with development workflow and guardrails, .gitignore, and branch protection. Recommends claude-mem for persistent memory. Idempotent — safe to run on existing projects. Triggers: "init project", "setup brace", "brace", "initialize", "bootstrap", "scaffold".