stack-setuplisted
Install: claude install-skill Roxabi/roxabi-plugins
# Stack Setup Wizard
Auto-discover project config → confirm → write `.claude/stack.yml`. Safe to re-run.
Let: σ := `.claude/stack.yml` | π := proposed config table
## Phase 0 — Idempotency
`test -f .claude/stack.yml && echo exists || echo missing`
σ ∃ ∧ `--force` ∉ `$ARGUMENTS` → → DP(A) **Re-configure** | **Skip**
→ Skip: "Keeping existing σ. Run with `--force` to reconfigure."
σ ∄ → `mkdir -p .claude`
## Phase 1 — Check /init prerequisite
`test -f .claude/dev-core.yml && grep -q 'gh_project_id' .claude/dev-core.yml && echo done || (test -f .env && grep -q 'GH_PROJECT_ID' .env && echo done || echo missing)`
`missing` → → DP(A) **Continue anyway** | **Abort (run /init first)**
## Phase 2 — Auto-discover
Run all detection; derive π:
```bash
# Runtime & package manager
echo "--- RUNTIME ---"
if [ -f pyproject.toml ]; then
grep -q '\[tool\.uv\]' pyproject.toml && echo "runtime=python pm=uv" || echo "runtime=python pm=pip"
elif [ -f bun.lockb ]; then echo "runtime=bun pm=bun"
elif [ -f pnpm-lock.yaml ]; then echo "runtime=node pm=pnpm"
elif [ -f yarn.lock ]; then echo "runtime=node pm=yarn"
elif [ -f package.json ]; then echo "runtime=node pm=npm"
else echo "runtime=unknown pm=unknown"
fi
# Source / backend path
echo "--- SOURCE PATH ---"
grep -oP '(?<=packages = \[")[^"]+' pyproject.toml 2>/dev/null | head -1 \
|| (test -d src && echo "src") \
|| (test -d apps/api && echo "apps/api") \
|| echo ""
# Backend framework
echo "--- BACKEND FRAMEWORK ---"
grep -iE