The bundled skills ship with sensible defaults — base branch main, ask before running the app,
evidence only on failures. Every real project disagrees with some of them, and the obvious move is to
edit the skill. Don't: npx sluglist init never overwrites a skill you have edited, so an edited
skill stops receiving upstream improvements. That is the right safety rule and the wrong place to put
project knowledge.
So project specifics go in one committed file that every skill reads first:
.sluglist/PROJECT.mdnpx sluglist init writes the template; you fill it in and commit it. It is never overwritten —
not on re-runs, not with --force — because it holds your answers, not ours.
What goes in it
| Section | Answers | Skill default if you leave it |
|---|---|---|
| Base branch | the branch a branch-intent checklist diffs against |
main, then master |
| Running the app for QA | the command, the URL, warm-up quirks | ask the user; never test a build it didn't start |
| Signing in | where the test account comes from | ask the user |
| Hard limits | actions QA must never complete | none — but see below |
| Evidence-mode defaults | all or fails, per intent |
acceptance → all, long sweeps → fails |
| Loop limits | how far the until-green loop may go on its own | 3 QA rounds, asks before the first fix pass, leaves changes uncommitted |
| Environment quirks | free text: the slow first paint, the flaky embed, the flagged feature | none |
Credentials are referenced, never stored
PROJECT.md is committed. Never write a password, token or API key into it.
The file is committed, so it names where the credentials live — an env var, a seed script, a password-manager entry — and never the values:
Env vars: QA_TEST_EMAIL / QA_TEST_PASSWORD (see .env.example)
Sign-in page: /loginHard limits are enforced, not advisory
The limits section is the one that changes agent behaviour most sharply. Listed actions are never completed, whatever a checklist item appears to ask for — the agent goes to the last safe step, records the item as not tested with the reason, and moves on:
- Never complete a live payment. Fill the card form, stop before Pay.
- Never send email to a real address. Use the catch-all inbox only.
- Never submit to an external/partner API from QA (orders, filings, webhooks).A "not tested — stopped before Pay per PROJECT.md hard limits" is a correct outcome. A pass on a live charge is not.
Loop limits bound the autonomous run
When the loop is asked to fix and re-test until green, this section is what says how far it may go without checking back:
max rounds: 3
fix without asking: no
commits: leave the changes uncommitted, one summary at the endnpx sluglist status still decides between rounds — the loop stops on stalled or blocked
whatever the ceiling says, because an item that has already survived a fix pass belongs to a human.
See Agents & CLI.
When it is missing
The skills fall back to their own defaults and say so once, then carry on — a missing file never
blocks a run. Ask for npx sluglist init and the answers move into the repo, where the next person
(or the next agent) inherits them.
See also: Agents & CLI for the loop the skills run, and Checklist mode for what the base branch feeds.