feat(agents-canon): AGENTS.md canon everywhere — bootstrap v2.0.0 writes AGENTS.md + CLAUDE.md pointer; 15 skills retarget triggers/rule refs from CLAUDE.md to AGENTS.md (semver bumps); dist rebuilt

This commit is contained in:
2026-08-12 20:36:25 +03:00
parent 6a33542d81
commit e431e9e142
41 changed files with 134 additions and 111 deletions

View File

@@ -54,12 +54,12 @@ project's folder and it will, in one pass:
- create a starter `README.md` - create a starter `README.md`
- lay out `.wiki/` per the [Karpathy LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) (delegated to [`setup-wiki`](skills/setup-wiki/)) - lay out `.wiki/` per the [Karpathy LLM Wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) (delegated to [`setup-wiki`](skills/setup-wiki/))
- lay out `.tasks/` with the canonical task board (delegated to [`setup-tasks`](skills/setup-tasks/)) - lay out `.tasks/` with the canonical task board (delegated to [`setup-tasks`](skills/setup-tasks/))
- write `CLAUDE.md` with skill triggers (`use project wiki`, `use task management system`, `check across all projects`, `we're on Windows`) - write `AGENTS.md` (canon) with skill triggers (`use project wiki`, `use task management system`, `check across all projects`, `we're on Windows`) plus a `CLAUDE.md` legacy pointer
- record the skill versions used in `.wiki/concepts/bootstrap-manifest.md` so cross-project layout drift stays debuggable - record the skill versions used in `.wiki/concepts/bootstrap-manifest.md` so cross-project layout drift stays debuggable
Two modes, picked automatically: **init** for an empty folder, **upgrade** Two modes, picked automatically: **init** for an empty folder, **upgrade**
for an existing project (the skill only fills the gaps and never overwrites for an existing project (the skill only fills the gaps and never overwrites
without explicit confirmation). On upgrade, `CLAUDE.md` is merged without explicit confirmation). On upgrade, `AGENTS.md` is merged
idempotently — only canonical trigger lines that aren't already present are idempotently — only canonical trigger lines that aren't already present are
appended after explicit confirm, so re-running `project-bootstrap` after a appended after explicit confirm, so re-running `project-bootstrap` after a
template change picks up the new triggers without duplicating the old ones. template change picks up the new triggers without duplicating the old ones.
@@ -146,7 +146,7 @@ skills/
│ └── build-hermes.py │ └── build-hermes.py
├── .wiki/ ← design docs, notes ├── .wiki/ ← design docs, notes
├── .tasks/ ← STATUS.md ├── .tasks/ ← STATUS.md
├── CLAUDE.md ├── AGENTS.md ← canon (CLAUDE.md is a legacy pointer)
└── README.md (this file — see README.ru.md for Russian) └── README.md (this file — see README.ru.md for Russian)
``` ```

View File

@@ -38,12 +38,12 @@ bash scripts/install.sh using-wiki caveman
- создаст стартовый `README.md` - создаст стартовый `README.md`
- развернёт `.wiki/` по [паттерну Karpathy LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) (делегируется в [`setup-wiki`](skills/setup-wiki/)) - развернёт `.wiki/` по [паттерну Karpathy LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) (делегируется в [`setup-wiki`](skills/setup-wiki/))
- развернёт `.tasks/` с канонической доской задач (делегируется в [`setup-tasks`](skills/setup-tasks/)) - развернёт `.tasks/` с канонической доской задач (делегируется в [`setup-tasks`](skills/setup-tasks/))
- запишет `CLAUDE.md` со скилл-триггерами (`use project wiki`, `use task management system`, `check across all projects`, `we're on Windows`) - запишет `AGENTS.md` (канон) со скилл-триггерами + `CLAUDE.md`-указатель (`use project wiki`, `use task management system`, `check across all projects`, `we're on Windows`)
- зафиксирует версии использованных скиллов в `.wiki/concepts/bootstrap-manifest.md`, чтобы дрифт раскладки между проектами оставался отлаживаемым - зафиксирует версии использованных скиллов в `.wiki/concepts/bootstrap-manifest.md`, чтобы дрифт раскладки между проектами оставался отлаживаемым
Два режима, выбирается автоматически: **init** для пустой папки и **upgrade** Два режима, выбирается автоматически: **init** для пустой папки и **upgrade**
для существующего проекта (скилл только дозаполняет пробелы и ничего не для существующего проекта (скилл только дозаполняет пробелы и ничего не
перезаписывает без явного подтверждения). В режиме upgrade `CLAUDE.md` перезаписывает без явного подтверждения). В режиме upgrade `AGENTS.md`
сливается идемпотентно — только канонические триггер-строки, которых ещё сливается идемпотентно — только канонические триггер-строки, которых ещё
нет в файле, дописываются после явного подтверждения, поэтому повторный нет в файле, дописываются после явного подтверждения, поэтому повторный
запуск `project-bootstrap` после обновления шаблона подтягивает новые запуск `project-bootstrap` после обновления шаблона подтягивает новые
@@ -107,7 +107,7 @@ skills/
│ └── install.sh │ └── install.sh
├── .wiki/ ← дизайн-доки, заметки ├── .wiki/ ← дизайн-доки, заметки
├── .tasks/ ← STATUS.md ├── .tasks/ ← STATUS.md
├── CLAUDE.md ├── AGENTS.md ← канон (CLAUDE.md — legacy-указатель)
└── README.md └── README.md
``` ```

Binary file not shown.

BIN
dist/code-review.skill vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -10,18 +10,18 @@
--- ---
A Claude Code skill that compresses your project memory files (`CLAUDE.md`, todos, preferences) into caveman format — so every session loads fewer tokens automatically. A Claude Code skill that compresses your project memory files (`AGENTS.md` / `CLAUDE.md`, todos, preferences) into caveman format — so every session loads fewer tokens automatically.
Claude read `CLAUDE.md` on every session start. If file big, cost big. Caveman make file small. Cost go down forever. Agents read `AGENTS.md` / `CLAUDE.md` on every session start. If file big, cost big. Caveman make file small. Cost go down forever.
## What It Do ## What It Do
``` ```
/caveman:compress CLAUDE.md /caveman:compress AGENTS.md
``` ```
``` ```
CLAUDE.md ← compressed (Claude reads this — fewer tokens every session) AGENTS.md ← compressed (agents read this — fewer tokens every session)
CLAUDE.original.md ← human-readable backup (you edit this) CLAUDE.original.md ← human-readable backup (you edit this)
``` ```
@@ -89,7 +89,7 @@ caveman-compress/
Examples: Examples:
``` ```
/caveman:compress CLAUDE.md /caveman:compress AGENTS.md
/caveman:compress docs/preferences.md /caveman:compress docs/preferences.md
/caveman:compress todos.md /caveman:compress todos.md
``` ```
@@ -106,7 +106,7 @@ Examples:
## How It Work ## How It Work
``` ```
/caveman:compress CLAUDE.md /caveman:compress AGENTS.md
detect file type (no tokens) detect file type (no tokens)
@@ -120,7 +120,7 @@ if errors: Claude fixes cherry-picked issues only (tokens — targeted fix)
retry up to 2 times retry up to 2 times
write compressed → CLAUDE.md write compressed → AGENTS.md
write original → CLAUDE.original.md write original → CLAUDE.original.md
``` ```
@@ -142,7 +142,7 @@ Caveman compress natural language. It never touch:
## Why This Matter ## Why This Matter
`CLAUDE.md` loads on **every session start**. A 1000-token project memory file costs tokens every single time you open a project. Over 100 sessions that's 100,000 tokens of overhead — just for context you already wrote. `AGENTS.md` / `CLAUDE.md` load on **every session start**. A 1000-token project memory file costs tokens every single time you open a project. Over 100 sessions that's 100,000 tokens of overhead — just for context you already wrote.
Caveman cut that by ~46% on average. Same instructions. Same accuracy. Less waste. Caveman cut that by ~46% on average. Same instructions. Same accuracy. Less waste.

View File

@@ -1,9 +1,9 @@
--- ---
name: caveman-compress name: caveman-compress
adapted-from: JuliusBrussee/caveman @ 0993277 (MIT) — vendored copy adapted-from: JuliusBrussee/caveman @ 0993277 (MIT) — vendored copy
version: 1.0.1 version: 1.0.2
description: > description: >
Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format Compress natural language memory files (AGENTS.md / CLAUDE.md, todos, preferences) into caveman format
to save input tokens. Preserves all technical substance, code, URLs, and structure. to save input tokens. Preserves all technical substance, code, URLs, and structure.
Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md.
Trigger: /caveman:compress <filepath> or "compress memory file" Trigger: /caveman:compress <filepath> or "compress memory file"
@@ -13,7 +13,7 @@ description: >
## Purpose ## Purpose
Compress natural language files (CLAUDE.md, todos, preferences) into caveman-speak to reduce input tokens. Compressed version overwrites original. Human-readable backup saved as `<filename>.original.md`. Compress natural language files (AGENTS.md / CLAUDE.md, todos, preferences) into caveman-speak to reduce input tokens. Compressed version overwrites original. Human-readable backup saved as `<filename>.original.md`.
## Trigger ## Trigger

View File

@@ -1,7 +1,7 @@
--- ---
name: code-review name: code-review
adapted-from: "mattpocock/skills @ 84fdeffd12f2ee307994d1eb6feb48173b6e0502 (MIT) — two-axis structure + Fowler baseline; format: caveman-review" adapted-from: "mattpocock/skills @ 84fdeffd12f2ee307994d1eb6feb48173b6e0502 (MIT) — two-axis structure + Fowler baseline; format: caveman-review"
version: 0.1.0 version: 0.1.1
description: > description: >
Two-axis review of a diff since a fixed point (commit, branch, tag, Two-axis review of a diff since a fixed point (commit, branch, tag,
merge-base) — Standards (does the code follow the repo's documented merge-base) — Standards (does the code follow the repo's documented
@@ -74,7 +74,7 @@ Look for the originating spec, in this order:
Anything in the repo that documents how code should be written: Anything in the repo that documents how code should be written:
`CODING_STANDARDS.md`, `CONTRIBUTING.md`, the project's `.wiki/CLAUDE.md` `CODING_STANDARDS.md`, `CONTRIBUTING.md`, the project's `.wiki/CLAUDE.md`
schema, CLAUDE.md conventions. schema, root AGENTS.md conventions.
On top of whatever the repo documents, the Standards axis always carries the On top of whatever the repo documents, the Standards axis always carries the
**smell baseline** below — a fixed set of Fowler code smells (_Refactoring_, **smell baseline** below — a fixed set of Fowler code smells (_Refactoring_,

View File

@@ -1,7 +1,7 @@
--- ---
name: delegate-task name: delegate-task
author: ours author: ours
version: 0.2.4 version: 0.2.5
description: > description: >
Use when delegating a task to another agent or project via Use when delegating a task to another agent or project via
mcp__projects-meta__tasks_create. Triggers: «делегировать таску», mcp__projects-meta__tasks_create. Triggers: «делегировать таску»,
@@ -85,7 +85,7 @@ description: >
Значение: `true` (следующий трек = «см. STATUS.md») либо строка-hint с названием следующего трека. Потребитель — `using-tasks` v1.2.0+ (Task completion step 6): после close печатает `🔚 SESSION BOUNDARY …` и останавливается, не клеймя следующую задачу. Дизайн: `.wiki/concepts/delegate-task-session-break.md`. Значение: `true` (следующий трек = «см. STATUS.md») либо строка-hint с названием следующего трека. Потребитель — `using-tasks` v1.2.0+ (Task completion step 6): после close печатает `🔚 SESSION BOUNDARY …` и останавливается, не клеймя следующую задачу. Дизайн: `.wiki/concepts/delegate-task-session-break.md`.
**Почему `invoke` а не триггер-фраза:** CLAUDE.md ненадёжен (уплывает при compression, слабые модели игнорируют). Тело задачи читается активно — императив `invoke` это прямая команда, не пассивный матчинг. **Почему `invoke` а не триггер-фраза:** AGENTS.md ненадёжен (уплывает при compression, слабые модели игнорируют). Тело задачи читается активно — императив `invoke` это прямая команда, не пассивный матчинг.
### 3. Dry-run preview ### 3. Dry-run preview

View File

@@ -1,7 +1,7 @@
--- ---
name: inter-session-peer-discipline name: inter-session-peer-discipline
author: ours author: ours
version: 0.1.1 version: 0.1.2
description: > description: >
Use whenever exchanging messages with another agent session over an inbox / Use whenever exchanging messages with another agent session over an inbox /
peer channel (`.claude-inbox/`, inter-session messaging). Treat a peer peer channel (`.claude-inbox/`, inter-session messaging). Treat a peer
@@ -20,7 +20,7 @@ description: >
**Whenever** you send or receive a message over an inter-session channel — `.claude-inbox/`, peer-to-peer agent messaging, or any "another session wrote to me" context. **Whenever** you send or receive a message over an inter-session channel — `.claude-inbox/`, peer-to-peer agent messaging, or any "another session wrote to me" context.
**At session start** when `CLAUDE.md` has a trigger line like: **At session start** when `AGENTS.md` has a trigger line like:
- `inter-session messaging: peer not authority` - `inter-session messaging: peer not authority`
## The rule ## The rule

View File

@@ -1,7 +1,7 @@
--- ---
name: private-dev-public-publish name: private-dev-public-publish
author: ours author: ours
version: 0.2.0 version: 0.2.1
description: Use when setting up or maintaining a publishable open-source port/fork that should be developed privately but published cleanly — messy development on a PRIVATE Gitea repo (with `.wiki/`+`.tasks/` inside), and a curated COPY of finished work into a PUBLIC GitHub fork that preserves upstream lineage (stays a fork, keeps attribution; GPL-clean). Triggers - «опубликовать форк/порт на гитхаб», «разработку держать приватно, релиз публичный», «приватный гитеа + публичный гитхаб», «publish a fork without exposing dev history», «curated publish to GitHub», «как правильно форкнуть open-source для публикации». NOT for purely-private projects, purely-public open development, or greenfield bootstrap (use project-bootstrap). description: Use when setting up or maintaining a publishable open-source port/fork that should be developed privately but published cleanly — messy development on a PRIVATE Gitea repo (with `.wiki/`+`.tasks/` inside), and a curated COPY of finished work into a PUBLIC GitHub fork that preserves upstream lineage (stays a fork, keeps attribution; GPL-clean). Triggers - «опубликовать форк/порт на гитхаб», «разработку держать приватно, релиз публичный», «приватный гитеа + публичный гитхаб», «publish a fork without exposing dev history», «curated publish to GitHub», «как правильно форкнуть open-source для публикации». NOT for purely-private projects, purely-public open development, or greenfield bootstrap (use project-bootstrap).
--- ---
@@ -11,7 +11,7 @@ Two-repo topology for a publishable open-source port/fork: develop messily on a
| Role | Where | Contents | Visibility | | Role | Where | Contents | Visibility |
|---|---|---|---| |---|---|---|---|
| **Dev** | private Gitea repo | upstream base + all development + `.wiki/`+`.tasks/`+`CLAUDE.md`; messy history | private | | **Dev** | private Gitea repo | upstream base + all development + `.wiki/`+`.tasks/`+`AGENTS.md`; messy history | private |
| **Publish** | public GitHub fork | code only, curated clean commits, upstream lineage (stays a fork) | public | | **Publish** | public GitHub fork | code only, curated clean commits, upstream lineage (stays a fork) | public |
You work in the Gitea (dev) folder; matured work is **copied as files** into the GitHub (pub) folder → one clean commit → push. You work in the Gitea (dev) folder; matured work is **copied as files** into the GitHub (pub) folder → one clean commit → push.
@@ -20,7 +20,7 @@ You work in the Gitea (dev) folder; matured work is **copied as files** into the
- You're porting/forking an open-source project and intend to publish it, but the development is exploratory (experiments, dead-ends, reverts) you don't want in public history. - You're porting/forking an open-source project and intend to publish it, but the development is exploratory (experiments, dead-ends, reverts) you don't want in public history.
- You want attribution and licence lineage to hold (the public repo must stay a real fork of upstream). - You want attribution and licence lineage to hold (the public repo must stay a real fork of upstream).
- You need a place for `.wiki/` + `.tasks/` + `CLAUDE.md` that never ships publicly. - You need a place for `.wiki/` + `.tasks/` + `AGENTS.md` that never ships publicly.
**Why curated publication is legitimate (GPL/OSI):** the licence requires the source of what you **distribute** (the release), not your development history. A curated publish is clean as long as the public repo (1) stays a fork of upstream (lineage = attribution) and (2) contains the complete buildable source of the release. **Why curated publication is legitimate (GPL/OSI):** the licence requires the source of what you **distribute** (the release), not your development history. A curated publish is clean as long as the public repo (1) stays a fork of upstream (lineage = attribution) and (2) contains the complete buildable source of the release.
@@ -34,14 +34,14 @@ You work in the Gitea (dev) folder; matured work is **copied as files** into the
1. **Establish provenance.** Identify which upstream commit/fork is your real base. If history was lost, content-match the tree; find the author's PR/fork for the fix you're carrying so attribution is correct. 1. **Establish provenance.** Identify which upstream commit/fork is your real base. If history was lost, content-match the tree; find the author's PR/fork for the fix you're carrying so attribution is correct.
2. **Fork canonical upstream on GitHub** (`gh repo fork`) → the public showcase. `upstream` remote = the original. Bring in needed third-party fixes via `cherry-pick` (preserves authorship) or merge. 2. **Fork canonical upstream on GitHub** (`gh repo fork`) → the public showcase. `upstream` remote = the original. Bring in needed third-party fixes via `cherry-pick` (preserves authorship) or merge.
3. **Create the private Gitea dev repo** on the same base: clone the GitHub fork locally, add the Gitea repo as a remote, and push the base there — this carries the upstream lineage into the private repo. Put meta (`.wiki/`+`.tasks/`+`CLAUDE.md`) inside it. **Trap:** a global `~/.config/git/ignore` (`core.excludesfile`) may silently ignore `.wiki/`/`.tasks/` → add local `!`-negation lines in the repo's `.gitignore`. 3. **Create the private Gitea dev repo** on the same base: clone the GitHub fork locally, add the Gitea repo as a remote, and push the base there — this carries the upstream lineage into the private repo. Put meta (`.wiki/`+`.tasks/`+`AGENTS.md`) inside it. **Trap:** a global `~/.config/git/ignore` (`core.excludesfile`) may silently ignore `.wiki/`/`.tasks/` → add local `!`-negation lines in the repo's `.gitignore`.
4. **Two local folders:** dev (the Gitea private clone — your primary working copy) and pub (a clone of the GitHub fork; its `origin` = your fork, `upstream` = canonical). 4. **Two local folders:** dev (the Gitea private clone — your primary working copy) and pub (a clone of the GitHub fork; its `origin` = your fork, `upstream` = canonical).
5. **Publish:** copy the **code files** dev→pub, **excluding meta** (`.wiki/`, `.tasks/`, `CLAUDE.md`, and any private notes — these must never reach the public fork; also list them in the pub repo's `.gitignore` as a backstop). Run `git status` in pub to confirm no meta is staged. Make one clean commit, `push origin` (github). Never reconstruct history — "copy" means lay files into the fork's tree. 5. **Publish:** copy the **code files** dev→pub, **excluding meta** (`.wiki/`, `.tasks/`, `AGENTS.md`, and any private notes — these must never reach the public fork; also list them in the pub repo's `.gitignore` as a backstop). Run `git status` in pub to confirm no meta is staged. Make one clean commit, `push origin` (github). Never reconstruct history — "copy" means lay files into the fork's tree.
## Failure modes ## Failure modes
- **Public folder is no longer a fork (rootless snapshot)** → attribution/lineage lost. Do NOT start history from scratch; "copy" = place files into the fork's tree, keep the fork relationship. - **Public folder is no longer a fork (rootless snapshot)** → attribution/lineage lost. Do NOT start history from scratch; "copy" = place files into the fork's tree, keep the fork relationship.
- **Private meta copied into the public fork** (`.wiki/`/`.tasks/`/`CLAUDE.md` leak) → dev internals exposed publicly. The dev→pub copy MUST exclude meta; keep those paths in the pub repo's `.gitignore` and check `git status` in pub before committing. - **Private meta copied into the public fork** (`.wiki/`/`.tasks/`/`AGENTS.md` leak) → dev internals exposed publicly. The dev→pub copy MUST exclude meta; keep those paths in the pub repo's `.gitignore` and check `git status` in pub before committing.
- **meta silently not committed** in the *private* repo (global gitignore swallows `.wiki/`/`.tasks/`) → verify with `git check-ignore .wiki .tasks`; add negation lines if matched. - **meta silently not committed** in the *private* repo (global gitignore swallows `.wiki/`/`.tasks/`) → verify with `git check-ignore .wiki .tasks`; add negation lines if matched.
- **Release without complete source in the public repo** → GPL violation. The public release must be fully buildable from what's published. - **Release without complete source in the public repo** → GPL violation. The public release must be fully buildable from what's published.

View File

@@ -2,7 +2,7 @@
Initializes or upgrades a project workspace in one pass: git, `.gitignore`, Initializes or upgrades a project workspace in one pass: git, `.gitignore`,
`README.md`, `.wiki/` (Karpathy's LLM Wiki layout), `.tasks/` (per-task board), `README.md`, `.wiki/` (Karpathy's LLM Wiki layout), `.tasks/` (per-task board),
and `CLAUDE.md` with skill triggers. and `AGENTS.md` (canon) with skill triggers + `CLAUDE.md` legacy pointer.
Operates in two modes, picked automatically: Operates in two modes, picked automatically:
@@ -44,23 +44,24 @@ projects bootstrapped at different times debuggable.
| `README.md` | minimal stub | Skipped if file exists. | | `README.md` | minimal stub | Skipped if file exists. |
| `.wiki/` | delegated to `setup-wiki` | Karpathy LLM Wiki layout — `CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/`, `entities/`, `concepts/`, `packages/`, `sources/`. | | `.wiki/` | delegated to `setup-wiki` | Karpathy LLM Wiki layout — `CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/`, `entities/`, `concepts/`, `packages/`, `sources/`. |
| `.tasks/` | delegated to `setup-tasks` | Canonical board — `STATUS.md` plus per-task `<task-slug>.md` files. | | `.tasks/` | delegated to `setup-tasks` | Canonical board — `STATUS.md` plus per-task `<task-slug>.md` files. |
| `CLAUDE.md` | `assets/CLAUDE.md.template` | Skill triggers (`use project wiki`, `use task management system`, etc.). On non-Windows hosts, swap the `we're on Windows` line for `we're on Linux` / `we're on macOS`. On upgrade, the template is treated as a canonical set and merged idempotently — only missing trigger lines are appended after user confirm. Re-runs are no-ops. | | `AGENTS.md` | `assets/AGENTS.md.template` | **Canon** — skill triggers (`use project wiki`, `use task management system`, etc.). On non-Windows hosts, swap the `we're on Windows` line for `we're on Linux` / `we're on macOS`. On upgrade, the template is treated as a canonical set and merged idempotently — only missing trigger lines are appended after user confirm. Re-runs are no-ops. |
| `CLAUDE.md` | generated pointer | `Canon is AGENTS.md. Read AGENTS.md.` — legacy pointer for tooling that looks for the old name. |
| `.wiki/concepts/bootstrap-manifest.md` | generated | Records which skill versions initialized the project, so cross-project layout drift is debuggable. | | `.wiki/concepts/bootstrap-manifest.md` | generated | Records which skill versions initialized the project, so cross-project layout drift is debuggable. |
## Workflow ## Workflow
1. **Detect mode.** Inspect the current directory — git, `.wiki/`, `.tasks/`, 1. **Detect mode.** Inspect the current directory — git, `.wiki/`, `.tasks/`,
`CLAUDE.md`, `README.md` — and print a single summary block: what was `AGENTS.md`, `CLAUDE.md`, `README.md` — and print a single summary block: what was
found, what will be created, what will be skipped. found, what will be created, what will be skipped.
2. **Confirm.** One question, one confirmation. Nothing is written before the 2. **Confirm.** One question, one confirmation. Nothing is written before the
user agrees. user agrees.
3. **Steps 15.** Create or skip each piece in order — git, README, `.wiki/`, 3. **Steps 15.** Create or skip each piece in order — git, README, `.wiki/`,
`.tasks/`, `CLAUDE.md`. Steps 3 and 4 delegate to the setup-skills. `.tasks/`, `AGENTS.md` + `CLAUDE.md` pointer. Steps 3 and 4 delegate to the setup-skills.
4. **Step 5.5.** Write `bootstrap-manifest.md` recording the versions of 4. **Step 5.5.** Write `bootstrap-manifest.md` recording the versions of
`project-bootstrap`, `setup-wiki`, `setup-tasks`, `project-discipline`, `project-bootstrap`, `setup-wiki`, `setup-tasks`, `project-discipline`,
`setup-interns`, and `using-interns` used. `setup-interns`, and `using-interns` used.
5. **Step 5.6.** Skill dependencies check. Walk the canonical trigger list 5. **Step 5.6.** Skill dependencies check. Walk the canonical trigger list
in `CLAUDE.md`, look each up in an embedded `trigger → fulfiller` map, in `AGENTS.md`, look each up in an embedded `trigger → fulfiller` map,
detect what's missing on this host (`~/.claude/skills/<name>/SKILL.md` detect what's missing on this host (`~/.claude/skills/<name>/SKILL.md`
for skills, `~/.claude/plugins/installed_plugins.json` for plugins), for skills, `~/.claude/plugins/installed_plugins.json` for plugins),
and print one chat-only block listing every missing fulfiller with a and print one chat-only block listing every missing fulfiller with a

View File

@@ -1,10 +1,11 @@
--- ---
name: project-bootstrap name: project-bootstrap
author: ours author: ours
version: 1.13.0 version: 2.0.0
description: > description: >
Initializes or upgrades a project in the current folder: git, .gitignore, README.md, Initializes or upgrades a project in the current folder: git, .gitignore, README.md,
.wiki/ using Karpathy's method, .tasks/ for task tracking, CLAUDE.md with skill triggers. .wiki/ using Karpathy's method, .tasks/ for task tracking, AGENTS.md (canon) with
skill triggers + CLAUDE.md legacy pointer.
Creates remote Gitea repo and syncs projects-meta cache for greenfield projects. Creates remote Gitea repo and syncs projects-meta cache for greenfield projects.
Use this skill when the user says "initialize project", "bootstrap", "setup project", Use this skill when the user says "initialize project", "bootstrap", "setup project",
"upgrade project", "add wiki", "add tasks", "start project", "set everything up", "upgrade project", "add wiki", "add tasks", "start project", "set everything up",
@@ -46,7 +47,7 @@ Show the user a summary in one block — what was found, what will be created:
Mode: greenfield-full (new project + remote create) Mode: greenfield-full (new project + remote create)
Found: (empty directory) Found: (empty directory)
Create: git .wiki .tasks CLAUDE.md .gitignore README.md remote Create: git .wiki .tasks AGENTS.md CLAUDE.md .gitignore README.md remote
``` ```
Ask one question: "Looks right? Shall we proceed?" — and wait for confirmation. Ask one question: "Looks right? Shall we proceed?" — and wait for confirmation.
@@ -320,22 +321,41 @@ If `setup-tasks` is not installed, **stop** and tell the user — same rule as S
--- ---
## Step 5 — CLAUDE.md ## Step 5 — AGENTS.md (canon) + CLAUDE.md pointer
Two paths, picked by file presence: **Canon is `AGENTS.md`** (cross-agent standard: pi prefers `AGENTS.md` over
`CLAUDE.md` when both exist — confirmed in pi's `resource-loader`; Claude Code
reads `AGENTS.md` as fallback). `CLAUDE.md` is a legacy pointer file for
tooling that looks for it by name. Both files are always written together;
the canon content lives only in `AGENTS.md`.
### Init (file does not exist) Three paths, picked by file presence:
Create `CLAUDE.md` from `assets/CLAUDE.md.template`. Substitute the platform line ### Init (neither file exists)
on non-Windows hosts (`we're on Linux` / `we're on macOS` instead of
`we're on Windows`).
### Upgrade (file exists) — idempotent merge Create `AGENTS.md` from `assets/AGENTS.md.template` (canon content). Substitute
the platform line on non-Windows hosts (`we're on Linux` / `we're on macOS`
instead of `we're on Windows`). Then write the `CLAUDE.md` pointer:
```markdown
# CLAUDE.md — legacy pointer
Canon is `AGENTS.md`. Read `AGENTS.md` — it contains all project instructions.
```
### Migrate (CLAUDE.md exists, AGENTS.md does not)
The project predates the AGENTS.md canon. Offer to migrate: `git mv CLAUDE.md
AGENTS.md`, fix the first-line header if it was `# CLAUDE.md`, then write the
`CLAUDE.md` pointer. Ask one question — "Migrate CLAUDE.md → AGENTS.md?" —
and wait for confirmation. On confirm, proceed to the Upgrade merge below.
### Upgrade (AGENTS.md exists) — idempotent merge
Treat the template as the canonical trigger set and reconcile the existing file Treat the template as the canonical trigger set and reconcile the existing file
against it. Re-runs are no-ops once the file is in canon. against it. Re-runs are no-ops once the file is in canon.
1. Read the existing `CLAUDE.md`. 1. Read the existing `AGENTS.md`.
2. For each non-empty, non-comment line in the template, decide whether it's 2. For each non-empty, non-comment line in the template, decide whether it's
already present: already present:
- **Trigger lines** (everything except the platform line) — present iff any - **Trigger lines** (everything except the platform line) — present iff any
@@ -346,19 +366,20 @@ against it. Re-runs are no-ops once the file is in canon.
matches `we're on (windows|linux|macos)` case-insensitively. If the user matches `we're on (windows|linux|macos)` case-insensitively. If the user
pinned a different platform on purpose, **leave it alone**. Only append pinned a different platform on purpose, **leave it alone**. Only append
the host-appropriate platform line when none of the three is present. the host-appropriate platform line when none of the three is present.
3. Collect missing lines. If none → print `CLAUDE.md already canon — no changes` 3. Collect missing lines. If none → print `AGENTS.md already canon — no changes`
and skip to Step 5.5. and skip to Step 5.5.
4. Show the user the diff (N lines, exact text to append) and ask one question: 4. Show the user the diff (N lines, exact text to append) and ask one question:
"Append these N missing canonical triggers to the end of CLAUDE.md?" Wait "Append these N missing canonical triggers to the end of AGENTS.md?" Wait
for explicit confirmation before writing. for explicit confirmation before writing.
5. On confirm: append a single newline (if the file doesn't end with one) and 5. On confirm: append a single newline (if the file doesn't end with one) and
then the missing lines, one per line. Don't rewrite the file — only append. then the missing lines, one per line. Don't rewrite the file — only append.
Don't reorder existing lines. Don't dedupe within the existing file. Don't reorder existing lines. Don't dedupe within the existing file.
6. Ensure the `CLAUDE.md` pointer exists; if missing, write it.
Template contents (`assets/CLAUDE.md.template` — source of truth): Template contents (`assets/AGENTS.md.template` — source of truth):
```markdown ```markdown
# CLAUDE.md # AGENTS.md
# Agent instructions. Each line is a trigger for an installed skill. # Agent instructions. Each line is a trigger for an installed skill.
talk like a caveman talk like a caveman
@@ -388,8 +409,8 @@ if `pulling-before-work` is not in `~/.claude/skills/`; otherwise the trigger is
silently dead like any other absent skill. silently dead like any other absent skill.
The `follow project discipline` line activates the `project-discipline` skill, The `follow project discipline` line activates the `project-discipline` skill,
which codifies four cross-project rules: (1) project CLAUDE.md / .wiki/CLAUDE.md which codifies four cross-project rules: (1) project AGENTS.md / CLAUDE.md /
/ .tasks/ override defaults from any other skill; (2) all work on master/main, .wiki/CLAUDE.md / .tasks/ override defaults from any other skill; (2) all work on master/main,
no feature branches without explicit user approval; (3) version bump on every no feature branches without explicit user approval; (3) version bump on every
edit of versioned artifacts per semver, recorded in commit; (4) commit freely, edit of versioned artifacts per semver, recorded in commit; (4) commit freely,
push only after explicit per-session approval. Install the skill on the host push only after explicit per-session approval. Install the skill on the host
@@ -468,7 +489,7 @@ If a delegated setup-skill is unavailable on this machine (e.g. user installed o
## Step 5.6 — Skill dependencies check (chat-only, never auto-install) ## Step 5.6 — Skill dependencies check (chat-only, never auto-install)
The `CLAUDE.md` template just written contains canonical trigger lines. The `AGENTS.md` template just written contains canonical trigger lines.
Each one is a no-op unless the corresponding skill or plugin is installed Each one is a no-op unless the corresponding skill or plugin is installed
on the host. On a fresh machine these are often absent, and the user on the host. On a fresh machine these are often absent, and the user
won't know the trigger is silently dead. Detect what's missing on this won't know the trigger is silently dead. Detect what's missing on this
@@ -477,11 +498,11 @@ project file, never auto-install.
### Trigger → fulfiller map ### Trigger → fulfiller map
Source of truth for this map is the canonical `assets/CLAUDE.md.template`. Source of truth for this map is the canonical `assets/AGENTS.md.template`.
When a new trigger is added there, also add a row here in the same commit. When a new trigger is added there, also add a row here in the same commit.
Mismatch between template and map → silent gaps in the recommendation. Mismatch between template and map → silent gaps in the recommendation.
| Trigger line in `CLAUDE.md` | Fulfiller | Kind | Detection path | Install command | | Trigger line in `AGENTS.md` | Fulfiller | Kind | Detection path | Install command |
|---|---|---|---|---| |---|---|---|---|---|
| `talk like a caveman` | `caveman` | skill | `~/.claude/skills/caveman/SKILL.md` | `bash scripts/install.sh caveman` | | `talk like a caveman` | `caveman` | skill | `~/.claude/skills/caveman/SKILL.md` | `bash scripts/install.sh caveman` |
| `use project wiki` | `using-wiki` | skill | `~/.claude/skills/using-wiki/SKILL.md` | `bash scripts/install.sh using-wiki` | | `use project wiki` | `using-wiki` | skill | `~/.claude/skills/using-wiki/SKILL.md` | `bash scripts/install.sh using-wiki` |
@@ -497,7 +518,7 @@ Mismatch between template and map → silent gaps in the recommendation.
### Algorithm ### Algorithm
1. Read the project's `CLAUDE.md` (just-written or pre-existing). Extract 1. Read the project's `AGENTS.md` (just-written or pre-existing). Extract
every non-empty, non-comment line — these are the active triggers for every non-empty, non-comment line — these are the active triggers for
THIS project. The user may have removed canonical lines on purpose; THIS project. The user may have removed canonical lines on purpose;
respect that — only check what's actually in the file. respect that — only check what's actually in the file.
@@ -515,7 +536,7 @@ Mismatch between template and map → silent gaps in the recommendation.
- **All present** — print one line: - **All present** — print one line:
``` ```
✅ all skill dependencies satisfied — every CLAUDE.md trigger has its fulfiller on this host. ✅ all skill dependencies satisfied — every AGENTS.md trigger has its fulfiller on this host.
``` ```
Skip to Step 6. Skip to Step 6.
@@ -524,9 +545,9 @@ Mismatch between template and map → silent gaps in the recommendation.
write it into any project file: write it into any project file:
``` ```
Recommended: install the following to fulfill CLAUDE.md triggers Recommended: install the following to fulfill AGENTS.md triggers
The triggers below are present in CLAUDE.md but their fulfillers are The triggers below are present in AGENTS.md but their fulfillers are
missing on this machine — they're silently no-ops until installed: missing on this machine — they're silently no-ops until installed:
trigger fulfiller (kind) trigger fulfiller (kind)
@@ -555,7 +576,7 @@ Mismatch between template and map → silent gaps in the recommendation.
skill, and silently mutating user-level skill / plugin state without skill, and silently mutating user-level skill / plugin state without
consent is overreach. The recommendation is informational. The user can consent is overreach. The recommendation is informational. The user can
install some / all / none of the recommendations, or remove canonical install some / all / none of the recommendations, or remove canonical
lines from `CLAUDE.md` to lean the project's trigger set down. lines from `AGENTS.md` to lean the project's trigger set down.
## Step 6 — Commit ## Step 6 — Commit
@@ -567,7 +588,7 @@ git commit -m "chore: bootstrap project structure"
If the repo already had commits — commit only the files just created: If the repo already had commits — commit only the files just created:
```bash ```bash
git add .wiki/ .tasks/ CLAUDE.md .gitignore README.md git add .wiki/ .tasks/ AGENTS.md CLAUDE.md .gitignore README.md
git commit -m "chore: upgrade project structure" git commit -m "chore: upgrade project structure"
``` ```
@@ -581,7 +602,8 @@ Print a final report:
✅ Done! Created: ✅ Done! Created:
.wiki/ — project wiki (Karpathy method) .wiki/ — project wiki (Karpathy method)
.tasks/ — task tracking system .tasks/ — task tracking system
CLAUDE.md — skill triggers AGENTS.md — skill triggers (canon)
CLAUDE.md — legacy pointer
.gitignore — standard template .gitignore — standard template
README.md — starter file README.md — starter file
remote — Gitea repo created and pushed remote — Gitea repo created and pushed

View File

@@ -1,4 +1,4 @@
# CLAUDE.md # AGENTS.md
# Agent instructions. Each line is a trigger for an installed skill. # Agent instructions. Each line is a trigger for an installed skill.
talk like a caveman talk like a caveman

View File

@@ -5,12 +5,12 @@ guarantees that hold in a tightly-maintained repo apply everywhere.
## When it triggers ## When it triggers
- **Session start** — when `CLAUDE.md` contains the line `follow project discipline` (added by `project-bootstrap` v1.5.0+). - **Session start** — when `AGENTS.md` contains the line `follow project discipline` (added by `project-bootstrap` v2.0.0+).
- **In-chat** — when the user says "use project discipline", "соблюди дисциплину", "проектные правила", or close variants. - **In-chat** — when the user says "use project discipline", "соблюди дисциплину", "проектные правила", or close variants.
## The four rules ## The four rules
1. **Project conventions over skill defaults.** `CLAUDE.md` / `.wiki/CLAUDE.md` / `.tasks/` override any other skill's defaults. Specs go to `.wiki/concepts/`, tasks to `.tasks/`. 1. **Project conventions over skill defaults.** `AGENTS.md` / `.wiki/CLAUDE.md` / `.tasks/` override any other skill's defaults. Specs go to `.wiki/concepts/`, tasks to `.tasks/`.
2. **Master-only.** All work on `master` (or `main`). No feature branches without explicit user approval. 2. **Master-only.** All work on `master` (or `main`). No feature branches without explicit user approval.
3. **Semver discipline.** Bump `version:` in `SKILL.md` / `package.json` / `pyproject.toml` on every edit per MAJOR / MINOR / PATCH; record in commit message; rebuild `dist/` artifacts after. 3. **Semver discipline.** Bump `version:` in `SKILL.md` / `package.json` / `pyproject.toml` on every edit per MAJOR / MINOR / PATCH; record in commit message; rebuild `dist/` artifacts after.
4. **Push freely by default.** No confirmation needed for push; a local push-gate skill (e.g. books — auto-deploy) overrides per project. Force / delete / non-ff push always asks. 4. **Push freely by default.** No confirmation needed for push; a local push-gate skill (e.g. books — auto-deploy) overrides per project. Force / delete / non-ff push always asks.
@@ -19,11 +19,11 @@ guarantees that hold in a tightly-maintained repo apply everywhere.
None. The skill is a textual policy document; it takes no actions and has no None. The skill is a textual policy document; it takes no actions and has no
external dependencies. Activate it by adding `follow project discipline` to external dependencies. Activate it by adding `follow project discipline` to
`CLAUDE.md` (or use `project-bootstrap` v1.5.0+ which adds it automatically). `AGENTS.md` (or use `project-bootstrap` v2.0.0+ which adds it automatically).
## Related ## Related
- `project-bootstrap` (v1.5.0+) — adds the trigger line to new and existing projects' `CLAUDE.md`. - `project-bootstrap` (v2.0.0+) — adds the trigger line to new and existing projects' `AGENTS.md`.
- `pulling-before-work` — companion skill activated by the canonical template; pulls origin once at session start (`git pull --ff-only`). - `pulling-before-work` — companion skill activated by the canonical template; pulls origin once at session start (`git pull --ff-only`).
- `using-tasks` / `using-wiki` — the format conventions Rule 1 routes work into. - `using-tasks` / `using-wiki` — the format conventions Rule 1 routes work into.
- `.wiki/concepts/project-discipline-design.md` (in `skills`) — full design rationale. - `.wiki/concepts/project-discipline-design.md` (in `skills`) — full design rationale.

View File

@@ -1,9 +1,9 @@
--- ---
name: project-discipline name: project-discipline
author: ours author: ours
version: 0.2.1 version: 0.2.2
description: > description: >
Codifies five cross-project discipline rules: (1) project CLAUDE.md / Codifies five cross-project discipline rules: (1) project AGENTS.md /
.wiki/CLAUDE.md / .tasks/ override defaults from other skills (specs → .wiki/CLAUDE.md / .tasks/ override defaults from other skills (specs →
.wiki/concepts/, tasks → .tasks/); (2) master-only, no feature branches .wiki/concepts/, tasks → .tasks/); (2) master-only, no feature branches
without approval; (3) semver bump on every edit of versioned artifacts without approval; (3) semver bump on every edit of versioned artifacts
@@ -13,7 +13,7 @@ description: >
overrides per project; force/delete/non-ff always ask; overrides per project; force/delete/non-ff always ask;
(5) transit/brainstorm workspaces — artifacts to .brainstorm/ or global wiki (5) transit/brainstorm workspaces — artifacts to .brainstorm/ or global wiki
only via explicit user direction. Activated by "follow project discipline" only via explicit user direction. Activated by "follow project discipline"
trigger in CLAUDE.md (added by project-bootstrap v1.5.0+). trigger in AGENTS.md (added by project-bootstrap v2.0.0+).
--- ---
# project-discipline # project-discipline
@@ -22,7 +22,7 @@ description: >
## When this runs ## When this runs
**At session start** — when `CLAUDE.md` contains the line `follow project discipline`. The skill is a policy document; the agent reads it and applies the four rules to all subsequent work in the session. **At session start** — when `AGENTS.md` contains the line `follow project discipline`. The skill is a policy document; the agent reads it and applies the four rules to all subsequent work in the session.
**On explicit reference** — when the user says "use project discipline", "соблюди дисциплину", "проектные правила", "что у меня по правилам?", or close variants asking about/applying the rules. **On explicit reference** — when the user says "use project discipline", "соблюди дисциплину", "проектные правила", "что у меня по правилам?", or close variants asking about/applying the rules.
@@ -32,11 +32,11 @@ The skill itself takes no actions and has no external side-effects. It instructs
Before applying defaults from any other skill (frontend-design, mcp-builder, etc.), read in this order: Before applying defaults from any other skill (frontend-design, mcp-builder, etc.), read in this order:
1. `CLAUDE.md` in the project root. 1. `AGENTS.md` in the project root.
2. `.wiki/CLAUDE.md` (if it exists). 2. `.wiki/CLAUDE.md` (if it exists).
3. `.tasks/STATUS.md` (if it exists). 3. `.tasks/STATUS.md` (if it exists).
Any path, format, or workflow explicitly stated in those files **overrides the skill default**. Any path, format, or workflow explicitly stated in those files **overrides the skill default**. (CLAUDE.md, where present, is a legacy pointer — read it, then follow the canon in AGENTS.md.)
Concrete consequences: Concrete consequences:
@@ -102,12 +102,12 @@ Anything else is an ordinary fast-forward push and proceeds without a gate.
Some workspaces are **transit zones** — discussion areas with no `.tasks/`, where brainstorm artifacts are explicitly NOT auto-promoted to project wikis. Some workspaces are **transit zones** — discussion areas with no `.tasks/`, where brainstorm artifacts are explicitly NOT auto-promoted to project wikis.
**Default destination for brainstorm artifacts:** **Default destination for brainstorm artifacts:**
- **In-progress brainstorm outputs** → `.brainstorm/<topic>.md` (or whatever the workspace's README/CLAUDE.md declares) - **In-progress brainstorm outputs** → `.brainstorm/<topic>.md` (or whatever the workspace's README/AGENTS.md declares)
- **Mature, cross-cutting outputs** → `~/projects/.wiki/concepts/<topic>-design.md` via `mcp__projects-meta__knowledge_ingest`**only** when user explicitly directs this - **Mature, cross-cutting outputs** → `~/projects/.wiki/concepts/<topic>-design.md` via `mcp__projects-meta__knowledge_ingest`**only** when user explicitly directs this
**Agent must NOT auto-promote** brainstorm artifacts to global wikis by analogy with Rule 1. Convergence-moment (move from workspace to permanent wiki) is a user decision, not an automatic action. **Agent must NOT auto-promote** brainstorm artifacts to global wikis by analogy with Rule 1. Convergence-moment (move from workspace to permanent wiki) is a user decision, not an automatic action.
**Example:** `~/projects/.meeting-room/` is a transit zone. Its CLAUDE.md explicitly states "no `.tasks/`, transit zone, artifacts go to `.brainstorm/` or global wiki via user command." Rule 1's "project conventions override" applies, but the override is explicit in the workspace contract — auto-promotion by analogy would violate that contract. **Example:** `~/projects/.meeting-room/` is a transit zone. Its AGENTS.md explicitly states "no `.tasks/`, transit zone, artifacts go to `.brainstorm/` or global wiki via user command." Rule 1's "project conventions override" applies, but the override is explicit in the workspace contract — auto-promotion by analogy would violate that contract.
**When in doubt:** ask the user "this goes to `.brainstorm/`, or should I promote to shared wiki?" rather than assuming. **When in doubt:** ask the user "this goes to `.brainstorm/`, or should I promote to shared wiki?" rather than assuming.
@@ -115,7 +115,7 @@ Some workspaces are **transit zones** — discussion areas with no `.tasks/`, wh
The skill **does not**: The skill **does not**:
- modify `CLAUDE.md` (that's `project-bootstrap`'s job); - modify `AGENTS.md` (that's `project-bootstrap`'s job);
- enforce rules via git hooks / pre-commit / CI (this is agent discipline, not tooling); - enforce rules via git hooks / pre-commit / CI (this is agent discipline, not tooling);
- manage `settings.json` permissions (that's `update-config`); - manage `settings.json` permissions (that's `update-config`);
- check the existence of `.wiki/` / `.tasks/` (that's `setup-wiki` / `setup-tasks` / `project-bootstrap`); if a project doesn't have them, Rule 1 simply finds no overrides and falls back to skill defaults. - check the existence of `.wiki/` / `.tasks/` (that's `setup-wiki` / `setup-tasks` / `project-bootstrap`); if a project doesn't have them, Rule 1 simply finds no overrides and falls back to skill defaults.
@@ -124,4 +124,4 @@ The skill **does not**:
In a tightly-disciplined repo (`skills`) the four rules already hold by accident — the agent reads `.wiki/CLAUDE.md`, knows specs go to `.wiki/concepts/`, knows to bump `version:`, knows not to push without confirmation. In **other** projects of the same user, that discipline does not transfer: the agent falls back to vendor-default paths (`docs/specs/`, `docs/plans/`), branches on a whim, forgets `version:` bumps, and pushes without asking. This skill makes the discipline explicit and portable. In a tightly-disciplined repo (`skills`) the four rules already hold by accident — the agent reads `.wiki/CLAUDE.md`, knows specs go to `.wiki/concepts/`, knows to bump `version:`, knows not to push without confirmation. In **other** projects of the same user, that discipline does not transfer: the agent falls back to vendor-default paths (`docs/specs/`, `docs/plans/`), branches on a whim, forgets `version:` bumps, and pushes without asking. This skill makes the discipline explicit and portable.
Full design rationale (why one skill instead of four, why a skill instead of inline `CLAUDE.md` lines, scope of each rule, push-permission mechanism choice) lives in `.wiki/concepts/project-discipline-design.md` (in this repo; in other projects bootstrapped from this repo, the design lives in `skills`). Full design rationale (why one skill instead of four, why a skill instead of inline `AGENTS.md` lines, scope of each rule, push-permission mechanism choice) lives in `.wiki/concepts/project-discipline-design.md` (in this repo; in other projects bootstrapped from this repo, the design lives in `skills`).

View File

@@ -6,7 +6,7 @@ footgun without trampling dirty work-trees or auto-merging.
## When it triggers ## When it triggers
- **Session start** — when `CLAUDE.md` contains the line `pull remote before work` (added by `project-bootstrap` v1.4.0+). - **Session start** — when `AGENTS.md` contains the line `pull remote before work` (added by `project-bootstrap` v2.0.0+).
- **In-chat** — when the user says `sync`, `resync`, `pull`, `обнови репо`, `git pull please`, or close variants. - **In-chat** — when the user says `sync`, `resync`, `pull`, `обнови репо`, `git pull please`, or close variants.
Stays silent in non-git folders. Prints one informational line and exits in: Stays silent in non-git folders. Prints one informational line and exits in:
@@ -25,5 +25,5 @@ remote, so it's safe to leave activated everywhere.
## Related ## Related
- `project-bootstrap` (v1.4.0+) — adds the trigger line to new and existing projects' `CLAUDE.md`. - `project-bootstrap` (v2.0.0+) — adds the trigger line to new and existing projects' `AGENTS.md`.
- `.wiki/concepts/pulling-before-work-design.md` (in projects bootstrapped from this repo: this design lives in `skills`) — full design rationale. - `.wiki/concepts/pulling-before-work-design.md` (in projects bootstrapped from this repo: this design lives in `skills`) — full design rationale.

View File

@@ -1,17 +1,17 @@
--- ---
name: pulling-before-work name: pulling-before-work
author: ours author: ours
version: 1.0.0 version: 1.0.1
description: > description: >
Pulls the current branch from origin once at session start and on explicit Pulls the current branch from origin once at session start and on explicit
re-sync requests. Use when CLAUDE.md contains the trigger line "pull remote re-sync requests. Use when AGENTS.md contains the trigger line "pull remote
before work", or when the user says "sync", "resync", "pull", "обнови репо", before work", or when the user says "sync", "resync", "pull", "обнови репо",
"git pull please", or close variants asking to refresh from the remote. "git pull please", or close variants asking to refresh from the remote.
Runs `git pull --ff-only` — never auto-merges or rebases. Stays silent in Runs `git pull --ff-only` — never auto-merges or rebases. Stays silent in
non-git folders. Prints one informational line and exits when there is no non-git folders. Prints one informational line and exits when there is no
origin remote, no upstream tracking, the working tree is dirty, or HEAD is origin remote, no upstream tracking, the working tree is dirty, or HEAD is
detached. Does not stash, commit, or push. Activated by `project-bootstrap` detached. Does not stash, commit, or push. Activated by `project-bootstrap`
v1.4.0+ via the canonical CLAUDE.md template. v1.4.0+ via the canonical AGENTS.md template.
--- ---
# pulling-before-work # pulling-before-work
@@ -20,7 +20,7 @@ description: >
## When this runs ## When this runs
**At session start** — once, when the skill is activated by the `pull remote before work` line in `CLAUDE.md`. The cycle below runs immediately. **At session start** — once, when the skill is activated by the `pull remote before work` line in `AGENTS.md`. The cycle below runs immediately.
**On explicit re-sync** — when the user says any of: `sync`, `resync`, `pull`, `обнови репо`, `pull please`, `git pull`, `подтяни`, `pull from origin`. Re-runs the full cycle. There is no per-session counter; the user is always allowed to ask. **On explicit re-sync** — when the user says any of: `sync`, `resync`, `pull`, `обнови репо`, `pull please`, `git pull`, `подтяни`, `pull from origin`. Re-runs the full cycle. There is no per-session counter; the user is always allowed to ask.

View File

@@ -24,7 +24,7 @@ bash scripts/install.sh recommend-dont-menu
## Trigger line ## Trigger line
Add to `CLAUDE.md`: Add to `AGENTS.md`:
``` ```
prefer single recommendations prefer single recommendations
``` ```

View File

@@ -1,7 +1,7 @@
--- ---
name: recommend-dont-menu name: recommend-dont-menu
author: ours author: ours
version: 0.1.1 version: 0.1.2
description: > description: >
Use during design discussions, brainstorming, architecture reviews, or any Use during design discussions, brainstorming, architecture reviews, or any
"what should we do" question — give one argued recommendation with explicit "what should we do" question — give one argued recommendation with explicit
@@ -15,7 +15,7 @@ description: >
## When this runs ## When this runs
**At session start** — when `CLAUDE.md` contains any trigger line: **At session start** — when `AGENTS.md` contains any trigger line:
- `prefer single recommendations` - `prefer single recommendations`
- `recommend, don't menu` - `recommend, don't menu`
- `argued recommendations` - `argued recommendations`

View File

@@ -1,7 +1,7 @@
--- ---
name: review-kit-pi-method name: review-kit-pi-method
author: ours author: ours
version: 0.1.0 version: 0.1.1
description: > description: >
Spawn clean-context non-implementer subagents for review, trigger-testing, Spawn clean-context non-implementer subagents for review, trigger-testing,
and spec validation under pi — the pi-native port of the review-kit method. and spec validation under pi — the pi-native port of the review-kit method.
@@ -36,7 +36,7 @@ pi -p -nc -ns -nt --no-session "<question>"
| `--no-session` | ephemeral, nothing persisted | | `--no-session` | ephemeral, nothing persisted |
Verified live (pi v0.84.1): with `-nc -ns -nt` the subagent reports "no Verified live (pi v0.84.1): with `-nc -ns -nt` the subagent reports "no
project-specific instructions" and cannot recite CLAUDE.md rules; without the project-specific instructions" and cannot recite AGENTS.md rules; without the
flags it can quote them verbatim. The difference is the anti-priming flags it can quote them verbatim. The difference is the anti-priming
guarantee: **the review verdict is not contaminated by the reviewer knowing guarantee: **the review verdict is not contaminated by the reviewer knowing
what the implementer intended.** what the implementer intended.**
@@ -51,7 +51,7 @@ Before trusting a verdict, confirm the spawn was clean:
- [ ] `--no-session` — no session bleed - [ ] `--no-session` — no session bleed
- [ ] The question does NOT name the expected answer, the skill name being - [ ] The question does NOT name the expected answer, the skill name being
tested, or the files to read (naming them re-primes: e.g. "what does tested, or the files to read (naming them re-primes: e.g. "what does
CLAUDE.md say about X" makes the subagent read it via tools — only AGENTS.md say about X" makes the subagent read it via tools — only
`-nt` blocks that, keep it) `-nt` blocks that, keep it)
## Prompting rules ## Prompting rules
@@ -75,7 +75,7 @@ Before trusting a verdict, confirm the spawn was clean:
| Trigger discrimination (skill activation) | clean `-nc -ns -nt` | | Trigger discrimination (skill activation) | clean `-nc -ns -nt` |
| Skill/code review by non-implementer | clean `-nc -ns -nt`, plus the review scope in the prompt (what to check, NOT the expected verdict) | | Skill/code review by non-implementer | clean `-nc -ns -nt`, plus the review scope in the prompt (what to check, NOT the expected verdict) |
| Spec validation (loop-me criterion) | clean `-nc -ns -nt`, prompt = "given this spec, what would you need to ask before building it?" — any question ⇒ spec not done | | Spec validation (loop-me criterion) | clean `-nc -ns -nt`, prompt = "given this spec, what would you need to ask before building it?" — any question ⇒ spec not done |
| Context-aware review (reviewer needs project conventions) | WITHOUT `-nc` (let it read CLAUDE.md), but still `-ns -nt --no-session`, and prompt from a neutral third-person role ("a senior engineer reviewing this change") | | Context-aware review (reviewer needs project conventions) | WITHOUT `-nc` (let it read AGENTS.md / CLAUDE.md), but still `-ns -nt --no-session`, and prompt from a neutral third-person role ("a senior engineer reviewing this change") |
## Pitfalls ## Pitfalls

View File

@@ -1,8 +1,8 @@
--- ---
name: session-handoff name: session-handoff
author: ours author: ours
version: 0.5.0 version: 0.5.1
description: "Sliding handoff between CC sessions via .tasks/NEXT_SESSION.md. Read on session start: orient agent, ask user before action. Write on session-end phrase or substantive commit. On session-end the agent ALSO runs the closing ritual on its own (idea 7: no invitation needed): handoff write + PROPOSE wiki-ingest of session knowledge + PROPOSE task-board closes — mutations only after user confirmation. Session-end phrases: «завершаем сессию», «сворачиваемся», «закругляемся», «wrap up session», «end session», «we're done for now». Trigger-line in CLAUDE.md: `session handoff: read on start, write on end`. Skip task-zone phrases: «закрываем эту таску», «pause», «отбой», «разбегаемся»." description: "Sliding handoff between CC sessions via .tasks/NEXT_SESSION.md. Read on session start: orient agent, ask user before action. Write on session-end phrase or substantive commit. On session-end the agent ALSO runs the closing ritual on its own (idea 7: no invitation needed): handoff write + PROPOSE wiki-ingest of session knowledge + PROPOSE task-board closes — mutations only after user confirmation. Session-end phrases: «завершаем сессию», «сворачиваемся», «закругляемся», «wrap up session», «end session», «we're done for now». Trigger-line in AGENTS.md: `session handoff: read on start, write on end`. Skip task-zone phrases: «закрываем эту таску», «pause», «отбой», «разбегаемся»."
--- ---
# session-handoff # session-handoff
@@ -16,7 +16,7 @@ Forward-looking, не timeline: handoff = связка новых вещей к
## When to use ## When to use
**Read mode (session start):** **Read mode (session start):**
- CLAUDE.md проекта содержит trigger-строку `session handoff: read on start, write on end`. - AGENTS.md проекта содержит trigger-строку `session handoff: read on start, write on end`.
- Файл `.tasks/NEXT_SESSION.md` существует. - Файл `.tasks/NEXT_SESSION.md` существует.
**Write mode (session end / substantive commit):** **Write mode (session end / substantive commit):**
@@ -35,7 +35,7 @@ Forward-looking, не timeline: handoff = связка новых вещей к
- «отбой», «разбегаемся» — слишком broad, может относиться к другому контексту. - «отбой», «разбегаемся» — слишком broad, может относиться к другому контексту.
- «сейчас завершу одну задачу и тогда поговорим» — частичное завершение. - «сейчас завершу одну задачу и тогда поговорим» — частичное завершение.
- Не-git папка, или `.tasks/` отсутствует — silent exit. - Не-git папка, или `.tasks/` отсутствует — silent exit.
- CLAUDE.md проекта НЕ содержит trigger-строку — silent exit. - AGENTS.md проекта НЕ содержит trigger-строку — silent exit.
При неоднозначности — **ASK**, не угадывать: «закрываем сессию или таску?» При неоднозначности — **ASK**, не угадывать: «закрываем сессию или таску?»
@@ -125,7 +125,7 @@ Forward-looking, не timeline: handoff = связка новых вещей к
## Failure modes ## Failure modes
- **CLAUDE.md без trigger-строки** → silent exit, не вмешиваться. Скил project-opt-in. - **AGENTS.md без trigger-строки** → silent exit, не вмешиваться. Скил project-opt-in.
- **Не git-repo / `.tasks/` отсутствует** → silent exit. Скил требует обоих условий. - **Не git-repo / `.tasks/` отсутствует** → silent exit. Скил требует обоих условий.
- **`.tasks/NEXT_SESSION.md` отсутствует** в read mode → silent exit (первая сессия проекта, нечего читать). - **`.tasks/NEXT_SESSION.md` отсутствует** в read mode → silent exit (первая сессия проекта, нечего читать).
- **Неоднозначная фраза** («закругляемся» в контексте отдельной таски, а не сессии) → ASK user'а «закрываем сессию или таску?», не угадывать. - **Неоднозначная фраза** («закругляемся» в контексте отдельной таски, а не сессии) → ASK user'а «закрываем сессию или таску?», не угадывать.

View File

@@ -1,7 +1,7 @@
--- ---
name: session-inbox-monitor name: session-inbox-monitor
author: ours author: ours
version: 0.4.0 version: 0.4.1
description: > description: >
Raises a persistent Monitor (Monitor tool, NOT background Bash) on the Raises a persistent Monitor (Monitor tool, NOT background Bash) on the
project's `.agents/inbox/` at the start of an interactive session, so project's `.agents/inbox/` at the start of an interactive session, so
@@ -9,7 +9,7 @@ description: >
session end on its own. A paired SessionStart hook injects the session end on its own. A paired SessionStart hook injects the
raise-instruction and first sweeps orphaned monitors of this inbox (a raise-instruction and first sweeps orphaned monitors of this inbox (a
`/clear` leaves them running → re-raise would stack duplicates). Triggers: `/clear` leaves them running → re-raise would stack duplicates). Triggers:
CLAUDE.md line `inbox monitor: raise on start`, or «подними монитор почты», AGENTS.md line `inbox monitor: raise on start`, or «подними монитор почты»,
«настрой авто-монитор инбокса», «raise inbox monitor», «auto-arm inbox «настрой авто-монитор инбокса», «raise inbox monitor», «auto-arm inbox
watcher». Headless (`claude -p`): does NOT raise — Monitor doesn't work watcher». Headless (`claude -p`): does NOT raise — Monitor doesn't work
there; rely on the Stop-hook inbox pickup + Notify/ntfy. Pi (pi-coding-agent) there; rely on the Stop-hook inbox pickup + Notify/ntfy. Pi (pi-coding-agent)
@@ -33,7 +33,7 @@ for free on session end. Headless sessions skip it and rely on the pull-model
instruction at the start of every interactive session of an opted-in project. instruction at the start of every interactive session of an opted-in project.
You act on that injection — raise the monitor as your first action — without a You act on that injection — raise the monitor as your first action — without a
user phrase. user phrase.
- **On request.** CLAUDE.md line `inbox monitor: raise on start`, or «подними - **On request.** AGENTS.md line `inbox monitor: raise on start`, or «подними
монитор почты», «настрой авто-монитор инбокса», «raise inbox monitor», монитор почты», «настрой авто-монитор инбокса», «raise inbox monitor»,
«auto-arm inbox watcher». «auto-arm inbox watcher».
- **NOT for** handling the content of a received message (→ - **NOT for** handling the content of a received message (→
@@ -84,7 +84,7 @@ for free on session end. Headless sessions skip it and rely on the pull-model
``` ```
- Twin pattern: `poller-interactive-lock-writer` (`interactive-lock.ps1`). - Twin pattern: `poller-interactive-lock-writer` (`interactive-lock.ps1`).
- Opt-in per project: the hook fires only when the project has a `.agents/inbox/` - Opt-in per project: the hook fires only when the project has a `.agents/inbox/`
directory **or** a CLAUDE.md line `inbox monitor: raise on start`. directory **or** an AGENTS.md line `inbox monitor: raise on start`.
## Failure modes ## Failure modes
@@ -144,7 +144,7 @@ capability, but each session only ever touches its own project's inbox.
directory), hot-reload with `/reload`. Test: directory), hot-reload with `/reload`. Test:
`node --experimental-strip-types .common/lib/pi-extensions/inbox-monitor.test.mjs` `node --experimental-strip-types .common/lib/pi-extensions/inbox-monitor.test.mjs`
(incl. decoy check — another project's inbox is never touched). (incl. decoy check — another project's inbox is never touched).
- **Opt-in per project** — same as CC: `.agents/inbox/` dir exists OR CLAUDE.md - **Opt-in per project** — same as CC: `.agents/inbox/` dir exists OR AGENTS.md
line `inbox monitor: raise on start`. line `inbox monitor: raise on start`.
- **PUSH:** 15s poll of the session's own inbox (interactive only). **PULL:** - **PUSH:** 15s poll of the session's own inbox (interactive only). **PULL:**
`agent_settled` sweep — the pi equivalent of the CC Stop-hook pickup. Both `agent_settled` sweep — the pi equivalent of the CC Stop-hook pickup. Both

View File

@@ -1,7 +1,7 @@
--- ---
name: setup-interns name: setup-interns
author: ours author: ours
version: 0.4.0 version: 0.4.1
description: Installs and configures the local `interns` MCP server — clones the repo to `~/projects/.common/lib/interns-mcp/` (or uses an existing clone), `pip install -e` it, writes `~/.config/projects-secrets/interns.env` with endpoint API keys, and registers `mcpServers.interns` in `~/.claude.json`. Use this skill when the user says "install interns", "set up interns", "configure interns", "настрой интернов", "установи интернов", "interns не работает", "interns isn't working", or whenever the `mcp__interns__*` tools are missing in a session that needs delegation. Cross-platform — Windows / Linux / macOS. Mutates user-level config and writes secrets; pauses for confirmation before every write. description: Installs and configures the local `interns` MCP server — clones the repo to `~/projects/.common/lib/interns-mcp/` (or uses an existing clone), `pip install -e` it, writes `~/.config/projects-secrets/interns.env` with endpoint API keys, and registers `mcpServers.interns` in `~/.claude.json`. Use this skill when the user says "install interns", "set up interns", "configure interns", "настрой интернов", "установи интернов", "interns не работает", "interns isn't working", or whenever the `mcp__interns__*` tools are missing in a session that needs delegation. Cross-platform — Windows / Linux / macOS. Mutates user-level config and writes secrets; pauses for confirmation before every write.
--- ---
@@ -205,7 +205,7 @@ After restart:
• Backups saved at ~/.claude.json.bak-<ts> (and interns.env.bak-<ts> • Backups saved at ~/.claude.json.bak-<ts> (and interns.env.bak-<ts>
if it existed before) if it existed before)
Runtime policy lives in `using-interns`. CLAUDE.md trigger: Runtime policy lives in `using-interns`. AGENTS.md trigger:
delegate to interns when allowed delegate to interns when allowed
project-bootstrap 1.6.0+ adds it to new projects automatically. project-bootstrap 1.6.0+ adds it to new projects automatically.

View File

@@ -1,7 +1,7 @@
--- ---
name: tdd-criteria name: tdd-criteria
author: ours author: ours
version: 0.3.0 version: 0.3.1
description: > description: >
TDD by default with four bright-line carve-outs. Applies before any code TDD by default with four bright-line carve-outs. Applies before any code
change. Triggers: "TDD", "test-driven", "следуй TDD", "use TDD", change. Triggers: "TDD", "test-driven", "следуй TDD", "use TDD",
@@ -16,7 +16,7 @@ description: >
## When this runs ## When this runs
**At session start** — when `CLAUDE.md` contains the line `follow tdd-criteria`. **At session start** — when `AGENTS.md` contains the line `follow tdd-criteria`.
**Before any code change** — touching a `*.ts`, `*.js`, `*.py`, `*.go`, `*.rs`, `*.java`, `*.rb`, `*.ex`, `*.swift`, `*.kt`, `*.cs`, `*.php`, or similar source file triggers the decision algorithm below. **Before any code change** — touching a `*.ts`, `*.js`, `*.py`, `*.go`, `*.rs`, `*.java`, `*.rb`, `*.ex`, `*.swift`, `*.kt`, `*.cs`, `*.php`, or similar source file triggers the decision algorithm below.
@@ -100,7 +100,7 @@ Pure policy — no agent-specific tool references in this body. Works on Claude,
## Out of scope ## Out of scope
- Does not enforce via git hooks (separate optional task: `tdd-criteria-precommit-hook`). - Does not enforce via git hooks (separate optional task: `tdd-criteria-precommit-hook`).
- Does not modify project `CLAUDE.md` (that's `project-bootstrap`'s job). - Does not modify project `AGENTS.md` (that's `project-bootstrap`'s job).
- Does not run tests. - Does not run tests.
- Does not apply rule 4 retroactively to tests written before the rule was adopted. - Does not apply rule 4 retroactively to tests written before the rule was adopted.

View File

@@ -8,7 +8,7 @@ Full design: `.wiki/concepts/interns-design.md` (in this repo) — Layer 1 / 2 /
## When it triggers ## When it triggers
- CLAUDE.md contains `delegate to interns when allowed` (added by `project-bootstrap` 1.6.0+). - AGENTS.md contains `delegate to interns when allowed` (added by `project-bootstrap` 2.0.0+).
- User says: "use interns", "delegate to an intern", "разреши интернов", "allow interns", "go ahead with interns". - User says: "use interns", "delegate to an intern", "разреши интернов", "allow interns", "go ahead with interns".
- Claude is about to read 3+ files, or one file > 400 lines, just to build context. - Claude is about to read 3+ files, or one file > 400 lines, just to build context.
- Claude is about to update `.wiki/log.md` or write a session summary from a long transcript. - Claude is about to update `.wiki/log.md` or write a session summary from a long transcript.

View File

@@ -1,12 +1,12 @@
--- ---
name: using-interns name: using-interns
author: ours author: ours
version: 0.3.1 version: 0.3.2
description: > description: >
Use when delegating predictable bulk reads or summarization to cheap intern LLMs via the l Use when delegating predictable bulk reads or summarization to cheap intern LLMs via the l
ocal `interns` MCP server (`mcp__interns__bulk_text_read`, `mcp__interns__transcript_disti ocal `interns` MCP server (`mcp__interns__bulk_text_read`, `mcp__interns__transcript_disti
ll`, etc.) so the main agent saves quota. Activated by `delegate to interns when allowed` ll`, etc.) so the main agent saves quota. Activated by `delegate to interns when allowed`
in CLAUDE.md or explicit phrases: «разреши интернов», "use interns", "allow interns". Also in AGENTS.md or explicit phrases: «разреши интернов», "use interns", "allow interns". Also
activates proactively when about to read 3+ files for context, a single file >400 lines, activates proactively when about to read 3+ files for context, a single file >400 lines,
or distill a long transcript — surface the offer «знаю, что есть интерны — заюзать?» first or distill a long transcript — surface the offer «знаю, что есть интерны — заюзать?» first
. Per-session grant mirrors project-discipline Rule 4: ask-mode default, always-ask for `. . Per-session grant mirrors project-discipline Rule 4: ask-mode default, always-ask for `.
@@ -27,7 +27,7 @@ The catalog:
| `mcp__interns__bulk_text_read` | Reads N files end-to-end and answers a focused question with file:line citations. | Claude was about to read 3+ files or one file > 400 lines just to extract context. | | `mcp__interns__bulk_text_read` | Reads N files end-to-end and answers a focused question with file:line citations. | Claude was about to read 3+ files or one file > 400 lines just to extract context. |
| `mcp__interns__transcript_distill` | Compresses a session transcript / log into a structured action list (decisions / open questions / next steps). | Before updating `.wiki/log.md` or producing a session summary. | | `mcp__interns__transcript_distill` | Compresses a session transcript / log into a structured action list (decisions / open questions / next steps). | Before updating `.wiki/log.md` or producing a session summary. |
| `mcp__interns__repo_read` | Packs a directory/repo via `repomix` and answers a focused question about the codebase. | Whole-repo or whole-directory questions — architecture, "where is X used", "what does module Y do". See Routing hints for `repo_read` vs `bulk_text_read`. | | `mcp__interns__repo_read` | Packs a directory/repo via `repomix` and answers a focused question about the codebase. | Whole-repo or whole-directory questions — architecture, "where is X used", "what does module Y do". See Routing hints for `repo_read` vs `bulk_text_read`. |
| `mcp__interns__grep_audit` | Deterministic grep matrix over N paths × M patterns. **No LLM call, no endpoint cost.** Returns ✅/❌/⚠️ table or JSON. | Contains/not-contains audits — checking a set of CLAUDE.md / SKILL.md / frontmatter files for canonical strings. See Routing hints for `grep_audit` vs `bulk_text_read`. | | `mcp__interns__grep_audit` | Deterministic grep matrix over N paths × M patterns. **No LLM call, no endpoint cost.** Returns ✅/❌/⚠️ table or JSON. | Contains/not-contains audits — checking a set of AGENTS.md / CLAUDE.md / SKILL.md / frontmatter files for canonical strings. See Routing hints for `grep_audit` vs `bulk_text_read`. |
LLM-backed interns currently run on Ollama Cloud (`deepseek-v4-flash`, ~$0.002 / call). `grep_audit` is the catalog's first LLM-free intern — zero cost, zero hallucination boundary. Adding a new intern is a config-only change — see `.wiki/concepts/interns-design.md` § "Как добавить нового интерна". LLM-backed interns currently run on Ollama Cloud (`deepseek-v4-flash`, ~$0.002 / call). `grep_audit` is the catalog's first LLM-free intern — zero cost, zero hallucination boundary. Adding a new intern is a config-only change — see `.wiki/concepts/interns-design.md` § "Как добавить нового интерна".
@@ -142,7 +142,7 @@ Any call with estimated cost > $0.10 (per the `tokens × price_per_M` config in
| Don't delegate editing or debugging a specific file to `repo_read` | Read the file yourself. `repo_read` is for comprehension, not modification. | | Don't delegate editing or debugging a specific file to `repo_read` | Read the file yourself. `repo_read` is for comprehension, not modification. |
| Updating `.wiki/log.md` or session-summary doc | `transcript_distill` | | Updating `.wiki/log.md` or session-summary doc | `transcript_distill` |
| Compressing a long brainstorm transcript before quoting in a design doc | `transcript_distill` | | Compressing a long brainstorm transcript before quoting in a design doc | `transcript_distill` |
| Audit N paths × M patterns (contains/not-contains matrix — checking CLAUDE.md / SKILL.md / frontmatter for canonical strings) | `grep_audit` — deterministic, no LLM call, zero cost, zero hallucination boundary | | Audit N paths × M patterns (contains/not-contains matrix — checking AGENTS.md / CLAUDE.md / SKILL.md / frontmatter for canonical strings) | `grep_audit` — deterministic, no LLM call, zero cost, zero hallucination boundary |
| `bulk_text_read` vs `grep_audit` | `bulk_text_read` is Q&A with an LLM over files; `grep_audit` is deterministic contains/not-contains. Semantic match (paraphrase, intent) → `bulk_text_read` with a question, not `grep_audit`. | | `bulk_text_read` vs `grep_audit` | `bulk_text_read` is Q&A with an LLM over files; `grep_audit` is deterministic contains/not-contains. Semantic match (paraphrase, intent) → `bulk_text_read` with a question, not `grep_audit`. |
| Always-ask paths apply uniformly to `grep_audit` | The server still opens the file even without an LLM call — no special "safe intern" carve-out. Same `.env` / secrets / keys / SSH gate as the LLM-backed interns. | | Always-ask paths apply uniformly to `grep_audit` | The server still opens the file even without an LLM call — no special "safe intern" carve-out. Same `.env` / secrets / keys / SSH gate as the LLM-backed interns. |
| (Future interns in `config.yaml`) | per the description in the catalog | | (Future interns in `config.yaml`) | per the description in the catalog |

View File

@@ -1,7 +1,7 @@
--- ---
name: writing-skills name: writing-skills
adapted-from: obra/superpowers @ 6.2.0 (MIT) — TDD-for-skills core; ideya 8 self-skill-authoring (workshop record) adapted-from: obra/superpowers @ 6.2.0 (MIT) — TDD-for-skills core; ideya 8 self-skill-authoring (workshop record)
version: 0.1.0 version: 0.1.1
description: > description: >
Authoring agent skills TDD-style — RED-GREEN-REFACTOR applied to SKILL.md Authoring agent skills TDD-style — RED-GREEN-REFACTOR applied to SKILL.md
documents. Use when creating a new skill, editing an existing one, or documents. Use when creating a new skill, editing an existing one, or
@@ -37,7 +37,7 @@ any self-authoring trigger, FIRST check for a double/coverage:
1. Does a skill already exist that covers this? (catalog + adapted-from 1. Does a skill already exist that covers this? (catalog + adapted-from
sources: mattpocock/skills, obra/superpowers, vendor skills) sources: mattpocock/skills, obra/superpowers, vendor skills)
2. Should this be a **new skill**, an **extension of an existing one**, a 2. Should this be a **new skill**, an **extension of an existing one**, a
**rule in CLAUDE.md**, or **nothing** (one-off coincidence)? **rule in AGENTS.md**, or **nothing** (one-off coincidence)?
Only proceed to the TDD cycle if the answer is genuinely "new skill". If the Only proceed to the TDD cycle if the answer is genuinely "new skill". If the
pattern is project-specific, it belongs in the project's `.agents/skills/` pattern is project-specific, it belongs in the project's `.agents/skills/`