@sabaiway/agent-workflow-kit 1.0.0 → 1.2.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 CHANGED
@@ -4,6 +4,33 @@ 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.2.0 — Agent attribution is opt-in
8
+
9
+ **Attribution question at setup**
10
+
11
+ - **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.
12
+ - **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.
13
+ - **`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.
14
+ - **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`.
15
+ - **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).
16
+
17
+ **Devin Desktop rebrand (formerly Windsurf)**
18
+
19
+ - 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.
20
+
21
+ ## 1.1.0 — Conversational language + unambiguous install guidance
22
+
23
+ **Conversational language (dialogue only)**
24
+
25
+ - **Bootstrap now asks the conversational language** — a new step 3 in `/agent-workflow-kit`, alongside the visibility question. The agent records the answer in a new *Communication language* block in the project's `AGENTS.md`, so every agent that reads the entry point talks to the user in that language and stops drifting between languages mid-session.
26
+ - **Dialogue-only scope, by design** — the choice governs what the agent writes *for the user to read* (questions, explanations, summaries, status). Code, identifiers, file paths, shell commands, log output, and abbreviations stay in their source language; the deployed `docs/ai/` files and `AGENTS.md` stay English (the kernel stays English-only for cross-agent / cross-team portability). See the *Communication contract* in `SKILL.md`.
27
+ - **Existing deployments are covered** — `/agent-workflow-kit upgrade` backfills the block on a pre-1.1.0 project, asking the user their language. See `migrations/1.1.0-communication-language.md` (idempotent, additive).
28
+
29
+ **Clearer install / upgrade guidance**
30
+
31
+ - **`init` now distinguishes a fresh kit install from a refresh** — prints `installed v…` the first time and `updated the kit to v…` on re-run, so it's obvious the command targets the *kit*, not a project.
32
+ - **The "Next" message is unambiguous about which path to take** — it spells out *first time in a project* (`/agent-workflow-kit`) vs *project already has the kit* (`/agent-workflow-kit upgrade`), and reminds that re-running `npx … init` updates the kit's own files. `--help` and the README install table say the same. Resolves the prior single-line hint that read the same for first-timers and upgraders.
33
+
7
34
  ## 1.0.0 — Initial public release
8
35
 
9
36
  First public release of `@sabaiway/agent-workflow-kit`. The kernel — distilled from a battle-tested, multi-year-verified reference implementation — ships on npm + GitHub so it installs (and self-upgrades) in one command. Adoption is countable from the registry's public per-version download numbers — no telemetry, no phone-home.
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
- `v1.0.0` · `Claude Code · Codex · Cursor · Windsurf` · `Node ≥ 18` · `kernel-only · English`
10
+ [![npm version](https://img.shields.io/npm/v/@sabaiway/agent-workflow-kit?logo=npm)](https://www.npmjs.com/package/@sabaiway/agent-workflow-kit)
11
+ [![npm downloads](https://img.shields.io/npm/dm/@sabaiway/agent-workflow-kit)](https://www.npmjs.com/package/@sabaiway/agent-workflow-kit)
12
+ [![license](https://img.shields.io/npm/l/@sabaiway/agent-workflow-kit)](./LICENSE)
13
+ [![node](https://img.shields.io/node/v/@sabaiway/agent-workflow-kit)](https://nodejs.org)
14
+
15
+ `v1.2.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,19 +105,21 @@ 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 / Windsurf you have:
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
105
112
  ```
106
113
 
107
- Then invoke it in any project:
114
+ Then invoke it **inside a project** — first time vs. already-deployed use different sub-commands:
115
+
116
+ | Agent | First time in the project | Project already has the kit |
117
+ |-------|---------------------------|-----------------------------|
118
+ | **Claude Code** | `/agent-workflow-kit` | `/agent-workflow-kit upgrade` |
119
+ | **Codex** | `/skills` menu → `agent-workflow-kit` | …→ `agent-workflow-kit upgrade` |
120
+ | **Devin Desktop** (Windsurf · Devin Local) | `/agent-workflow-kit` | `/agent-workflow-kit upgrade` |
108
121
 
109
- | Agent | Invoke |
110
- |-------|--------|
111
- | **Claude Code** | `/agent-workflow-kit` |
112
- | **Codex** | `/skills` menu → `agent-workflow-kit` |
113
- | **Windsurf** (Cascade) | `/agent-workflow-kit` |
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>
114
123
 
115
124
  **Upgrade the kit itself** later — same command with `@latest`:
116
125
 
@@ -132,7 +141,7 @@ cd ~/.claude/skills/agent-workflow-kit
132
141
  bash launchers/install-launchers.sh
133
142
  ```
134
143
 
135
- `install-launchers.sh` auto-detects Codex **and** Windsurf — it only touches tools you actually
144
+ `install-launchers.sh` auto-detects Codex **and** Devin Desktop — it only touches tools you actually
136
145
  have. See [`launchers/README.md`](launchers/README.md) for the full matrix (incl. Cursor / any
137
146
  other agent). The manual path works identically but **isn't reflected in install stats** — prefer
138
147
  `npx` if you don't mind.
@@ -147,9 +156,9 @@ other agent). The manual path works identically but **isn't reflected in install
147
156
  |------|------|
148
157
  | `~/.claude/skills/agent-workflow-kit/` | the kit itself (refreshed on every `init`) |
149
158
  | `~/.codex/skills/agent-workflow-kit` | a symlink — only if you have Codex |
150
- | `…/global_workflows/agent-workflow-kit.md` | a managed file — only if you have Windsurf |
159
+ | `…/global_workflows/agent-workflow-kit.md` | a managed file — only if you have Devin Desktop |
151
160
 
152
- Your other Codex skills and Windsurf workflows are never touched. If one of those exact slots
161
+ Your other Codex skills and Devin Desktop workflows are never touched. If one of those exact slots
153
162
  already holds a file the kit didn't write, it is **left alone** and you're told — re-run with
154
163
  `--force` to replace it (the original is first copied to `*.bak.<timestamp>` and the restore
155
164
  command is printed).
@@ -163,7 +172,7 @@ command is printed).
163
172
 
164
173
  | Command | When | What happens |
165
174
  |---------|------|--------------|
166
- | `/agent-workflow-kit` | new / empty project | recon → **asks visible-or-hidden** → 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** |
167
176
  | `/agent-workflow-kit upgrade` | existing deployment | reads `docs/ai/.workflow-version`, shows the changelog diff, applies migrations, re-stamps |
168
177
 
169
178
  It **never auto-commits** and **never overwrites** an existing `AGENTS.md` without asking.
@@ -189,8 +198,8 @@ Enforcement ships as dependency-free **Node** scripts (`node --test`, no package
189
198
  ## 🤝 Cross-agent by design
190
199
 
191
200
  One kit, three front doors — the *output* (`AGENTS.md` + `docs/ai/`) is read natively by
192
- Codex, Cursor, Windsurf, Copilot, Gemini CLI & 20+ tools, and the *bootstrapper* runs from
193
- Claude Code, Codex, or Windsurf. No logic is duplicated per tool.
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.
194
203
 
195
204
  ---
196
205
 
@@ -205,7 +214,7 @@ agent-workflow-kit/
205
214
  ├── templates/ ← AGENTS.md + every docs/ai file
206
215
  ├── scripts/ ← caps / archive / index + tests
207
216
  └── planning.md ← plan lifecycle + continuity
208
- ├── launchers/ ← Codex / Windsurf / Cursor entries
217
+ ├── launchers/ ← Codex / Devin Desktop / Cursor entries
209
218
  └── migrations/ ← per-version upgrade steps
210
219
  ```
211
220
 
package/SKILL.md CHANGED
@@ -3,14 +3,16 @@ 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.0.0'
6
+ version: '1.2.0'
7
7
  ---
8
8
 
9
9
  # agent-workflow-kit
10
10
 
11
11
  Deploys a **portable AI-agent memory-and-workflow system** into a project, and upgrades it as the kernel evolves. After it runs, any future agent (including a fresh session of yourself) can reconstruct project context in ~60 seconds, find the current task, and avoid repeating past mistakes.
12
12
 
13
- The kernel is **stack-agnostic workflow** — `docs/ai/` structure, entry-point doc, session protocols, plan lifecycle, frontmatter caps, 3-tier archive, index-freshness gate. Enforcement ships as **Node `.mjs` scripts** (the reference implementation; non-Node stacks follow the same policy manually). This skill is **English-only**.
13
+ The kernel is **stack-agnostic workflow** — `docs/ai/` structure, entry-point doc, session protocols, plan lifecycle, frontmatter caps, 3-tier archive, index-freshness gate. Enforcement ships as **Node `.mjs` scripts** (the reference implementation; non-Node stacks follow the same policy manually).
14
+
15
+ The kernel **artifacts** (this skill, the templates, the deployed `docs/ai/` files) are **English-only** — for cross-agent and cross-team portability. That is separate from the **conversational language**: the language the agent *talks to the user* in (questions, explanations, summaries, status). That is chosen once at bootstrap (step 3), recorded in the project's `AGENTS.md`, and applied to dialogue only — it never translates file contents, code, identifiers, paths, commands, or abbreviations.
14
16
 
15
17
  This kernel is distilled from a canonical, battle-tested reference implementation. The skill is the single source of truth — projects deploy from it and upgrade against it.
16
18
 
@@ -35,13 +37,15 @@ Pick the mode from the user's invocation. Auto-detect an existing `docs/ai/` to
35
37
  - Tests (framework, location, E2E?) and linter rules.
36
38
  - Record: stack, package manager, daily commands (`dev`/`test`/`lint`/`type-check`), routes/pages, architecture layers.
37
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 *Visibility contract*.
38
- 3. **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 / Windsurf / 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).
39
- 4. **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`).
40
- 5. **Fill templates** per the table below.
41
- 6. **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 7 — follow the cap/archive/index policy manually, or port the scripts to the project's language.
42
- 7. **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.
43
- 8. **Stamp version.** Write the skill's `version` into `docs/ai/.workflow-version` (one semver line).
44
- 9. **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.
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 5). See *Communication contract*. This sets the **dialogue** language only never the files.
41
+ 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*.
42
+ 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).
43
+ 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`).
44
+ 7. **Fill templates** per the table below.
45
+ 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.
46
+ 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.
47
+ 10. **Stamp version.** Write the skill's `version` into `docs/ai/.workflow-version` (one semver line).
48
+ 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.
45
49
 
46
50
  Fill strategy:
47
51
 
@@ -59,7 +63,7 @@ Fill strategy:
59
63
  2. Compare to this skill's `metadata.version` (frontmatter). If equal → report "up to date" and stop.
60
64
  3. Show the relevant `${CLAUDE_SKILL_DIR}/CHANGELOG.md` diff (entries newer than the project's stamp).
61
65
  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.
62
- 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).
66
+ 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`. 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`.
63
67
  6. Re-stamp `docs/ai/.workflow-version` to the skill's `version`. Report changes; **ask before committing**.
64
68
 
65
69
  ---
@@ -75,6 +79,36 @@ Not in this version: a fully-external hidden mode (artifacts relocated outside t
75
79
 
76
80
  ---
77
81
 
82
+ ## Communication contract
83
+
84
+ 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.
85
+
86
+ Scope — **dialogue only**:
87
+
88
+ - **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.
89
+ - **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.
90
+ - **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*.
91
+
92
+ Default to the language the user is already writing in; confirm rather than assume. On `upgrade`, a pre-1.1.0 deployment with no block gets one (the agent asks).
93
+
94
+ ---
95
+
96
+ ## Attribution contract
97
+
98
+ The user chooses at bootstrap (step 4) whether the agent may **attribute work to itself or to AI**. The choice is recorded in the *Attribution* block of the project's `AGENTS.md`, so every agent that reads the entry point honours it. **Default is `off`** — people are routinely surprised to find an AI listed as a repo contributor (a `Co-Authored-By` trailer is enough to do it), so opt-in, never opt-out.
99
+
100
+ When attribution is **`off`**, no mention of the agent, AI, or the model appears **anywhere**:
101
+
102
+ - **No `Co-Authored-By` trailers** and **no "Generated with …" footers** on commits or PRs.
103
+ - **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.
104
+ - **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.
105
+
106
+ When **`on`**, the agent may add its standard trailer / footer per the user's tooling defaults. This block is about *attribution*, not authorship of the actual changes — quality, tests, and the "ask before commit" rule are unchanged either way.
107
+
108
+ On `upgrade`, a pre-1.2.0 deployment with no block gets one (the agent asks, defaulting to `off`).
109
+
110
+ ---
111
+
78
112
  ## System principles (encode these into the project's `AGENTS.md`)
79
113
 
80
114
  1. **Single entry point.** `AGENTS.md` is the only entry point (tool aliases like `CLAUDE.md` symlink to it); it never bloats — details live in `docs/ai/`.
@@ -87,6 +121,8 @@ Not in this version: a fully-external hidden mode (artifacts relocated outside t
87
121
  8. **Hard Constraints are tool-enforced.** Style rules live in linter/type-checker configs, not prose.
88
122
  9. **Ask before commit.** The agent reports quality-gate results and waits for explicit approval; it never auto-commits.
89
123
  10. **Honest `known_issues.md`.** Every bug with a workaround gets Impact + Plan so it isn't re-discovered later.
124
+ 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*.
125
+ 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*.
90
126
 
91
127
  ---
92
128
 
@@ -117,5 +153,5 @@ Deploy these into `AGENTS.md`; remove rows that don't apply to the stack.
117
153
  - [`references/templates/`](references/templates/) — stack-agnostic `AGENTS.md`, `agent_rules.md`, and all `docs/ai/` files to deploy.
118
154
  - [`references/scripts/`](references/scripts/) — the Node enforcement scripts (caps + staleness + index-freshness gate, 3-tier archive, hook installer) and their unit tests.
119
155
  - [`migrations/`](migrations/) — per-version upgrade steps; see `migrations/README.md`.
120
- - [`launchers/`](launchers/) — run the bootstrapper from non-Claude agents (`SKILL.md` is a native Codex skill; a Windsurf workflow launcher + install script). See `launchers/README.md`.
156
+ - [`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`.
121
157
  - [`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 / Windsurf — only touches tools
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,13 +85,17 @@ 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 / Windsurf you have. --no-launchers skips that wiring; --force replaces a
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
- After install, invoke the skill in your agent:
93
- Claude Code / Codex: /agent-workflow-kit
94
- Windsurf Cascade: /agent-workflow-kit`);
92
+ After install, invoke the skill in your agent, inside a project:
93
+ first time in the project -> /agent-workflow-kit
94
+ project already has it -> /agent-workflow-kit upgrade
95
+ (Claude Code / Codex / Devin Desktop all use the same /agent-workflow-kit.)
96
+
97
+ Re-running this npx command updates the kit's own files; /agent-workflow-kit
98
+ upgrade then migrates a project's deployment to that version.`);
95
99
  };
96
100
 
97
101
  const main = async () => {
@@ -107,30 +111,40 @@ const main = async () => {
107
111
  }
108
112
 
109
113
  const target = resolveTarget(args.dir);
114
+ const wasPresent = existsSync(resolve(target, 'SKILL.md'));
110
115
  await mkdir(target, { recursive: true });
111
116
  await Promise.all(
112
117
  PAYLOAD.filter((entry) => existsSync(resolve(PKG_ROOT, entry))).map((entry) =>
113
118
  copyRecursive(resolve(PKG_ROOT, entry), resolve(target, entry)),
114
119
  ),
115
120
  );
116
- console.log(`[agent-workflow-kit] installed v${version} -> ${tildify(target)}`);
121
+ console.log(`[agent-workflow-kit] ${wasPresent ? 'updated the kit to' : 'installed'} v${version} -> ${tildify(target)}`);
117
122
 
118
123
  // Wire non-Claude agents — best-effort; the launcher only touches tools you have.
119
124
  const launcher = resolve(target, 'launchers/install-launchers.sh');
120
125
  if (args.noLaunchers) {
121
- console.log('[agent-workflow-kit] --no-launchers: skipped Codex/Windsurf wiring.');
126
+ console.log('[agent-workflow-kit] --no-launchers: skipped Codex/Devin Desktop wiring.');
122
127
  } else if (process.platform === 'win32') {
123
128
  console.log('[agent-workflow-kit] Windows: skipped POSIX launcher. Claude Code reads the kit natively.');
124
129
  } else if (existsSync(launcher)) {
125
130
  const launcherArgs = args.force ? [launcher, '--force'] : [launcher];
126
131
  const launcherRun = spawnSync('bash', launcherArgs, { stdio: 'inherit' });
127
132
  if (launcherRun.status !== 0) {
128
- console.warn('[agent-workflow-kit] launcher step skipped/failed — run it by hand if you use Codex/Windsurf:');
133
+ console.warn('[agent-workflow-kit] launcher step skipped/failed — run it by hand if you use Codex/Devin Desktop:');
129
134
  console.warn(` bash ${tildify(launcher)}`);
130
135
  }
131
136
  }
132
137
 
133
- console.log('\nNext: open your agent and run /agent-workflow-kit');
138
+ // This command (de)installed the *kit* globally. Deploying it into a project is a
139
+ // separate, in-agent step — and which sub-command depends on whether that project
140
+ // already has the kit. Spell both out so it's unambiguous (see README "Use").
141
+ console.log(`
142
+ Next — open your agent inside a project and run the skill:
143
+ • first time in this project -> /agent-workflow-kit
144
+ • project already has the kit -> /agent-workflow-kit upgrade
145
+
146
+ This command only installs/updates the kit itself (in ${tildify(target)}).
147
+ To update the kit later, re-run: npx @sabaiway/agent-workflow-kit@latest init`);
134
148
  };
135
149
 
136
150
  main().catch((err) => {
@@ -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
- | **Windsurf** | workflow (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 Cascade |
17
- | **Cursor** (bonus) | command/rule | point a `.cursor/commands` entry at `<KIT_DIR>/SKILL.md` (same pattern as the Windsurf launcher) | the command name |
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 Windsurf workflows.
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 (Cascade does not read SKILL.md).
65
- if command -v windsurf >/dev/null 2>&1 || [ -d "$HOME/.codeium/windsurf" ]; then
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] Windsurf → wrote $WF (/agent-workflow-kit in Cascade)"
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] Windsurf → refreshed $WF (kit-managed)"
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] Windsurf → replaced (forced) $WF"
83
+ echo "[launchers] Devin Desktop → replaced (forced) $WF"
82
84
  installed_any=1
83
85
  else
84
- echo "[launchers] Windsurf ⚠ $WF exists and was not written by the kit — left untouched."
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/Windsurf install detected. Claude Code (if present) already has the kit natively."
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 Windsurf launcher. -->
6
+ reinstall; delete this file to remove the Devin Desktop launcher. -->
7
7
 
8
8
  # agent-workflow-kit
9
9
 
@@ -0,0 +1,51 @@
1
+ # Migration 1.1.0-communication-language
2
+
3
+ **From:** versions < 1.1.0 **To:** 1.1.0
4
+
5
+ ## Why
6
+
7
+ 1.1.0 adds a **conversational language** setting: the language the agent *talks to the
8
+ user* in (questions, explanations, summaries, status). It is recorded in a *Communication
9
+ language* block in the project's `AGENTS.md` so every agent that reads the entry point
10
+ honours it instead of drifting between languages. Pre-1.1.0 deployments have no such block.
11
+
12
+ Scope is **dialogue only** — code, identifiers, paths, commands, log output, and
13
+ abbreviations stay in their source language, and the `docs/ai/` files + `AGENTS.md` stay
14
+ English (the kernel is English-only). This migration changes *one* doc block, nothing else.
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 `## 🗣️ Communication language` heading,
20
+ this migration is done; skip to Verification.
21
+ 3. **Ask the user** which language the agent should converse in (questions, explanations,
22
+ summaries, status). Offer the language they're already writing in as the default.
23
+ 4. Insert this block immediately **after the opening blockquote** (before `## 🧭 Memory Map`),
24
+ replacing `<their language>` with the answer from step 3:
25
+
26
+ ```markdown
27
+ ---
28
+
29
+ ## 🗣️ Communication language
30
+
31
+ > **Talk to the user in <their language>** — every question, explanation, summary, and status update.
32
+ > Keep code, identifiers, file paths, shell commands, log output, and abbreviations in their **source language** (usually English) — translating them breaks copy-paste, search, and tooling.
33
+ > This sets the **dialogue** language only. The files in `docs/ai/` and this entry point stay in English (kernel is English-only, for cross-agent / cross-team portability).
34
+ ```
35
+
36
+ 5. Keep `AGENTS.md` within its ≤100-line budget (the block is ~6 lines; it fits). Do **not**
37
+ touch any other section, and do **not** translate existing file contents.
38
+
39
+ ## Verification
40
+
41
+ - `AGENTS.md` has exactly one `## 🗣️ Communication language` block, with a real language in
42
+ place of `<their language>` (no leftover `{{COMM_LANGUAGE}}` placeholder).
43
+ - The docs cap-validator is still green (`node scripts/check-docs-size.mjs` for Node projects)
44
+ — the entry point did not bust its line budget.
45
+ - From now on the agent's replies are in the chosen language; paths/commands/identifiers
46
+ remain English.
47
+
48
+ ## Rollback
49
+
50
+ Delete the inserted `## 🗣️ Communication language` block (and its trailing `---`) from
51
+ `AGENTS.md`. No other files were changed.
@@ -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.0.0",
4
- "description": "A portable, cross-agent memory & workflow system for AI coding agents. One command deploys docs/ai + an entry-point AGENTS.md + cap/archive/index enforcement into any project.",
3
+ "version": "1.2.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
  ],
@@ -2,7 +2,24 @@
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 / Windsurf / Copilot read it natively. Tool-specific aliases (e.g. `CLAUDE.md` for Claude Code) are symlinks to this file — single source, no duplication.
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
+
7
+ ---
8
+
9
+ ## 🗣️ Communication language
10
+
11
+ > **Talk to the user in {{COMM_LANGUAGE}}** — every question, explanation, summary, and status update.
12
+ > Keep code, identifiers, file paths, shell commands, log output, and abbreviations in their **source language** (usually English) — translating them breaks copy-paste, search, and tooling.
13
+ > This sets the **dialogue** language only. The files in `docs/ai/` and this entry point stay in English (kernel is English-only, for cross-agent / cross-team portability).
14
+
15
+ ---
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.
6
23
 
7
24
  ---
8
25