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:
@@ -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)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
BIN
dist/caveman-compress.skill
vendored
BIN
dist/caveman-compress.skill
vendored
Binary file not shown.
BIN
dist/code-review.skill
vendored
BIN
dist/code-review.skill
vendored
Binary file not shown.
BIN
dist/delegate-task.skill
vendored
BIN
dist/delegate-task.skill
vendored
Binary file not shown.
BIN
dist/inter-session-peer-discipline.skill
vendored
BIN
dist/inter-session-peer-discipline.skill
vendored
Binary file not shown.
BIN
dist/private-dev-public-publish.skill
vendored
BIN
dist/private-dev-public-publish.skill
vendored
Binary file not shown.
BIN
dist/project-bootstrap.skill
vendored
BIN
dist/project-bootstrap.skill
vendored
Binary file not shown.
BIN
dist/project-discipline.skill
vendored
BIN
dist/project-discipline.skill
vendored
Binary file not shown.
BIN
dist/pulling-before-work.skill
vendored
BIN
dist/pulling-before-work.skill
vendored
Binary file not shown.
BIN
dist/recommend-dont-menu.skill
vendored
BIN
dist/recommend-dont-menu.skill
vendored
Binary file not shown.
BIN
dist/review-kit-pi-method.skill
vendored
BIN
dist/review-kit-pi-method.skill
vendored
Binary file not shown.
BIN
dist/session-handoff.skill
vendored
BIN
dist/session-handoff.skill
vendored
Binary file not shown.
BIN
dist/session-inbox-monitor.skill
vendored
BIN
dist/session-inbox-monitor.skill
vendored
Binary file not shown.
BIN
dist/setup-interns.skill
vendored
BIN
dist/setup-interns.skill
vendored
Binary file not shown.
BIN
dist/tdd-criteria.skill
vendored
BIN
dist/tdd-criteria.skill
vendored
Binary file not shown.
BIN
dist/using-interns.skill
vendored
BIN
dist/using-interns.skill
vendored
Binary file not shown.
BIN
dist/writing-skills.skill
vendored
BIN
dist/writing-skills.skill
vendored
Binary file not shown.
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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_,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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 1–5.** Create or skip each piece in order — git, README, `.wiki/`,
|
3. **Steps 1–5.** 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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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`).
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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`
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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'а «закрываем сессию или таску?», не угадывать.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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 |
|
||||||
|
|||||||
@@ -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/`
|
||||||
|
|||||||
Reference in New Issue
Block a user