repo-setup
First-time setup for an existing repo, single or --batch.
SKILL.mdskills/repo-setup/SKILL.md
GitHubRepo Setup
When to Use
- Starting work in a new project repository for the first time
/update-docsreportstracker_missing— the project lacks coordination infrastructure- Creating a NEW repo from scratch? →
coordinator:new-project(scaffolds a stack, delegates onboarding back here).
The engine repo is a hard prerequisite — resolved via CLAUDE_KLABAUTER_ROOT / the machine-local
repos.claude_klabauter registry entry — and must already resolve before this skill's own fences
will run.
Setup is sufficient — downstream skills add-to, never create-from-scratch. This skill produces minimum-viable versions of the coordinator artifacts (state/orientation_cache.md, docs/README.md, CLAUDE.md) — the skeleton. Downstream skills (/update-docs, /workstream-start) add to them in the same format and self-gate against fresh substrate (wiki: produce-not-prescribe).
Lanes
Every invocation fires exactly one of three lanes — new-project, add-existing-project,
add-repo — each a pre-answered round-trip set: lanes/CONTRACT.md for the shape,
lanes/<lane>.yaml for the canonical values, residue/<lane>.md for the rationale a human
reading the flow wants.
The lane is an input, not a decision: the op parameter (or the caller's own answer to
p1.repo-classification-ask) names it. --batch is an entry-point mode, not a fourth lane — it
drives the add-existing-project lane's answers per repo (residue/batch-mode.md).
Flag contract
- Default (no flag) — single-repo,
new-projectoradd-existing-projectlane. Runs from inside one repo's cwd. --root <path>(alias--target <path>) — single-repo only, optional. Onboards a sibling repo by path without cd-ing into it; defaults to$(pwd). Orthogonal to--batch(which loops the fleet); names exactly one repo. Resolution: § Procedure.--batch— fleet non-interactive. Seeresidue/batch-mode.md.--non-interactive(single repo, valid without--batch). Asks nothing: every judgment point takes the firing lane'slanes/<lane>.yamlvalue, and the unattended-halt set (§ Procedure step 4) returns unresolved to the caller. The name comes fromcoordinator.local.mdor the directory name, the type from detection.--answers <file.json | inline-json>(single repo). A JSON object keyed by lanestep_id(p2.ask-project-name,p2.ask-project-type,p2.ask-workstreams, ...) overriding that step's lane value; every unlisted step takes its lane value. Implies--non-interactive; an unknown key fails loud, naming it.--check-onlyis batch-mode-only. Passed to the default single-repo mode (without--batch), the skill exits with the one-line remediation:"--check-only is only valid with --batch; for a single repo use --non-interactive or --answers."
Optional coordinator.local.md key: ceremony_day_anchor
ceremony_day_anchor: local|utc is a flat frontmatter key in coordinator.local.md: absent or local anchors the ceremony day on local date, utc on the UTC date. Repo-setup does not seed it; add it by hand only for a repo that wants utc.
Prerequisites
- You are in the project's working directory (not
~/.claude), or pass--root/--target(§ Flag contract). - The firing lane's pre-answered values (
lanes/<lane>.yaml) or, foradd-repo, an already-decided classification.
Procedure
1. Resolve $_TARGET_ROOT (run before everything else). (shape per ${CLAUDE_PLUGIN_ROOT}/snippets/resolve-coordinator-bin.md; PowerShell shown) & "$env:COORDINATOR_SETTINGS_HOME\bin\repo-setup-args-and-register.exe" resolve-target-root. It validates the resolved path is an existing directory inside a git repo, printing the absolute path to stdout on success or a fail-loud ERROR: ... line on stderr with exit 1 on failure — mirror that idiom, never silently fall back to cwd. When an explicit --root/--target was passed, change the shell's working directory to $_TARGET_ROOT as the first action, so every downstream cwd-relative step targets the sibling repo. Absent, $_TARGET_ROOT resolves to $(pwd).
2. Load the firing lane's directives. Read lanes/<lane>.yaml in full: round_trip_directives[] supplies every value the procedure would otherwise prompt for, terminal_offer_defaults[] the default for every terminal offer, second_phase_deferred[] the steps left unresolved for a later phase. Load once, apply throughout.
3. Run the lane-independent mechanical procedure. Read residue/mechanics.md and execute it in full (detection, rendering/scaffolding, substrate seeds, optional tripwire installs, Phase 4 report). Substitute the loaded lane's directive/default values at every judgment point; take no value from a prompt.
4. UNATTENDED-HALT SET. p3j.1-test-cmd-detect, p3m.verify-reachability, tw.windows-console-verify-run, batch.hook-respect are never pre-answered by any lane (lanes/CONTRACT.md) — return them unresolved to the calling agent/PM exactly as mechanics.md's own procedure surfaces them.
5. Roster. Report the firing lane's roster_slots[] verbatim in the Phase 4 output. Materializing the roster into batons is a later skill/ceremony's job.
5a. Posture overlay. Read engagement_posture from ${CLAUDE_HOME:-$HOME}/.claude/coordinator-identity.yaml; when set, run render-posture-overlay <posture> "$_TARGET_ROOT/.claude/em-context.md" (the same call as commands/install.md's engagement-posture step, including its .gitignore check). Absent, skip silently. The op swaps in place, so re-running on a repo that already carries an overlay is safe.
6. Sentinel — signal that setup just ran. As the final action, write a session-scoped sentinel so /workstream-start (if invoked in this same session) prints its one-line setup notice and then runs orientation once: create state/ if absent, then touch state/.repo-setup-just-ran. It is single-shot (Preflight consumes it) and MUST be gitignored (residue/mechanics.md).
Optional Tripwire Installs
Install steps are mechanical and lane-independent — see residue/mechanics.md § Optional tripwire
installs — mechanical half. Whether an offer fires is a value the firing lane's
terminal_offer_defaults[] already carries (tw.windows-console-offer); this skill
does not decide it inline. A Perforce workspace registers per contract/p4-provider-fragment.md § Registration.
Notes
- Embedding-class check. Where this flow touches project-rag indexing setup, ask: "does this
corpus need
text-class embedding?" — project-rag otherwise defaults prose corpora to a code-embedding model. - Any onboarding bug fix needs all three layers to not recur: prevention (fix the install script), reactive repair (
doctor-style recovery for users who already hit it), searchable docs (a troubleshooting row keyed on the literal error text). - Peer-repo
file:linecitations land in thestate/workstreams/<id>.yamlentry'sspecs[]ordeliverables[].text, never instate/orientation_cache.md(name-only, capped at 10 entries;coordinator/docs/wiki/skills-corpus/tiered-context-loading.md:57).