@sabaiway/agent-workflow-kit 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +19 -11
- package/SKILL.md +29 -28
- package/bin/install.mjs +5 -5
- package/launchers/README.md +2 -2
- package/launchers/install-launchers.sh +10 -8
- package/launchers/windsurf-workflow.md +1 -1
- package/migrations/1.2.0-agent-attribution.md +57 -0
- package/package.json +14 -3
- package/references/contracts.md +62 -0
- package/references/templates/AGENTS.md +10 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@ Semantically versioned ([semver](https://semver.org)), newest first. The `versio
|
|
|
4
4
|
is the current release. `upgrade` mode reads a project's `docs/ai/.workflow-version` and applies
|
|
5
5
|
every `migrations/<version>-<slug>.md` newer than it, in semver order.
|
|
6
6
|
|
|
7
|
+
## 1.3.0 — Skill authoring aligned with Anthropic's Skills guidance
|
|
8
|
+
|
|
9
|
+
Internal refinements to how the kernel itself is written — no change to what gets deployed into a
|
|
10
|
+
project, so **no migration is needed** (`upgrade` reconciles and re-stamps to `1.3.0` with nothing
|
|
11
|
+
to apply). Drawn from [*Lessons from building Claude Code: how we use Skills*](https://claude.com/blog/lessons-from-building-claude-code-how-we-use-skills).
|
|
12
|
+
|
|
13
|
+
- **Consolidated Gotchas section in `SKILL.md`** — the blog calls the Gotchas section "the highest-signal content in any skill". The non-obvious traps that were scattered through the procedure (harness-added `Co-Authored-By` vs prose, hidden mode never touching `package.json`, `CLAUDE.md` as a symlink not a copy, source-vs-target dir, no-Node → skip enforcement, never overwrite an existing entry point/hook) are now also a single scannable list.
|
|
14
|
+
- **Setup contracts moved to `references/contracts.md`** — progressive disclosure: `SKILL.md` keeps a lean *Setup contracts* pointer (with one-line defaults), and the full Visibility / Communication / Attribution rules load only when needed. Trims the always-loaded `SKILL.md` by ~40 lines without losing any rule.
|
|
15
|
+
- **Setup questions use structured prompts where supported** — the three bootstrap questions (visibility, language, attribution) and the equivalent `upgrade` migration questions now call for a structured multiple-choice prompt (`AskUserQuestion` in Claude Code) where the agent supports it, falling back to prose elsewhere — keeping cross-agent portability (Codex / Cursor / Devin) intact.
|
|
16
|
+
|
|
17
|
+
## 1.2.0 — Agent attribution is opt-in
|
|
18
|
+
|
|
19
|
+
**Attribution question at setup**
|
|
20
|
+
|
|
21
|
+
- **Bootstrap now asks whether the agent may attribute work to itself / AI** — a new step 4 in `/agent-workflow-kit`, alongside the visibility and language questions. The answer is recorded in a new *Attribution* block in the project's `AGENTS.md`, so every agent that reads the entry point honours it.
|
|
22
|
+
- **Default is `off`** — people are routinely surprised to find an AI listed as a repo contributor (a single `Co-Authored-By` trailer is enough to do it, and GitHub keeps it via permanent PR refs). So attribution is **opt-in**, never opt-out.
|
|
23
|
+
- **`off` means nowhere** — no `Co-Authored-By` trailers, no "Generated with …" footers, and no AI/agent/model mentions in code, comments, commit messages, PR titles/bodies, branch names, or docs. The work reads as the human author's.
|
|
24
|
+
- **Two enforcement layers** — the *Attribution* block binds everything an agent writes by hand; the automatic `Co-Authored-By` trailer is added by the **harness**, so for **Claude Code** the kit also sets `"includeCoAuthoredBy": false` in the project's `.claude/settings.json` (a doc directive alone can't stop a harness-added trailer). See the *Attribution contract* in `SKILL.md`.
|
|
25
|
+
- **Existing deployments are covered** — `/agent-workflow-kit upgrade` backfills the block on a pre-1.2.0 project, asking (and defaulting to `off`). See `migrations/1.2.0-agent-attribution.md` (idempotent, additive).
|
|
26
|
+
|
|
27
|
+
**Devin Desktop rebrand (formerly Windsurf)**
|
|
28
|
+
|
|
29
|
+
- Cognition rebranded Windsurf → **Devin Desktop** (and Cascade → **Devin Local**) on 2026-06-02. Docs, install messages, and labels now say "Devin Desktop"; `windsurf`/`devin` are both kept as keywords. The launcher is unchanged functionally — the `~/.codeium/windsurf/global_workflows/` paths persist, and detection now also recognises a `devin` binary.
|
|
30
|
+
|
|
7
31
|
## 1.1.0 — Conversational language + unambiguous install guidance
|
|
8
32
|
|
|
9
33
|
**Conversational language (dialogue only)**
|
package/README.md
CHANGED
|
@@ -7,7 +7,14 @@
|
|
|
7
7
|
*Bootstrap it once — then every future session reconstructs project context in seconds
|
|
8
8
|
instead of re-reading your whole repo.*
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
[](https://www.npmjs.com/package/@sabaiway/agent-workflow-kit)
|
|
11
|
+
[](https://www.npmjs.com/package/@sabaiway/agent-workflow-kit)
|
|
12
|
+
[](./LICENSE)
|
|
13
|
+
[](https://nodejs.org)
|
|
14
|
+
|
|
15
|
+
`v1.3.0` · `Node ≥ 18` · `kernel-only · English`
|
|
16
|
+
|
|
17
|
+
**Works with any tool that reads `AGENTS.md`** — Claude Code · Codex · Cursor · Devin Desktop (formerly Windsurf) · GitHub Copilot · Gemini CLI · Cline · Aider · and 20+ more.
|
|
11
18
|
|
|
12
19
|
</div>
|
|
13
20
|
|
|
@@ -98,7 +105,7 @@ Two visibility modes, chosen at bootstrap: **visible** (committed) or **hidden**
|
|
|
98
105
|
|
|
99
106
|
## 🚀 Install
|
|
100
107
|
|
|
101
|
-
**One command** installs the kit into `~/.claude/skills/` and wires any Codex /
|
|
108
|
+
**One command** installs the kit into `~/.claude/skills/` and wires any Codex / Devin Desktop you have:
|
|
102
109
|
|
|
103
110
|
```bash
|
|
104
111
|
npx @sabaiway/agent-workflow-kit init
|
|
@@ -110,9 +117,9 @@ Then invoke it **inside a project** — first time vs. already-deployed use diff
|
|
|
110
117
|
|-------|---------------------------|-----------------------------|
|
|
111
118
|
| **Claude Code** | `/agent-workflow-kit` | `/agent-workflow-kit upgrade` |
|
|
112
119
|
| **Codex** | `/skills` menu → `agent-workflow-kit` | …→ `agent-workflow-kit upgrade` |
|
|
113
|
-
| **
|
|
120
|
+
| **Devin Desktop** (Windsurf · Devin Local) | `/agent-workflow-kit` | `/agent-workflow-kit upgrade` |
|
|
114
121
|
|
|
115
|
-
<sub>`/agent-workflow-kit` bootstraps a fresh deployment (and asks your **visibility** and **
|
|
122
|
+
<sub>`/agent-workflow-kit` bootstraps a fresh deployment (and asks your **visibility**, **conversational language**, and whether the agent may **attribute work to itself / AI** — default off); `/agent-workflow-kit upgrade` migrates an existing one to the kit's current version. The `npx … init` above is a third, separate thing — it updates the **kit itself**, not any project.</sub>
|
|
116
123
|
|
|
117
124
|
**Upgrade the kit itself** later — same command with `@latest`:
|
|
118
125
|
|
|
@@ -134,7 +141,7 @@ cd ~/.claude/skills/agent-workflow-kit
|
|
|
134
141
|
bash launchers/install-launchers.sh
|
|
135
142
|
```
|
|
136
143
|
|
|
137
|
-
`install-launchers.sh` auto-detects Codex **and**
|
|
144
|
+
`install-launchers.sh` auto-detects Codex **and** Devin Desktop — it only touches tools you actually
|
|
138
145
|
have. See [`launchers/README.md`](launchers/README.md) for the full matrix (incl. Cursor / any
|
|
139
146
|
other agent). The manual path works identically but **isn't reflected in install stats** — prefer
|
|
140
147
|
`npx` if you don't mind.
|
|
@@ -149,9 +156,9 @@ other agent). The manual path works identically but **isn't reflected in install
|
|
|
149
156
|
|------|------|
|
|
150
157
|
| `~/.claude/skills/agent-workflow-kit/` | the kit itself (refreshed on every `init`) |
|
|
151
158
|
| `~/.codex/skills/agent-workflow-kit` | a symlink — only if you have Codex |
|
|
152
|
-
| `…/global_workflows/agent-workflow-kit.md` | a managed file — only if you have
|
|
159
|
+
| `…/global_workflows/agent-workflow-kit.md` | a managed file — only if you have Devin Desktop |
|
|
153
160
|
|
|
154
|
-
Your other Codex skills and
|
|
161
|
+
Your other Codex skills and Devin Desktop workflows are never touched. If one of those exact slots
|
|
155
162
|
already holds a file the kit didn't write, it is **left alone** and you're told — re-run with
|
|
156
163
|
`--force` to replace it (the original is first copied to `*.bak.<timestamp>` and the restore
|
|
157
164
|
command is printed).
|
|
@@ -165,7 +172,7 @@ command is printed).
|
|
|
165
172
|
|
|
166
173
|
| Command | When | What happens |
|
|
167
174
|
|---------|------|--------------|
|
|
168
|
-
| `/agent-workflow-kit` | new / empty project | recon → **asks visible-or-hidden** + **conversational language** → deploys `AGENTS.md` + `docs/ai/` filled with real recon data → installs enforcement → **asks before committing** |
|
|
175
|
+
| `/agent-workflow-kit` | new / empty project | recon → **asks visible-or-hidden** + **conversational language** + **agent attribution** (default off) → deploys `AGENTS.md` + `docs/ai/` filled with real recon data → installs enforcement → **asks before committing** |
|
|
169
176
|
| `/agent-workflow-kit upgrade` | existing deployment | reads `docs/ai/.workflow-version`, shows the changelog diff, applies migrations, re-stamps |
|
|
170
177
|
|
|
171
178
|
It **never auto-commits** and **never overwrites** an existing `AGENTS.md` without asking.
|
|
@@ -191,8 +198,8 @@ Enforcement ships as dependency-free **Node** scripts (`node --test`, no package
|
|
|
191
198
|
## 🤝 Cross-agent by design
|
|
192
199
|
|
|
193
200
|
One kit, three front doors — the *output* (`AGENTS.md` + `docs/ai/`) is read natively by
|
|
194
|
-
Codex, Cursor,
|
|
195
|
-
Claude Code, Codex, or
|
|
201
|
+
Codex, Cursor, Devin Desktop, Copilot, Gemini CLI & 20+ tools, and the *bootstrapper* runs from
|
|
202
|
+
Claude Code, Codex, or Devin Desktop. No logic is duplicated per tool.
|
|
196
203
|
|
|
197
204
|
---
|
|
198
205
|
|
|
@@ -206,8 +213,9 @@ agent-workflow-kit/
|
|
|
206
213
|
├── references/
|
|
207
214
|
├── templates/ ← AGENTS.md + every docs/ai file
|
|
208
215
|
├── scripts/ ← caps / archive / index + tests
|
|
216
|
+
├── contracts.md ← visibility / language / attribution rules
|
|
209
217
|
└── planning.md ← plan lifecycle + continuity
|
|
210
|
-
├── launchers/ ← Codex /
|
|
218
|
+
├── launchers/ ← Codex / Devin Desktop / Cursor entries
|
|
211
219
|
└── migrations/ ← per-version upgrade steps
|
|
212
220
|
```
|
|
213
221
|
|
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: agent-workflow-kit
|
|
|
3
3
|
description: Deploy or upgrade a portable AI-agent memory-and-workflow system in any project. Use when the user wants to bootstrap `docs/ai/` + an entry-point `AGENTS.md` (+ `CLAUDE.md` alias) + cap/archive/index enforcement in a new or existing repo, set up the Memory Map and session protocols, install the docs-rotation pre-commit hook, or run `/agent-workflow-kit` / `/agent-workflow-kit upgrade`. Triggers on phrases like "set up the memory system", "deploy the AI workflow here", "bootstrap docs/ai", "upgrade the workflow".
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
metadata:
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.3.0'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# agent-workflow-kit
|
|
@@ -29,6 +29,8 @@ Pick the mode from the user's invocation. Auto-detect an existing `docs/ai/` to
|
|
|
29
29
|
|
|
30
30
|
> Bundled sources below (templates, scripts) live in **this skill's own directory** — `${CLAUDE_SKILL_DIR}/` in Claude Code, or the folder containing this `SKILL.md` in Codex / other agents. Use that as the copy/read source; the working directory is the **target project**, not the skill.
|
|
31
31
|
|
|
32
|
+
> The three setup questions (steps 2–4) are decisions only the user can make and are hard to reverse after a commit. Ask each as a **structured multiple-choice prompt where your agent supports it** (`AskUserQuestion` in Claude Code — one option per choice, recommended one first), otherwise in prose — and **wait for the answer before writing anything**.
|
|
33
|
+
|
|
32
34
|
1. **Recon (read-only).** Before writing anything:
|
|
33
35
|
- `package.json` / `pyproject.toml` / `go.mod` / `Cargo.toml` → stack, package manager, scripts.
|
|
34
36
|
- `ls -la` root → `README`, existing `AGENTS.md`/`CLAUDE.md`, CI configs, linter/formatter configs.
|
|
@@ -36,15 +38,16 @@ Pick the mode from the user's invocation. Auto-detect an existing `docs/ai/` to
|
|
|
36
38
|
- `src/` (or equivalent) 2–3 levels deep → modules, routes/pages, components, services, types.
|
|
37
39
|
- Tests (framework, location, E2E?) and linter rules.
|
|
38
40
|
- Record: stack, package manager, daily commands (`dev`/`test`/`lint`/`type-check`), routes/pages, architecture layers.
|
|
39
|
-
2. **Choose visibility — ASK the user explicitly and wait for the answer, before writing anything.** This decides what gets tracked and is hard to reverse after a commit, so never assume the default silently: `visible` (committed — canonical, recommended) or `hidden` (in-tree, hidden via `~/.gitignore_global`). See
|
|
40
|
-
3. **Choose conversational language — ASK the user explicitly and wait for the answer.** Which language should the agent *talk to them* in — questions, explanations, summaries, status updates? Offer the language they're already writing in as the default. Carry the answer into the `{{COMM_LANGUAGE}}` slot of the *Communication language* block when `AGENTS.md` is created (step
|
|
41
|
-
4. **
|
|
42
|
-
5. **
|
|
43
|
-
6. **
|
|
44
|
-
7. **
|
|
45
|
-
8. **
|
|
46
|
-
9. **
|
|
47
|
-
10. **
|
|
41
|
+
2. **Choose visibility — ASK the user explicitly and wait for the answer, before writing anything.** This decides what gets tracked and is hard to reverse after a commit, so never assume the default silently: `visible` (committed — canonical, recommended) or `hidden` (in-tree, hidden via `~/.gitignore_global`). See [Visibility contract](references/contracts.md#visibility-contract).
|
|
42
|
+
3. **Choose conversational language — ASK the user explicitly and wait for the answer.** Which language should the agent *talk to them* in — questions, explanations, summaries, status updates? Offer the language they're already writing in as the default. Carry the answer into the `{{COMM_LANGUAGE}}` slot of the *Communication language* block when `AGENTS.md` is created (step 5). See [Communication contract](references/contracts.md#communication-contract). This sets the **dialogue** language only — never the files.
|
|
43
|
+
4. **Choose agent attribution — ASK the user explicitly and wait for the answer.** May the agent attribute work to itself / to AI — `Co-Authored-By` trailers, "Generated with …" footers, "AI"/agent/model mentions in code, comments, commit messages, PR titles/bodies, or docs? **Default to `off`** (no agent/AI mention anywhere) unless they opt in — people are routinely surprised to find an AI listed as a repo contributor. Carry the answer into the `{{AGENT_ATTRIBUTION}}` slot of the *Attribution* block when `AGENTS.md` is created (step 5). **If `off` and the project uses Claude Code**, also set `"includeCoAuthoredBy": false` in the project's `.claude/settings.json` (create it if absent) — the trailer is added by the harness, so a doc directive alone won't stop it. See [Attribution contract](references/contracts.md#attribution-contract).
|
|
44
|
+
5. **Entry-point doc.** If `AGENTS.md` / `CLAUDE.md` already exist (step-1 recon), do **not** overwrite — show the user and ask whether to merge or replace. Otherwise create `AGENTS.md` (the cross-agent standard — Codex / Cursor / Devin Desktop / Copilot read it natively) from `${CLAUDE_SKILL_DIR}/references/templates/AGENTS.md`, and symlink `CLAUDE.md -> AGENTS.md` (`ln -s AGENTS.md CLAUDE.md`) for Claude Code — single source, no duplication. For nested context, add a subdir `AGENTS.md` (+ a `CLAUDE.md` symlink beside it for Claude Code).
|
|
45
|
+
6. **Deploy `docs/ai/`.** Create the 11 files + `pages/` from `${CLAUDE_SKILL_DIR}/references/templates/`. Keep each file's frontmatter (`type / lastUpdated / scope / staleAfter / owner / maxLines`).
|
|
46
|
+
7. **Fill templates** per the table below.
|
|
47
|
+
8. **Install enforcement (Node projects).** Copy `${CLAUDE_SKILL_DIR}/references/scripts/*.mjs` (+ `*.test.mjs`) into the project's `scripts/`. They self-configure (project name from `package.json`, hierarchical/on-demand sections auto-discovered). **If the project has no Node runtime** (step-1 recon), skip this step and the hook in step 9 — follow the cap/archive/index policy manually, or port the scripts to the project's language.
|
|
48
|
+
9. **Wire / hide** per visibility (see contract). Install the pre-commit hook (Node projects): `node scripts/install-git-hooks.mjs`. If the installer reports a pre-existing non-marker hook, stop and ask the user to merge it manually rather than overwriting.
|
|
49
|
+
10. **Stamp version.** Write the skill's `version` into `docs/ai/.workflow-version` (one semver line).
|
|
50
|
+
11. **Report & ask.** Show `tree docs/ai/`, 2–3 lines on what was filled with real data vs left as TODO, then **ask before committing** — never auto-commit.
|
|
48
51
|
|
|
49
52
|
Fill strategy:
|
|
50
53
|
|
|
@@ -62,33 +65,29 @@ Fill strategy:
|
|
|
62
65
|
2. Compare to this skill's `metadata.version` (frontmatter). If equal → report "up to date" and stop.
|
|
63
66
|
3. Show the relevant `${CLAUDE_SKILL_DIR}/CHANGELOG.md` diff (entries newer than the project's stamp).
|
|
64
67
|
4. Apply `${CLAUDE_SKILL_DIR}/migrations/<version>-<slug>.md` in **semver order**, only those newer than the project's stamp. Migrations are **idempotent** — safe to re-run.
|
|
65
|
-
5. Reconcile drift: add any kernel files/scripts the project is missing; never clobber project-authored content (their `decisions.md`, `known_issues.md`, page specs stay). If `AGENTS.md` has no *Communication language* block (pre-1.1.0 deployment), **ask the user their conversational language** and insert the block — see `migrations/1.1.0-communication-language.md`.
|
|
68
|
+
5. Reconcile drift: add any kernel files/scripts the project is missing; never clobber project-authored content (their `decisions.md`, `known_issues.md`, page specs stay). Any user question a migration raises follows the same rule as bootstrap — **structured multiple-choice where supported** (`AskUserQuestion` in Claude Code), otherwise prose. If `AGENTS.md` has no *Communication language* block (pre-1.1.0 deployment), **ask the user their conversational language** and insert the block — see `migrations/1.1.0-communication-language.md`. If it has no *Attribution* block (pre-1.2.0 deployment), **ask whether the agent may attribute work to itself / AI** and insert the block (defaulting to `off`) — see `migrations/1.2.0-agent-attribution.md`.
|
|
66
69
|
6. Re-stamp `docs/ai/.workflow-version` to the skill's `version`. Report changes; **ask before committing**.
|
|
67
70
|
|
|
68
71
|
---
|
|
69
72
|
|
|
70
|
-
##
|
|
71
|
-
|
|
72
|
-
The user chooses at bootstrap whether the AI artifacts are visible in the repo or hidden — an **explicit up-front question** (step 2), never an assumed default. The two modes then diverge:
|
|
73
|
+
## Gotchas
|
|
73
74
|
|
|
74
|
-
-
|
|
75
|
-
- **hidden** (in-tree) — same files on disk, but the repo "looks normal": append the artifact paths (`AGENTS.md`, `CLAUDE.md`, `docs/ai/`, `docs/plans/`, `scripts/*.mjs` you added, `docs/ai/.workflow-version`) to the global excludes file git **already uses** (`git config --get core.excludesFile`); if none is set, point it at `~/.gitignore_global` (`git config --global core.excludesFile ~/.gitignore_global`) and append there. **Verify `git status` shows the artifacts as ignored** afterwards. **Do not edit `package.json`** — that is a tracked change and would leak; the pre-commit hook (always untracked in `.git/hooks/`) calls the scripts via `node scripts/<x>.mjs` directly.
|
|
75
|
+
The non-obvious traps — scan these before bootstrapping or upgrading. Each is also enforced inline in the procedure above; this is the consolidated high-signal list.
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
- **Source vs target directory.** Templates and scripts are read from the skill's own dir (`${CLAUDE_SKILL_DIR}/` in Claude Code, the `SKILL.md` folder elsewhere). The **working directory is the target project** — never write kernel files back into the skill.
|
|
78
|
+
- **The `Co-Authored-By` trailer is added by the harness, not by prose.** When attribution is `off`, a doc directive alone won't stop it — for Claude Code you **must** also set `"includeCoAuthoredBy": false` in the project's `.claude/settings.json` (create it if absent). Other tools: disable their equivalent co-author/footer setting.
|
|
79
|
+
- **Hidden mode must never touch `package.json`.** Editing it is a *tracked* change and leaks the whole system. Hidden mode wires nothing into `package.json`; the pre-commit hook (untracked in `.git/hooks/`) calls `node scripts/<x>.mjs` directly. After hiding, **verify `git status` shows the artifacts as ignored**.
|
|
80
|
+
- **`CLAUDE.md` is a symlink, not a copy.** `ln -s AGENTS.md CLAUDE.md` — single source, no duplication. A copy drifts; a symlink can't.
|
|
81
|
+
- **Never overwrite an existing entry point or hook.** If `AGENTS.md` / `CLAUDE.md` already exist, or the installer reports a pre-existing non-marker git hook, **stop and ask** the user to merge vs replace — don't clobber.
|
|
82
|
+
- **No Node runtime → skip enforcement.** If the project has no Node (recon step 1), skip bootstrap steps 8–9 (scripts + hook) and follow the cap/archive/index policy manually, or port the scripts to the project's language.
|
|
83
|
+
- **Conversational language never translates artifacts.** It governs *dialogue only*. Code, identifiers, paths, commands, log output, abbreviations, and every deployed `docs/ai/` / `AGENTS.md` file stay English. See [Communication contract](references/contracts.md#communication-contract).
|
|
84
|
+
- **Never auto-commit.** Report quality-gate results and wait for explicit approval — in both modes.
|
|
78
85
|
|
|
79
86
|
---
|
|
80
87
|
|
|
81
|
-
##
|
|
82
|
-
|
|
83
|
-
The user chooses at bootstrap (step 3) which language the agent **talks to them** in. The choice is recorded in the *Communication language* block of the project's `AGENTS.md`, so every agent that reads the entry point honours it — and stops drifting between languages mid-session.
|
|
84
|
-
|
|
85
|
-
Scope — **dialogue only**:
|
|
86
|
-
|
|
87
|
-
- **In the chosen language** — everything the agent produces *for the user to read*: questions, explanations, plan summaries, status updates, commit-message prose if asked, review notes.
|
|
88
|
-
- **Always in their source language (usually English)** — code, identifiers, file paths, shell commands, log/console output, error strings, config keys, and abbreviations/acronyms. Translating these breaks copy-paste, search, and tooling.
|
|
89
|
-
- **Files stay English** — the deployed `docs/ai/` files, `AGENTS.md`, and this kernel are English-only regardless of the chosen language (cross-agent / cross-team portability). The conversational language is about the *chat*, not the *artifacts*.
|
|
88
|
+
## Setup contracts
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
The three setup choices — **visibility** (step 2), **conversational language** (step 3), and **agent attribution** (step 4) — each have a full contract in [`references/contracts.md`](references/contracts.md). Load it when you need the complete rule (e.g. while filling the matching `AGENTS.md` block, or when an `upgrade` migration touches one). Defaults, in brief: visibility = `visible` (committed); language = whatever the user is already writing in; attribution = `off`. Ask each as a structured multiple-choice prompt where supported (`AskUserQuestion` in Claude Code), otherwise in prose.
|
|
92
91
|
|
|
93
92
|
---
|
|
94
93
|
|
|
@@ -105,6 +104,7 @@ Default to the language the user is already writing in; confirm rather than assu
|
|
|
105
104
|
9. **Ask before commit.** The agent reports quality-gate results and waits for explicit approval; it never auto-commits.
|
|
106
105
|
10. **Honest `known_issues.md`.** Every bug with a workaround gets Impact + Plan so it isn't re-discovered later.
|
|
107
106
|
11. **One conversational language.** Talk to the user in the language chosen at bootstrap; keep code, paths, commands, and abbreviations in their source language. See *Communication contract*.
|
|
107
|
+
12. **Attribution is opt-in.** Honour the *Attribution* block: by default no agent/AI/model mention anywhere (commits, PRs, code, comments, docs), and no `Co-Authored-By` trailer. See *Attribution contract*.
|
|
108
108
|
|
|
109
109
|
---
|
|
110
110
|
|
|
@@ -131,9 +131,10 @@ Deploy these into `AGENTS.md`; remove rows that don't apply to the stack.
|
|
|
131
131
|
|
|
132
132
|
## References
|
|
133
133
|
|
|
134
|
+
- [`references/contracts.md`](references/contracts.md) — the three setup contracts (visibility, conversational language, agent attribution) in full; the *Setup contracts* section above points here.
|
|
134
135
|
- [`references/planning.md`](references/planning.md) — plan vocabulary (Plan→Phase→Step→Substep), lifecycle, `queue.md` series-index, mandatory Cleanup, session-continuity heuristic.
|
|
135
136
|
- [`references/templates/`](references/templates/) — stack-agnostic `AGENTS.md`, `agent_rules.md`, and all `docs/ai/` files to deploy.
|
|
136
137
|
- [`references/scripts/`](references/scripts/) — the Node enforcement scripts (caps + staleness + index-freshness gate, 3-tier archive, hook installer) and their unit tests.
|
|
137
138
|
- [`migrations/`](migrations/) — per-version upgrade steps; see `migrations/README.md`.
|
|
138
|
-
- [`launchers/`](launchers/) — run the bootstrapper from non-Claude agents (`SKILL.md` is a native Codex skill; a
|
|
139
|
+
- [`launchers/`](launchers/) — run the bootstrapper from non-Claude agents (`SKILL.md` is a native Codex skill; a Devin Desktop workflow launcher + install script). See `launchers/README.md`.
|
|
139
140
|
- [`CHANGELOG.md`](CHANGELOG.md) — version history of this kernel.
|
package/bin/install.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// npx @sabaiway/agent-workflow-kit init
|
|
5
5
|
//
|
|
6
6
|
// Copies the kit into the canonical skill home (~/.claude/skills/agent-workflow-kit),
|
|
7
|
-
// then runs the cross-agent launcher (auto-detects Codex /
|
|
7
|
+
// then runs the cross-agent launcher (auto-detects Codex / Devin Desktop — only touches tools
|
|
8
8
|
// you actually have). Re-running refreshes the skill to this package's version, which is
|
|
9
9
|
// how you upgrade the *skill files* themselves:
|
|
10
10
|
//
|
|
@@ -85,14 +85,14 @@ Usage:
|
|
|
85
85
|
|
|
86
86
|
Installs/refreshes the kit at ~/.claude/skills/agent-workflow-kit
|
|
87
87
|
(override with --dir <path> or AGENT_WORKFLOW_KIT_DIR), then wires any
|
|
88
|
-
Codex /
|
|
88
|
+
Codex / Devin Desktop you have. --no-launchers skips that wiring; --force replaces a
|
|
89
89
|
pre-existing non-kit launcher file (backed up first). init is additive — it never
|
|
90
90
|
deletes your settings.
|
|
91
91
|
|
|
92
92
|
After install, invoke the skill in your agent, inside a project:
|
|
93
93
|
first time in the project -> /agent-workflow-kit
|
|
94
94
|
project already has it -> /agent-workflow-kit upgrade
|
|
95
|
-
(Claude Code / Codex /
|
|
95
|
+
(Claude Code / Codex / Devin Desktop all use the same /agent-workflow-kit.)
|
|
96
96
|
|
|
97
97
|
Re-running this npx command updates the kit's own files; /agent-workflow-kit
|
|
98
98
|
upgrade then migrates a project's deployment to that version.`);
|
|
@@ -123,14 +123,14 @@ const main = async () => {
|
|
|
123
123
|
// Wire non-Claude agents — best-effort; the launcher only touches tools you have.
|
|
124
124
|
const launcher = resolve(target, 'launchers/install-launchers.sh');
|
|
125
125
|
if (args.noLaunchers) {
|
|
126
|
-
console.log('[agent-workflow-kit] --no-launchers: skipped Codex/
|
|
126
|
+
console.log('[agent-workflow-kit] --no-launchers: skipped Codex/Devin Desktop wiring.');
|
|
127
127
|
} else if (process.platform === 'win32') {
|
|
128
128
|
console.log('[agent-workflow-kit] Windows: skipped POSIX launcher. Claude Code reads the kit natively.');
|
|
129
129
|
} else if (existsSync(launcher)) {
|
|
130
130
|
const launcherArgs = args.force ? [launcher, '--force'] : [launcher];
|
|
131
131
|
const launcherRun = spawnSync('bash', launcherArgs, { stdio: 'inherit' });
|
|
132
132
|
if (launcherRun.status !== 0) {
|
|
133
|
-
console.warn('[agent-workflow-kit] launcher step skipped/failed — run it by hand if you use Codex/
|
|
133
|
+
console.warn('[agent-workflow-kit] launcher step skipped/failed — run it by hand if you use Codex/Devin Desktop:');
|
|
134
134
|
console.warn(` bash ${tildify(launcher)}`);
|
|
135
135
|
}
|
|
136
136
|
}
|
package/launchers/README.md
CHANGED
|
@@ -13,8 +13,8 @@ already — these launchers make the *bootstrapper itself* runnable from non-Cla
|
|
|
13
13
|
|-------|-----------|---------|--------|
|
|
14
14
|
| **Claude Code** | native skill | already at `~/.claude/skills/agent-workflow-kit/` | `/agent-workflow-kit` |
|
|
15
15
|
| **Codex** | native skill (same `SKILL.md` cross-agent standard) | symlink the kit into a Codex skill scope: `ln -sfn <KIT_DIR> ~/.codex/skills/agent-workflow-kit` (or `~/.agents/skills/`) | Codex `/skills` menu → `agent-workflow-kit` |
|
|
16
|
-
| **
|
|
17
|
-
| **Cursor** (bonus) | command/rule | point a `.cursor/commands` entry at `<KIT_DIR>/SKILL.md` (same pattern as the
|
|
16
|
+
| **Devin Desktop** (formerly Windsurf) | workflow (Devin Local / Cascade doesn't read `SKILL.md`) | `sed "s#<KIT_DIR>#$KIT#g" <KIT_DIR>/launchers/windsurf-workflow.md > ~/.codeium/windsurf/global_workflows/agent-workflow-kit.md` | `/agent-workflow-kit` in Devin Local |
|
|
17
|
+
| **Cursor** (bonus) | command/rule | point a `.cursor/commands` entry at `<KIT_DIR>/SKILL.md` (same pattern as the Devin Desktop launcher) | the command name |
|
|
18
18
|
| **Any other** | manual | tell the agent: "execute the bootstrap in `<KIT_DIR>/SKILL.md`" | — |
|
|
19
19
|
|
|
20
20
|
Or run [`install-launchers.sh`](install-launchers.sh) — it auto-detects which of these tools
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# - Writes only the kit's OWN namespaced slots:
|
|
7
7
|
# ~/.codex/skills/agent-workflow-kit (a symlink)
|
|
8
8
|
# ~/.codeium/.../global_workflows/agent-workflow-kit.md (a managed file)
|
|
9
|
-
# - NEVER touches your other Codex skills or
|
|
9
|
+
# - NEVER touches your other Codex skills or Devin Desktop workflows.
|
|
10
10
|
# - If one of those exact slots already holds a file the kit did NOT write, it is
|
|
11
11
|
# left untouched and you are told. Re-run with --force to replace it; --force first
|
|
12
12
|
# backs the file up (.bak.<timestamp>) and prints the command to restore it.
|
|
@@ -61,34 +61,36 @@ if command -v codex >/dev/null 2>&1 || [ -d "$HOME/.codex" ]; then
|
|
|
61
61
|
fi
|
|
62
62
|
fi
|
|
63
63
|
|
|
64
|
-
# --- Windsurf: needs a workflow launcher (
|
|
65
|
-
|
|
64
|
+
# --- Devin Desktop (formerly Windsurf): needs a workflow launcher (Devin Local, ex-Cascade,
|
|
65
|
+
# does not read SKILL.md). Cognition rebranded Windsurf -> Devin Desktop on 2026-06-02;
|
|
66
|
+
# the ~/.codeium/windsurf/ paths are unchanged, so this launcher keeps working as-is.
|
|
67
|
+
if command -v devin >/dev/null 2>&1 || command -v windsurf >/dev/null 2>&1 || [ -d "$HOME/.codeium/windsurf" ]; then
|
|
66
68
|
WF_DIR="$HOME/.codeium/windsurf/global_workflows"
|
|
67
69
|
mkdir -p "$WF_DIR"
|
|
68
70
|
WF="$WF_DIR/agent-workflow-kit.md"
|
|
69
71
|
write_wf() { sed "s#<KIT_DIR>#$KIT_DIR#g" "$KIT_DIR/launchers/windsurf-workflow.md" > "$WF"; }
|
|
70
72
|
if [ ! -e "$WF" ]; then
|
|
71
73
|
write_wf
|
|
72
|
-
echo "[launchers]
|
|
74
|
+
echo "[launchers] Devin Desktop → wrote $WF (/agent-workflow-kit in Devin Local / Cascade)"
|
|
73
75
|
installed_any=1
|
|
74
76
|
elif grep -q "$MARKER" "$WF" 2>/dev/null; then
|
|
75
77
|
write_wf
|
|
76
|
-
echo "[launchers]
|
|
78
|
+
echo "[launchers] Devin Desktop → refreshed $WF (kit-managed)"
|
|
77
79
|
installed_any=1
|
|
78
80
|
elif [ "$FORCE" -eq 1 ]; then
|
|
79
81
|
backup_and_note "$WF"
|
|
80
82
|
write_wf
|
|
81
|
-
echo "[launchers]
|
|
83
|
+
echo "[launchers] Devin Desktop → replaced (forced) $WF"
|
|
82
84
|
installed_any=1
|
|
83
85
|
else
|
|
84
|
-
echo "[launchers]
|
|
86
|
+
echo "[launchers] Devin Desktop ⚠ $WF exists and was not written by the kit — left untouched."
|
|
85
87
|
echo "[launchers] re-run with --force to replace it (a backup is made first)."
|
|
86
88
|
skipped_any=1
|
|
87
89
|
fi
|
|
88
90
|
fi
|
|
89
91
|
|
|
90
92
|
if [ "$installed_any" -eq 0 ] && [ "$skipped_any" -eq 0 ]; then
|
|
91
|
-
echo "[launchers] No Codex/
|
|
93
|
+
echo "[launchers] No Codex/Devin Desktop install detected. Claude Code (if present) already has the kit natively."
|
|
92
94
|
fi
|
|
93
95
|
echo "[launchers] Uninstall later: delete the kit's own slot(s) above (the symlink / the agent-workflow-kit.md file)."
|
|
94
96
|
echo "[launchers] done."
|
|
@@ -3,7 +3,7 @@ description: Bootstrap or upgrade the agent-workflow-kit AI memory & workflow sy
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
<!-- agent-workflow-kit:managed — generated by the kit installer. Safe to overwrite on
|
|
6
|
-
reinstall; delete this file to remove the
|
|
6
|
+
reinstall; delete this file to remove the Devin Desktop launcher. -->
|
|
7
7
|
|
|
8
8
|
# agent-workflow-kit
|
|
9
9
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Migration 1.2.0-agent-attribution
|
|
2
|
+
|
|
3
|
+
**From:** versions < 1.2.0 **To:** 1.2.0
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
1.2.0 makes **agent attribution opt-in**. The agent may attribute work to itself / AI —
|
|
8
|
+
`Co-Authored-By` trailers, "Generated with …" footers, AI/agent/model mentions in code,
|
|
9
|
+
comments, commit messages, PR titles/bodies, branch names, or docs — **only if the user
|
|
10
|
+
allows it**. Default is `off`. The choice is recorded in an *Attribution* block in the
|
|
11
|
+
project's `AGENTS.md`; pre-1.2.0 deployments have no such block.
|
|
12
|
+
|
|
13
|
+
A single `Co-Authored-By` trailer is enough to list an AI as a repo contributor, and GitHub
|
|
14
|
+
keeps it permanently via PR refs — so the safe default is "no mention anywhere".
|
|
15
|
+
|
|
16
|
+
## Steps
|
|
17
|
+
|
|
18
|
+
1. Open the project's entry point `AGENTS.md` (the real file; `CLAUDE.md` is a symlink to it).
|
|
19
|
+
2. **Idempotency check** — if it already contains a `## ✍️ Attribution` heading, skip to Verification.
|
|
20
|
+
3. **Ask the user**: may the agent attribute work to itself / AI anywhere (commits, PRs, code,
|
|
21
|
+
comments, docs)? **Default to `off`** unless they opt in.
|
|
22
|
+
4. Insert this block immediately **after the *Communication language* block** (or, if that is
|
|
23
|
+
absent, after the opening blockquote — before `## 🧭 Memory Map`), replacing `<off|on>` with
|
|
24
|
+
the answer from step 3:
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## ✍️ Attribution
|
|
30
|
+
|
|
31
|
+
> **Agent attribution: <off|on>** (chosen at setup).
|
|
32
|
+
> **off** → never attribute work to the agent, AI, or the model: no `Co-Authored-By` trailers, no "Generated with …" footers, no AI/agent/model mentions in code, comments, commit messages, PR titles/bodies, branch names, or docs. Author everything as the human.
|
|
33
|
+
> **on** → the agent may add its standard `Co-Authored-By` trailer / footer per your tooling defaults.
|
|
34
|
+
> Claude Code also honours `includeCoAuthoredBy` in `.claude/settings.json`; this block binds every agent for everything written by hand.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
5. **If the answer is `off` and the project uses Claude Code**, also set the harness flag so the
|
|
38
|
+
automatic trailer stops (a doc directive cannot stop a harness-added trailer):
|
|
39
|
+
- Ensure `.claude/settings.json` exists in the project root; create it as `{}` if absent.
|
|
40
|
+
- Set `"includeCoAuthoredBy": false` (merge into the existing JSON; do not clobber other keys).
|
|
41
|
+
- For other tools, disable their equivalent co-author / footer setting if present.
|
|
42
|
+
6. Keep `AGENTS.md` within its ≤100-line budget (the block is ~7 lines; it fits). Do **not**
|
|
43
|
+
retroactively rewrite existing git history here — that is a separate, deliberate operation.
|
|
44
|
+
|
|
45
|
+
## Verification
|
|
46
|
+
|
|
47
|
+
- `AGENTS.md` has exactly one `## ✍️ Attribution` block, with `off` or `on` (no leftover
|
|
48
|
+
`{{AGENT_ATTRIBUTION}}` placeholder).
|
|
49
|
+
- If `off` + Claude Code: `.claude/settings.json` contains `"includeCoAuthoredBy": false`, and
|
|
50
|
+
the file is valid JSON (`node -e "JSON.parse(require('fs').readFileSync('.claude/settings.json'))"`).
|
|
51
|
+
- The docs cap-validator is still green (`node scripts/check-docs-size.mjs` for Node projects).
|
|
52
|
+
|
|
53
|
+
## Rollback
|
|
54
|
+
|
|
55
|
+
Delete the inserted `## ✍️ Attribution` block (and its trailing `---`) from `AGENTS.md`, and
|
|
56
|
+
remove the `includeCoAuthoredBy` key from `.claude/settings.json` if you added it. No other
|
|
57
|
+
files were changed.
|
package/package.json
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sabaiway/agent-workflow-kit",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Portable, cross-agent memory & workflow for AI coding agents — Claude Code, Codex, Cursor, Devin Desktop. One command deploys an AGENTS.md entry point + docs/ai context with cap/archive/index enforcement into any repo.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
7
|
+
"ai-coding",
|
|
8
|
+
"coding-agent",
|
|
9
|
+
"llm",
|
|
10
|
+
"ai-tools",
|
|
7
11
|
"claude-code",
|
|
8
12
|
"codex",
|
|
9
13
|
"cursor",
|
|
10
14
|
"windsurf",
|
|
15
|
+
"devin",
|
|
16
|
+
"github-copilot",
|
|
17
|
+
"gemini-cli",
|
|
18
|
+
"cline",
|
|
19
|
+
"aider",
|
|
11
20
|
"agents-md",
|
|
21
|
+
"agent-memory",
|
|
22
|
+
"context-engineering",
|
|
23
|
+
"cross-agent",
|
|
12
24
|
"workflow",
|
|
13
|
-
"skill",
|
|
14
25
|
"memory",
|
|
15
26
|
"developer-tools"
|
|
16
27
|
],
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Setup contracts
|
|
2
|
+
|
|
3
|
+
The three choices the bootstrap makes with the user — **visibility**, **conversational
|
|
4
|
+
language**, and **agent attribution** — each have a contract below. `SKILL.md` links here so the
|
|
5
|
+
main procedure stays lean; load this file when you need the full rule for a contract (e.g. while
|
|
6
|
+
filling the matching `AGENTS.md` block, or when an `upgrade` migration touches it).
|
|
7
|
+
|
|
8
|
+
Ask each as a **structured multiple-choice prompt where your agent supports it** (`AskUserQuestion`
|
|
9
|
+
in Claude Code), otherwise in prose — and always wait for the answer before writing.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Visibility contract
|
|
14
|
+
|
|
15
|
+
The user chooses at bootstrap whether the AI artifacts are visible in the repo or hidden — an
|
|
16
|
+
**explicit up-front question** (bootstrap step 2), never an assumed default. The two modes then
|
|
17
|
+
diverge:
|
|
18
|
+
|
|
19
|
+
- **visible** — artifacts are committed. Wire the project's `package.json` scripts (`docs:check` / `docs:index` / `docs:index:check` / `docs:archive` / `docs:archive:check` / `docs:archive:issues` / `docs:archive:issues:check` / `prepare: node scripts/install-git-hooks.mjs`) and add a minimal `.gitignore` (`docs/plans/`, `.claude/settings.local.json`). This is the canonical model.
|
|
20
|
+
- **hidden** (in-tree) — same files on disk, but the repo "looks normal": append the artifact paths (`AGENTS.md`, `CLAUDE.md`, `docs/ai/`, `docs/plans/`, `scripts/*.mjs` you added, `docs/ai/.workflow-version`) to the global excludes file git **already uses** (`git config --get core.excludesFile`); if none is set, point it at `~/.gitignore_global` (`git config --global core.excludesFile ~/.gitignore_global`) and append there. **Verify `git status` shows the artifacts as ignored** afterwards. **Do not edit `package.json`** — that is a tracked change and would leak; the pre-commit hook (always untracked in `.git/hooks/`) calls the scripts via `node scripts/<x>.mjs` directly.
|
|
21
|
+
|
|
22
|
+
Not in this version: a fully-external hidden mode (artifacts relocated outside the repo tree).
|
|
23
|
+
Deferred to a later release + migration.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Communication contract
|
|
28
|
+
|
|
29
|
+
The user chooses at bootstrap (step 3) which language the agent **talks to them** in. The choice is
|
|
30
|
+
recorded in the *Communication language* block of the project's `AGENTS.md`, so every agent that
|
|
31
|
+
reads the entry point honours it — and stops drifting between languages mid-session.
|
|
32
|
+
|
|
33
|
+
Scope — **dialogue only**:
|
|
34
|
+
|
|
35
|
+
- **In the chosen language** — everything the agent produces *for the user to read*: questions, explanations, plan summaries, status updates, commit-message prose if asked, review notes.
|
|
36
|
+
- **Always in their source language (usually English)** — code, identifiers, file paths, shell commands, log/console output, error strings, config keys, and abbreviations/acronyms. Translating these breaks copy-paste, search, and tooling.
|
|
37
|
+
- **Files stay English** — the deployed `docs/ai/` files, `AGENTS.md`, and this kernel are English-only regardless of the chosen language (cross-agent / cross-team portability). The conversational language is about the *chat*, not the *artifacts*.
|
|
38
|
+
|
|
39
|
+
Default to the language the user is already writing in; confirm rather than assume. On `upgrade`, a
|
|
40
|
+
pre-1.1.0 deployment with no block gets one (the agent asks).
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Attribution contract
|
|
45
|
+
|
|
46
|
+
The user chooses at bootstrap (step 4) whether the agent may **attribute work to itself or to AI**.
|
|
47
|
+
The choice is recorded in the *Attribution* block of the project's `AGENTS.md`, so every agent that
|
|
48
|
+
reads the entry point honours it. **Default is `off`** — people are routinely surprised to find an
|
|
49
|
+
AI listed as a repo contributor (a `Co-Authored-By` trailer is enough to do it), so opt-in, never
|
|
50
|
+
opt-out.
|
|
51
|
+
|
|
52
|
+
When attribution is **`off`**, no mention of the agent, AI, or the model appears **anywhere**:
|
|
53
|
+
|
|
54
|
+
- **No `Co-Authored-By` trailers** and **no "Generated with …" footers** on commits or PRs.
|
|
55
|
+
- **No AI/agent/model references** in code, comments, commit messages, PR titles/bodies, branch names, or `docs/` prose. The work reads as the human author's.
|
|
56
|
+
- **Two enforcement layers** — the *Attribution* block binds everything an agent writes **by hand**; the automatic `Co-Authored-By` trailer is added by the **harness**, not the prose, so for **Claude Code** the kit also sets `"includeCoAuthoredBy": false` in the project's `.claude/settings.json`. Other tools: disable their equivalent co-author/footer setting if present.
|
|
57
|
+
|
|
58
|
+
When **`on`**, the agent may add its standard trailer / footer per the user's tooling defaults. This
|
|
59
|
+
block is about *attribution*, not authorship of the actual changes — quality, tests, and the "ask
|
|
60
|
+
before commit" rule are unchanged either way.
|
|
61
|
+
|
|
62
|
+
On `upgrade`, a pre-1.2.0 deployment with no block gets one (the agent asks, defaulting to `off`).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **Execution protocol for AI agents working on this project.**
|
|
4
4
|
> **This file is your entry point. Read it first, then follow the Memory Map.**
|
|
5
|
-
> `AGENTS.md` is the cross-agent standard — Codex / Cursor /
|
|
5
|
+
> `AGENTS.md` is the cross-agent standard — Codex / Cursor / Devin Desktop / Copilot read it natively. Tool-specific aliases (e.g. `CLAUDE.md` for Claude Code) are symlinks to this file — single source, no duplication.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -14,6 +14,15 @@
|
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
+
## ✍️ Attribution
|
|
18
|
+
|
|
19
|
+
> **Agent attribution: {{AGENT_ATTRIBUTION}}** (chosen at setup).
|
|
20
|
+
> **off** → never attribute work to the agent, AI, or the model: no `Co-Authored-By` trailers, no "Generated with …" footers, no AI/agent/model mentions in code, comments, commit messages, PR titles/bodies, branch names, or docs. Author everything as the human.
|
|
21
|
+
> **on** → the agent may add its standard `Co-Authored-By` trailer / footer per your tooling defaults.
|
|
22
|
+
> Claude Code also honours `includeCoAuthoredBy` in `.claude/settings.json`; this block binds every agent for everything written by hand.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
17
26
|
## 🧭 Memory Map
|
|
18
27
|
|
|
19
28
|
All project knowledge lives in `docs/ai/`. Layered, lazy-loaded context:
|