writing-practiceslisted
Install: claude install-skill eranra/session-sitter
# Writing a practices file
A practices file is markdown. Session Sitter reads it on every permission prompt and every decision
it makes names the clause it applied, so the file is both the policy and the explanation.
The format is the project's existing BDI bottom-line schema (`docs/KNOWLEDGE.md`), so a file already
written for the VS Code extension works here unchanged. What the plugin adds is **matching**: a
clause becomes deterministic when its body carries a `Match:` line.
## The shape of a clause
```markdown
### Intention: Never force-push to a shared branch
| Field | Value |
|---|---|
| id | team-git-002 |
| level | red |
| tags | git, history |
Match: `git push --force`, `/git\s+push\b.*--delete/`
Rewriting history on a branch other people build on destroys their work. Push a new commit instead.
```
- **The heading** is `### Belief:`, `### Desire:` or `### Intention:` followed by the title. A clause
under any other heading is ignored, so prose between clauses is free.
- **`id`** is the citation. That clause is cited as `practices §team-git-002` in the denial the user
sees and in the audit trail. Without an `id`, the id falls back to a leading number in the title
(`### Intention: 4. …` → `practices §4`) and then to a slug of the title. Set it explicitly — a
retitled clause otherwise silently changes its own citation.
- **`level`** decides the lane:
- `red` → deny the call, citing this clause.
- `green` → allow the call without asking, citing this cla