$npx -y skills add maddhruv/absolute --skill absolute-initOne-time setup for absolute: interview how you want it to behave (output style, autonomy, TDD strictness, spec dir, families) + detect the stack once, then write .absolute.config.json (project, committed) and ~/.absolute/config.json (user defaults + per-project overrides). Ev
| 1 | > "set up / initialize / configure absolute"). |
| 2 | > Start your first response with the ⚙️ emoji. |
| 3 | |
| 4 | ## Absolute Init |
| 5 | |
| 6 | One-time setup. Detect the project's real conventions, ask a few questions about how you |
| 7 | want absolute to behave, then write that to JSON config the other ten commands read on |
| 8 | every run. Result: commands stop re-detecting your stack from scratch and respect your |
| 9 | preferences (output style, gating, TDD strictness) without being told each time. |
| 10 | |
| 11 | This is the only command that writes config. It is non-destructive: an existing config is |
| 12 | shown and updated, never blindly overwritten. It never commits. |
| 13 | |
| 14 | --- |
| 15 | |
| 16 | ## When to use |
| 17 | |
| 18 | - First time using absolute in a repo — gives every command cached conventions + your preferences. |
| 19 | - Conventions changed (new package manager, new test/lint scripts, branch rename) — re-run to refresh. |
| 20 | - You want to change how absolute behaves globally (output style, autonomy) across projects. |
| 21 | |
| 22 | Other commands run fine without init — they fall back to on-the-fly detection and emit a |
| 23 | one-line suggestion to run it. init just makes them faster and tailored. |
| 24 | |
| 25 | --- |
| 26 | |
| 27 | ## Key principles |
| 28 | |
| 29 | 1. **Codebase before questions.** Detect everything detectable first. Only ask what the repo can't tell you (preferences, ambiguous choices). |
| 30 | 2. **A few questions, not a grill.** ~4-6 max, one at a time. This is setup, not design review. |
| 31 | 3. **Non-destructive.** Existing config → show it, confirm each change, merge — don't clobber. |
| 32 | 4. **Never auto-commit.** Write the project file; tell the user to commit it. (Commit policy itself is not configurable — absolute never commits.) |
| 33 | 5. **Two levels, project wins.** Project config is team-shared and authoritative; global is your personal default + per-project overrides. |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## Step 1 — DETECT |
| 38 | |
| 39 | Auto-detect the stack using the **Codebase Convention Detection** table in |
| 40 | `references/work.md` (package manager, language/runtime, test runner, linter/formatter, |
| 41 | build, CI, available scripts). Resolve each to the project's **own script** form |
| 42 | (`npm test`, `make lint`) so cached commands match CI — not raw tools. |
| 43 | |
| 44 | Read the actual `package.json` `scripts` / `Makefile` targets to fill `test`, `lint`, |
| 45 | `typecheck`, `format`, `build`. Detect the default branch with `git symbolic-ref --short refs/remotes/origin/HEAD` |
| 46 | (fallback `main`). Anything you can't resolve confidently → leave it out and ask, or omit. |
| 47 | |
| 48 | Also detect, from deps and marker files (omit the whole block if nothing is found): |
| 49 | |
| 50 | - **`conventions.format`** — formatter script: `package.json` `format`/`fmt` scripts, a |
| 51 | `Makefile` `format` target, `ruff format`, or `gofmt`. |
| 52 | - **`conventions.ui`** — from `package.json` deps: `framework` (react/vue/svelte/none), |
| 53 | `styling` (tailwindcss → tailwind; css-modules; styled-components; else vanilla), |
| 54 | `iconLibrary` (lucide-react, @heroicons/*, @phosphor-icons/*, react-icons…), |
| 55 | `componentLib` (shadcn marker / @mui/material → mui / @chakra-ui → chakra / none), and |
| 56 | `tokensPath` (a tokens/theme CSS or TS file if one exists). Omit if the repo has no UI deps. |
| 57 | - **`conventions.docs`** — `stack` + `dir` via `absolute-docs`'s Stack Detection marker-file |
| 58 | table (`source.config.ts`/fumadocs, `docusaurus.config.*`, Starlight, `mkdocs.yml`, |
| 59 | `.vitepress/`, Mintlify, else markdown). Omit if no docs are present. |
| 60 | |
| 61 | ## Step 2 — RESOLVE existing config |
| 62 | |
| 63 | Before asking anything, check for existing config (precedence below). If found, print a |
| 64 | compact summary of current values and ask whether to **update** (default) or start fresh. |
| 65 | Treat existing values as the defaults for the interview so the user can keep them with one keystroke. |
| 66 | |
| 67 | ## Step 3 — INTERVIEW |
| 68 | |
| 69 | Use `AskUserQuestion` for every preference question. Present options as structured choices with descriptions; mark the recommended/default option first with "(Recommended)" in its label. Ask questions one at a time — wait for each answer before advancing. |
| 70 | |
| 71 | Questions (skip any the existing config already answers, unless user asked to reconfigure): |
| 72 | |
| 73 | **Q1 — Output style** |
| 74 | ``` |
| 75 | question: "Output style?" |
| 76 | header: "Output style" |
| 77 | options: |
| 78 | - label: "normal (Recommended)" |
| 79 | description: "Full prose, |