name: aid-config description: > View or update AID pipeline settings. Bare invocation shows all values in a table; first run auto-creates .aid/settings.yml from the template. Pass a key (e.g., /aid-config name) to view + update one setting interactively. allowed-tools: Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion argument-hint: "(none) view all | <key> view+update one (e.g., name, minimum_grade)"
AID Project Configuration
/aid-config reads and writes .aid/settings.yml — the single source of truth
for AID pipeline settings (grades, heartbeat, project identity).
Two modes, nothing else.
| Invocation | What it does |
|---|---|
| /aid-config | Show all settings as a table. On first run (no settings.yml), copy the template into place first, then show. |
| /aid-config <key> | Show the current value of <key>; prompt for new (with suggestions + always a free-form option); validate; write in place. |
Examples: /aid-config name, /aid-config minimum_grade,
/aid-config source_control.
Pre-flight
- ✅
DefaultorAuto-accept edits→ proceed - ❌
Plan mode→ STOP. This skill writes files.
Mode 1 — Show all settings (/aid-config)
Step 1: Ensure .aid/settings.yml exists
If .aid/settings.yml is missing:
- Create
.aid/directory if absent (do NOT touch.aid/knowledge/or other subdirs). - Copy
canonical/aid/templates/settings.yml→.aid/settings.ymlverbatim. - Print:
Created .aid/settings.yml from template.
Step 2: Render the table
Read .aid/settings.yml. Print a table with these columns:
Key | Value
Order: name, description, type, source_control, minimum_grade, heartbeat_interval.
If any value matches a <placeholder> pattern (e.g., <project-name>), append ⚠ unset after the value.
Step 3: Suggest commands for unset values + the general update form
After the table, ALWAYS print the line:
Run /aid-config <key> to update any value.
If ANY rows were marked ⚠ unset, ALSO emit a copy-pasteable command per unset row, so the user can act without having to assemble the key themselves:
N values unset. To set them:
/aid-config name
/aid-config description
Exit. No prompt; no further interaction.
Mode 2 — View/update one key (/aid-config <key>)
Step 1: Validate the key argument
Accepted keys:
namedescriptiontypesource_controlminimum_gradeheartbeat_interval
If the key doesn't match: print ❌ Unknown key: <key> + the accepted list + exit.
Step 2: Ensure .aid/settings.yml exists
Same as Mode 1 Step 1.
Step 3: Read current value
Run:
bash canonical/aid/scripts/config/read-setting.sh --path <key> --default '(unset)'
Print: Current value of <key>: <value>.
Step 4: Prompt for new value
Use AskUserQuestion for ALL keys with:
- A
Keep current valueoption (description: shows the current value) - 2–3 suggestion options from the Suggestions table below
Each option has only label + description. Do NOT use the preview field — the preview field switches the UI to a side-by-side layout that suppresses the auto-injected Other free-text input. With description only, the standard layout shows the Other field automatically and the user can always type a custom value.
Do NOT add an explicit Other option in the options list — the tool injects it automatically (and only renders it correctly when no option carries a preview).
For free-text-natural keys (name, description), the Suggestions table says (no defaults) — render the question with just Keep current value + the auto-injected Other field; the user types their value into Other.
Question text format (keep brief, mention free-text via Other if the user might want it):
New value for <key>? (pick a suggestion or type your own via 'Other')
Step 5: Validate
Per the Validation table below. If invalid: print the validation error + re-prompt (loop back to Step 4).
Step 6: Save in place
Read .aid/settings.yml into memory. settings.yml is a flat file — every user-editable
key is a top-level scalar (<key>: <value>), no section nesting. Replace the top-level line
for <key> if one is present; otherwise append a new top-level <key>: <value> line at the
end of the file. Preserve all other lines and inline comments exactly as they are. Use a
same-directory temp file + mv -f for crash-safety (POSIX atomic rename), but no lock-dir
mutex — aid-config is interactive single-user; concurrent writes are not a real failure mode.
Step 7: Confirm
Print: ✓ <key>: <old> → <new> and exit.
Validation table
| Key | Valid values |
|---|---|
| name | Non-empty string, no whitespace |
| description | Non-empty single-line string (NO newlines — settings.yml uses inline YAML scalars) |
| type | brownfield or greenfield |
| source_control | none, git, svn, or mercurial |
| minimum_grade | Regex ^[A-F][+-]?$. E-grades are accepted but rarely useful as a floor. |
| heartbeat_interval | Positive integer (minutes). 0 disables heartbeat. |
Internal keys (producer-written — NOT user-configurable)
/aid-config deliberately does not expose these — they are absent from Accepted keys
(Mode 2 Step 1) and from the Validation table above. They are written and maintained
by pipeline producers, never by the user. Running /aid-config knowledge (or any
knowledge.* sub-path) is rejected as an unknown key (❌ Unknown key) — that is the
intended behavior, not a gap.
| Key | Owner / contract |
|---|---|
| knowledge | Nested block {source: <default-branch>, last_update: <ISO-8601 commit date>, doc_set: [...], term_exclusions: [...]}. knowledge.source (the branch compared for KB freshness) and knowledge.last_update are written by aid-discover (on KB approval, FR35) and aid-housekeep (re-stamp on KB-DELTA refresh, FR36); read by the dashboard reader for outdated-detection (feature-007 FF-A2). knowledge.doc_set and knowledge.term_exclusions are runtime-written by aid-discover. Absence-tolerant — a missing knowledge block means "no baseline recorded" and the reader stays approved. Producer write-path (R13): the first write is a multi-line nested block (source: + last_update: + doc_set: + term_exclusions:) via the append-block idiom; a later last_update re-stamp is a single-line replace of that nested line. |
Suggestions table (for Mode 2 AskUserQuestion)
| Key | Suggestions |
|---|---|
| name | (no defaults — user types their own) |
| description | (no defaults — user types their own) |
| type | brownfield, greenfield |
| source_control | none, git, svn, mercurial |
| minimum_grade | A+, A, B+ |
| heartbeat_interval | 0 (disabled), 1, 5 |
Always include a Keep current value option and let AskUserQuestion's built-in Other field handle free-form input.
How consumer skills read settings
Consumer skills (/aid-discover, /aid-execute, etc.) resolve minimum_grade using this order:
minimum_gradein.aid/settings.yml— use if present- Hardcoded skill default — use only if
.aid/settings.ymlis missing entirely, or the key is unset
The canonical resolution helper is canonical/aid/scripts/config/read-setting.sh. Consumer skills invoke:
bash canonical/aid/scripts/config/read-setting.sh --key minimum_grade --default A
Schema reference
Canonical schema: canonical/aid/templates/settings.yml. Flat top-level scalar keys
(name, description, type, source_control, minimum_grade, heartbeat_interval) as
described in the tables above. The knowledge: block is producer-written — see
Internal keys above, not user-configurable via this skill.
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.