@kudusov.takhir/ba-toolkit 1.5.0 → 3.0.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 +117 -1
- package/README.md +33 -28
- package/bin/ba-toolkit.js +696 -259
- package/package.json +2 -2
- package/skills/ac/SKILL.md +4 -2
- package/skills/analyze/SKILL.md +1 -1
- package/skills/apicontract/SKILL.md +4 -2
- package/skills/brief/SKILL.md +4 -2
- package/skills/clarify/SKILL.md +1 -1
- package/skills/datadict/SKILL.md +4 -2
- package/skills/estimate/SKILL.md +1 -1
- package/skills/export/SKILL.md +1 -1
- package/skills/glossary/SKILL.md +1 -1
- package/skills/handoff/SKILL.md +1 -1
- package/skills/nfr/SKILL.md +4 -2
- package/skills/principles/SKILL.md +4 -2
- package/skills/references/interview-protocol.md +53 -0
- package/skills/references/templates/agents-template.md +3 -1
- package/skills/research/SKILL.md +4 -2
- package/skills/risk/SKILL.md +1 -1
- package/skills/scenarios/SKILL.md +4 -2
- package/skills/sprint/SKILL.md +1 -1
- package/skills/srs/SKILL.md +4 -2
- package/skills/stories/SKILL.md +4 -2
- package/skills/trace/SKILL.md +1 -1
- package/skills/usecases/SKILL.md +4 -2
- package/skills/wireframes/SKILL.md +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,120 @@ Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
+
## [3.0.0] — 2026-04-09
|
|
15
|
+
|
|
16
|
+
### ⚠️ BREAKING — Cursor and Windsurf install paths moved to native Agent Skills
|
|
17
|
+
|
|
18
|
+
Cursor and Windsurf both have **two separate features**: Rules (`.cursor/rules/*.mdc`, `.windsurf/rules/*.mdc`) and Agent Skills (`.cursor/skills/<skill>/SKILL.md`, `.windsurf/skills/<skill>/SKILL.md`). BA Toolkit is a pipeline of skills, not rules, but every previous version installed it as `.mdc` rules under `.cursor/rules/` and `.windsurf/rules/`. Both editors loaded those files as **rules**, never as skills, so `/brief`, `/srs`, … slash commands were never registered with the agent. Users reported that the skills did not show up. v3.0 fixes this by switching to the native Agent Skills paths and the native folder-per-skill `SKILL.md` layout (the same one Claude Code, Codex CLI, and Gemini CLI use). Confirmed against the official Cursor and Windsurf documentation via ctx7 MCP:
|
|
19
|
+
|
|
20
|
+
| Agent | v2.0 path (broken) | v3.0 path (correct) | Format |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| Cursor | `.cursor/rules/<skill>.mdc` (flat) | `.cursor/skills/<skill>/SKILL.md` (folder-per-skill) | Native |
|
|
23
|
+
| Windsurf | `.windsurf/rules/<skill>.mdc` (flat) | `.windsurf/skills/<skill>/SKILL.md` (folder-per-skill) | Native |
|
|
24
|
+
|
|
25
|
+
**Migration for v2.0 Cursor/Windsurf users:**
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 1. Upgrade the package
|
|
29
|
+
npm install -g @kudusov.takhir/ba-toolkit@latest
|
|
30
|
+
|
|
31
|
+
# 2. Reinstall — the old install was at the wrong path; upgrade can't find
|
|
32
|
+
# its manifest there, so just run install fresh against the correct path.
|
|
33
|
+
ba-toolkit install --for cursor # writes to .cursor/skills/
|
|
34
|
+
ba-toolkit install --for windsurf # writes to .windsurf/skills/
|
|
35
|
+
|
|
36
|
+
# 3. Manually clean up the orphaned old install (it never actually worked
|
|
37
|
+
# as skills anyway — Cursor/Windsurf were loading it as rules):
|
|
38
|
+
rm -rf .cursor/rules/*.mdc # if those .mdc files came from BA Toolkit
|
|
39
|
+
rm -rf .windsurf/rules/*.mdc
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
After this you'll see the BA Toolkit skills register as actual Agent Skills in Cursor and Windsurf for the first time — `/brief`, `/srs`, `/ac`, `/nfr`, … become real slash commands. Reload the editor window after install. Claude Code, Codex CLI, and Gemini CLI users are unaffected — their paths and behavior are unchanged.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **Integration test suite for every CLI subcommand** (`test/cli.integration.test.js`, 33 tests). Spawns the real CLI as a child process against temporary directories and asserts exit codes, stdout/stderr content, and filesystem state. Covers `--version`/`--help`/no-args, typo detection for unknown flags, `init` with flag combinations and validation failures, `install`/`upgrade`/`uninstall` dry-runs for every supported agent, end-to-end install → manifest → status → upgrade → uninstall round-trips for both Claude Code and Cursor (native skill format), and a regression guard proving that `uninstall` leaves the user's own unrelated skills in the shared destination untouched (manifest-driven removal guarantee).
|
|
47
|
+
- **Test gate in `.github/workflows/release.yml`**. A new `Run tests` step runs `npm test` between the smoke test and the npm publish step — if any unit or integration test fails, the `publish-npm` job exits before the classic-auth strip + publish steps, and no broken release reaches npm. The GitHub Release created by the preceding job still happens; npm and GitHub are intentionally independent.
|
|
48
|
+
- **Test job in `.github/workflows/validate.yml`**. A new `run-tests` job mirrors the release gate at PR time, so regressions are caught on the PR instead of at tag push. Triggered for changes under `bin/**`, `test/**`, `skills/**`, `output/**`, or `package.json`.
|
|
49
|
+
- **ASCII banner at the top of `ba-toolkit init`**. Decorative `ba-toolkit` wordmark printed before the "New Project Setup" heading. Suppressed on non-TTY stdout (CI logs, piped output, captured test stdout) via an `isTTY` guard in `printBanner()`, so the banner never pollutes automation. Covered by a regression test that asserts the banner glyphs don't appear in non-TTY runs.
|
|
50
|
+
- **Arrow-key menu navigation in `ba-toolkit init`** for the domain and agent selection prompts. Real terminals now get an interactive menu — `↑/↓` (also `j/k`) to move, `1-9` to jump by index, `Enter` to confirm, `Esc` or `Ctrl+C` to cancel cleanly with exit code 130. The previous numbered prompt is the automatic fallback when stdin/stdout is not a TTY (CI, piped input, `TERM=dumb`, IDE shells), so all CI/integration tests and the `printf | ba-toolkit init` use case keep working unchanged. Cross-platform via Node's `readline.emitKeypressEvents` + `setRawMode` — works the same on bash, zsh, fish, Windows Terminal (PowerShell, cmd, WSL), Git Bash, and VSCode integrated terminal. Three-layer design for testability: `menuStep(state, key)` — pure state machine, 11 unit tests; `renderMenu(state, opts)` — pure renderer, 7 unit tests; `runMenuTty` — the I/O glue, manually smoke-tested.
|
|
51
|
+
- **Interview Protocol for every interview-phase skill** (`skills/references/interview-protocol.md`). Codifies the rule that AI skills must ask ONE question at a time, offer 3–5 domain-appropriate options per question sourced from `references/domains/{domain}.md`, always include a free-text "Other" option as the last choice, and wait for an answer before asking the next question. Replaces the previous "dump a numbered questionnaire of 5+ questions at once" style that made users abandon long interviews. Every shipped SKILL.md with an `Interview` heading — 12 files: `brief`, `srs`, `stories`, `usecases`, `ac`, `nfr`, `datadict`, `apicontract`, `wireframes`, `scenarios`, `research`, `principles` — now opens its Interview section with a blockquote pointing to this protocol. A Node-level regression test in `test/cli.test.js` walks every shipped SKILL.md and fails if any interview skill ever ships without the protocol link; a mirror validation step in `.github/workflows/validate.yml` catches the same at PR time.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- **`ba-toolkit init` now merges `AGENTS.md` instead of overwriting it.** The `agents-template.md` wraps the Active Project block (name/slug/domain/date) in `<!-- ba-toolkit:begin managed -->` / `<!-- ba-toolkit:end managed -->` anchors. On re-init, only the managed block is refreshed — Pipeline Status edits, Key Constraints, Open Questions, user notes, and anything else outside the anchors is preserved byte-for-byte. If an existing `AGENTS.md` has no anchors (legacy file or fully user-authored), it's left untouched and a `preserved` note is printed instead of overwriting. The old interactive "AGENTS.md already exists. Overwrite? (y/N)" prompt is removed — the merge is always safe. New pure helper `mergeAgentsMd(existing, ctx)` exported from `bin/ba-toolkit.js` with unit tests covering all three branches (`created`, `merged`, `preserved`) plus malformed-anchor edge cases; integration tests verify the double-init scenario and the unmanaged-file preservation.
|
|
56
|
+
- `npm test` now runs both the pre-existing unit suite (`test/cli.test.js`) and the new integration suite — 154 tests total, ~2 seconds, still zero dependencies (only Node built-ins: `node:test`, `node:assert`, `node:child_process`).
|
|
57
|
+
- `.gitignore` now excludes `.claude/settings.local.json` and `.claude/skills/` — local Claude Code state, never part of the package. `settings.local.json` was previously tracked and required a stash dance around `npm version`; that workaround is no longer needed.
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- **Cursor install now targets `.cursor/skills/` with native SKILL.md format, not `.cursor/rules/` with `.mdc` conversion.** See the BREAKING section above for the full story and migration steps.
|
|
62
|
+
- **Windsurf install now targets `.windsurf/skills/` with native SKILL.md format, not `.windsurf/rules/` with `.mdc` conversion.** Mirror of the Cursor fix. Confirmed against the [Windsurf Agent Skills documentation](https://docs.windsurf.com/windsurf/cascade/skills) via ctx7 MCP: Windsurf loads skills from `.windsurf/skills/<skill-name>/SKILL.md` as folder-per-skill with the same YAML frontmatter (`name`, `description`) as Claude Code and Cursor.
|
|
63
|
+
- **`ba-toolkit init` no longer crashes on a single typo during interactive input.** The domain menu, agent menu, and manual slug entry now re-prompt on invalid input via a new `promptUntilValid(question, resolver, { maxAttempts, invalidMessage })` helper. After three consecutive invalid answers the command aborts with a clear "Too many invalid attempts — aborting." message so piped input can't infinite-loop. The flag-path (`--domain=banana`, `--for=vim`) still hard-fails immediately — that's the correct behavior for CI and scripting, and its tests are untouched.
|
|
64
|
+
- **`prompt()` race condition that silently dropped piped input lines.** The previous implementation used `rl.question()` on a shared `readline.Interface`; when stdin was piped with multiple answers at once (e.g. `printf "banana\nsaas\n" | ba-toolkit init`, or any test feeding a full input buffer via `spawnSync`), readline emitted `'line'` events before the next `question()` handler had been attached, and those answers were silently lost. The second prompt then saw EOF and aborted with `INPUT_CLOSED` despite the answer being in the buffer. The new `prompt()` owns the `'line'` event directly, buffers arriving lines into an internal `lineQueue`, and parks `waiters` when the queue is empty — no more lost input. Uncovered while wiring up the `promptUntilValid` retry path.
|
|
65
|
+
|
|
66
|
+
### Removed
|
|
67
|
+
|
|
68
|
+
- **`.mdc` rule format conversion path is gone** — every shipped agent now uses native Agent Skills, so the conversion was dead code. Deleted: `skillToMdcContent()` (and its 2 unit tests), the `mdc` branch of `copySkills()`, the `format` field on every entry in `AGENTS`, the `format` parameter passed to `copySkills` and `writeManifest`, the runtime "format: .mdc (converted from SKILL.md)" log line. The `format` field is also gone from new manifests, but `readManifest` still parses legacy manifests that have it (covered by a forward-compat unit test). Net removal: ~80 lines of code + 2 unit tests; CLI surface unchanged.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## [2.0.0] — 2026-04-09
|
|
73
|
+
|
|
74
|
+
### ⚠️ BREAKING — install layout dropped the `ba-toolkit/` wrapper
|
|
75
|
+
|
|
76
|
+
**Every previous version of this package was broken.** The CLI installed skills under a `ba-toolkit/` wrapper folder (e.g. `.claude/skills/ba-toolkit/brief/SKILL.md`), but Claude Code, Codex CLI, Gemini CLI, Cursor and Windsurf all expect skills as **direct children** of their skills/rules root (`.claude/skills/<skill-name>/SKILL.md`). The wrapper made every shipped skill invisible to the agent — `/brief`, `/srs`, etc. silently did nothing because the agent didn't know they existed. The README, examples and all documentation referenced `/brief`, but the install path made it impossible for that command to ever resolve. Confirmed against the [official Claude Code skills documentation](https://code.claude.com/docs/en/skills.md): *"Each skill is a directory with `SKILL.md` as the entrypoint"* under `.claude/skills/<skill-name>/`, with no nested-namespace support.
|
|
77
|
+
|
|
78
|
+
v2.0 fixes this for real:
|
|
79
|
+
|
|
80
|
+
- **All 5 agent install paths drop the `ba-toolkit/` wrapper.** New paths:
|
|
81
|
+
- Claude Code: `.claude/skills/` (project) and `~/.claude/skills/` (global)
|
|
82
|
+
- OpenAI Codex CLI: `~/.codex/skills/` (global only)
|
|
83
|
+
- Gemini CLI: `.gemini/skills/` and `~/.gemini/skills/`
|
|
84
|
+
- Cursor: `.cursor/rules/` (project only, flat .mdc files)
|
|
85
|
+
- Windsurf: `.windsurf/rules/` (project only, flat .mdc files)
|
|
86
|
+
- **Cursor and Windsurf layouts are now flat.** Previously each skill was nested under `.cursor/rules/ba-toolkit/<skill>/<skill>.mdc` (3 levels). Now each becomes a single `.mdc` file at the rules root: `.cursor/rules/<skill>.mdc`. Cursor's rule loader expects flat `.mdc` files, never recurses.
|
|
87
|
+
- **SKILL.md `name:` field renamed.** The 21 SKILL.md files used `name: ba-brief`, `name: ba-srs`, etc. But Claude Code derives the slash command from the `name` field — so the actual command was `/ba-brief`, not `/brief` as the README promised. All 21 files now use bare names (`name: brief`, `name: srs`, ...), and the slash commands `/brief`, `/srs`, `/ac`, … finally match the documentation.
|
|
88
|
+
- **Manifest replaces sentinel.** `runInstall` now writes `.ba-toolkit-manifest.json` listing every item it owns at the destination root. `cmdUninstall` and `cmdUpgrade` read the manifest and remove **only** those items — the destination directory is now shared with the user's other skills, so we can never `rm -rf` the whole root. Without a manifest, uninstall and upgrade refuse to do anything destructive. Manifest format:
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"version": "2.0.0",
|
|
92
|
+
"installedAt": "2026-04-09T...",
|
|
93
|
+
"format": "skill",
|
|
94
|
+
"items": ["brief", "srs", "ac", ..., "references"]
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
- **Legacy v1.x detection.** `runInstall`, `cmdUpgrade`, `cmdUninstall`, and `cmdStatus` now detect the old `ba-toolkit/` wrapper folder if it's still on disk and print a yellow warning with the exact `rm -rf` command to clean it up. The legacy folder is never auto-deleted — it might contain user state.
|
|
98
|
+
|
|
99
|
+
### Migration from v1.x
|
|
100
|
+
|
|
101
|
+
If you have a v1.x install on disk, the legacy `ba-toolkit/` wrapper will be sitting in the same parent directory as the new layout — it doesn't conflict with v2.0 file-wise, but it never worked, so you should remove it:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Manual cleanup (one-time, per agent that had a v1.x install):
|
|
105
|
+
rm -rf .claude/skills/ba-toolkit # claude-code project-level
|
|
106
|
+
rm -rf ~/.claude/skills/ba-toolkit # claude-code global
|
|
107
|
+
rm -rf ~/.codex/skills/ba-toolkit # codex
|
|
108
|
+
rm -rf .gemini/skills/ba-toolkit # gemini project-level
|
|
109
|
+
rm -rf ~/.gemini/skills/ba-toolkit # gemini global
|
|
110
|
+
rm -rf .cursor/rules/ba-toolkit # cursor
|
|
111
|
+
rm -rf .windsurf/rules/ba-toolkit # windsurf
|
|
112
|
+
|
|
113
|
+
# Then reinstall with v2.0:
|
|
114
|
+
ba-toolkit install --for claude-code
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`ba-toolkit status` lists any legacy wrappers it finds on the system as a warning row, so you can audit before cleaning up.
|
|
118
|
+
|
|
119
|
+
### Internal
|
|
120
|
+
|
|
121
|
+
- **`copySkills(srcRoot, destRoot, { format })` replaces the previous `copyDir` + `skillToMdc`** combo. The new copy logic understands the per-format layout (folder-per-skill for `skill` format, flat `.mdc` files for `mdc` format) and reads the SKILL.md frontmatter to derive the canonical skill name from the `name:` field. References go to `<destRoot>/references/` regardless of format — non-`.mdc` files there are ignored by Cursor's rule loader.
|
|
122
|
+
- **Manifest helpers** (`readManifest`, `writeManifest`, `removeManifestItems`) replace the previous `readSentinel` / `writeSentinel`. The sentinel was a 2-field marker; the manifest is also the source of truth for what to remove on uninstall.
|
|
123
|
+
- **`detectLegacyInstall(agent)`** helper, used by every command that touches the install layout.
|
|
124
|
+
- **Test count 91 → 95.** Sentinel tests replaced with manifest tests; new tests for `detectLegacyInstall` (positive and negative cases) and `skillToMdcContent` (frontmatter + body extraction). All 95 tests pass.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
14
128
|
## [1.5.0] — 2026-04-08
|
|
15
129
|
|
|
16
130
|
### Added
|
|
@@ -294,7 +408,9 @@ CI scripts that relied on the old behaviour (`init` creates files only, `install
|
|
|
294
408
|
|
|
295
409
|
---
|
|
296
410
|
|
|
297
|
-
[Unreleased]: https://github.com/TakhirKudusov/ba-toolkit/compare/
|
|
411
|
+
[Unreleased]: https://github.com/TakhirKudusov/ba-toolkit/compare/v3.0.0...HEAD
|
|
412
|
+
[3.0.0]: https://github.com/TakhirKudusov/ba-toolkit/compare/v2.0.0...v3.0.0
|
|
413
|
+
[2.0.0]: https://github.com/TakhirKudusov/ba-toolkit/compare/v1.5.0...v2.0.0
|
|
298
414
|
[1.5.0]: https://github.com/TakhirKudusov/ba-toolkit/compare/v1.4.0...v1.5.0
|
|
299
415
|
[1.4.0]: https://github.com/TakhirKudusov/ba-toolkit/compare/v1.3.2...v1.4.0
|
|
300
416
|
[1.3.2]: https://github.com/TakhirKudusov/ba-toolkit/compare/v1.3.1...v1.3.2
|
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ Structured BA pipeline for AI coding agents — brief to handoff, 21 skills, 9 d
|
|
|
13
13
|
<img src="https://img.shields.io/badge/Claude_Code-✓-6C5CE7" alt="Claude Code">
|
|
14
14
|
<img src="https://img.shields.io/badge/Codex_CLI-✓-00D26A" alt="Codex CLI">
|
|
15
15
|
<img src="https://img.shields.io/badge/Gemini_CLI-✓-4285F4" alt="Gemini CLI">
|
|
16
|
-
<img src="https://img.shields.io/badge/Cursor
|
|
17
|
-
<img src="https://img.shields.io/badge/Windsurf
|
|
16
|
+
<img src="https://img.shields.io/badge/Cursor-✓-F5A623" alt="Cursor">
|
|
17
|
+
<img src="https://img.shields.io/badge/Windsurf-✓-1ABCFE" alt="Windsurf">
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
@@ -46,7 +46,7 @@ npm install -g @kudusov.takhir/ba-toolkit
|
|
|
46
46
|
ba-toolkit init
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
Supported agents: `claude-code`, `codex`, `gemini`, `cursor`, `windsurf`.
|
|
49
|
+
Supported agents: `claude-code`, `codex`, `gemini`, `cursor`, `windsurf`. All five use the native Agent Skills format (folder-per-skill with `SKILL.md`) — Claude Code at `.claude/skills/`, Codex at `~/.codex/skills/`, Gemini at `.gemini/skills/`, Cursor at `.cursor/skills/`, Windsurf at `.windsurf/skills/`. Pass `--dry-run` to preview the install step without writing files, or `--no-install` to create only the project structure and install skills later with `ba-toolkit install --for <agent>`.
|
|
50
50
|
|
|
51
51
|
`ba-toolkit --help` shows the full CLI reference. Zero runtime dependencies — only Node.js ≥ 18.
|
|
52
52
|
|
|
@@ -55,55 +55,60 @@ Supported agents: `claude-code`, `codex`, `gemini`, `cursor`, `windsurf`. Cursor
|
|
|
55
55
|
|
|
56
56
|
Use these if you can't use npm or want to track a specific git commit.
|
|
57
57
|
|
|
58
|
+
**Important — v2.0 layout:** the skills go directly under the agent's skills root, not nested under a `ba-toolkit/` wrapper folder. Versions before v2.0 used a wrapper, which made every skill invisible to the agent. If you're upgrading from v1.x, remove the legacy wrapper folder first.
|
|
59
|
+
|
|
58
60
|
### Claude Code CLI
|
|
59
61
|
|
|
60
62
|
```bash
|
|
61
63
|
git clone https://github.com/TakhirKudusov/ba-toolkit.git
|
|
62
|
-
cp -r ba-toolkit/skills/ /path/to/project/.claude/skills/ba-toolkit/
|
|
63
64
|
|
|
64
|
-
#
|
|
65
|
-
|
|
65
|
+
# Project-level: copy the contents of skills/ into .claude/skills/
|
|
66
|
+
mkdir -p /path/to/project/.claude/skills
|
|
67
|
+
cp -R ba-toolkit/skills/. /path/to/project/.claude/skills/
|
|
68
|
+
|
|
69
|
+
# Or globally:
|
|
70
|
+
mkdir -p ~/.claude/skills
|
|
71
|
+
cp -R ba-toolkit/skills/. ~/.claude/skills/
|
|
66
72
|
```
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
Each skill folder (`brief/`, `srs/`, …) lands as a direct child of `.claude/skills/`, and the `references/` folder sits next to them. If you have other skills installed in the same directory, they're left alone.
|
|
69
75
|
|
|
70
76
|
### OpenAI Codex CLI
|
|
71
77
|
|
|
72
78
|
Skills load from `$CODEX_HOME/skills` (default `~/.codex/skills`):
|
|
73
79
|
|
|
74
80
|
```bash
|
|
75
|
-
|
|
81
|
+
mkdir -p ~/.codex/skills
|
|
82
|
+
cp -R ba-toolkit/skills/. ~/.codex/skills/
|
|
76
83
|
```
|
|
77
84
|
|
|
78
|
-
If you use a custom Codex home, set `CODEX_HOME` and copy under `$CODEX_HOME/skills
|
|
85
|
+
If you use a custom Codex home, set `CODEX_HOME` and copy under `$CODEX_HOME/skills/`.
|
|
79
86
|
|
|
80
87
|
### Google Gemini CLI
|
|
81
88
|
|
|
82
89
|
```bash
|
|
83
90
|
# User-wide (all projects)
|
|
84
|
-
|
|
91
|
+
mkdir -p ~/.gemini/skills
|
|
92
|
+
cp -R ba-toolkit/skills/. ~/.gemini/skills/
|
|
85
93
|
|
|
86
94
|
# Or project-only
|
|
87
|
-
|
|
95
|
+
mkdir -p /path/to/project/.gemini/skills
|
|
96
|
+
cp -R ba-toolkit/skills/. /path/to/project/.gemini/skills/
|
|
88
97
|
```
|
|
89
98
|
|
|
90
99
|
Reload the CLI after copying.
|
|
91
100
|
|
|
92
|
-
### Cursor
|
|
101
|
+
### Cursor
|
|
93
102
|
|
|
94
|
-
|
|
103
|
+
Cursor has two separate features — Rules (`.cursor/rules/*.mdc`) and [Agent Skills](https://cursor.com/docs/skills) (`.cursor/skills/<skill>/SKILL.md`). BA Toolkit is a set of skills, not rules, so `ba-toolkit install --for cursor` drops the 21 skills directly into `.cursor/skills/` using the native folder-per-skill `SKILL.md` format — no conversion needed. Reload the Cursor window to pick them up.
|
|
95
104
|
|
|
96
|
-
|
|
97
|
-
# Option 1: community converter
|
|
98
|
-
# https://github.com/alirezarezvani/claude-skills/blob/main/scripts/convert.sh
|
|
99
|
-
./convert.sh --tool cursor --target /path/to/project
|
|
100
|
-
./convert.sh --tool windsurf --target /path/to/project
|
|
105
|
+
### Windsurf
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
Windsurf's [Agent Skills](https://docs.windsurf.com/windsurf/cascade/skills) feature loads skills from `.windsurf/skills/<skill>/SKILL.md`, the same folder-per-skill layout as Claude Code and Cursor. `ba-toolkit install --for windsurf` writes the 21 skills there natively. Reload the Windsurf window to pick them up.
|
|
108
|
+
|
|
109
|
+
### Aider
|
|
105
110
|
|
|
106
|
-
|
|
111
|
+
Aider has no native skills feature. Convert manually with the community script at <https://github.com/alirezarezvani/claude-skills/blob/main/scripts/convert.sh> or ask your AI agent to convert `SKILL.md` files to the target format.
|
|
107
112
|
|
|
108
113
|
### Starting a new project (shell scripts)
|
|
109
114
|
|
|
@@ -193,14 +198,14 @@ BA Toolkit uses the open Agent Skills specification (`SKILL.md` format) publishe
|
|
|
193
198
|
|
|
194
199
|
| Platform | Support | Installation |
|
|
195
200
|
|----------|:-------:|-------------|
|
|
196
|
-
| **Claude Code** | Native | `cp -
|
|
197
|
-
| **OpenAI Codex CLI** | Native | `cp -
|
|
198
|
-
| **Gemini CLI** | Native | Copy `skills
|
|
199
|
-
| **Cursor** |
|
|
200
|
-
| **Windsurf** |
|
|
201
|
+
| **Claude Code** | Native | `cp -R skills/. .claude/skills/` |
|
|
202
|
+
| **OpenAI Codex CLI** | Native | `cp -R skills/. ~/.codex/skills/` |
|
|
203
|
+
| **Gemini CLI** | Native | Copy `skills/.` contents to `~/.gemini/skills/` (user) or `.gemini/skills/` (workspace) |
|
|
204
|
+
| **Cursor** | Native | Copy `skills/.` contents to `.cursor/skills/` |
|
|
205
|
+
| **Windsurf** | Native | Copy `skills/.` contents to `.windsurf/skills/` |
|
|
201
206
|
| **Aider** | Convert | `SKILL.md` → conventions file |
|
|
202
207
|
|
|
203
|
-
|
|
208
|
+
All five officially supported platforms read `SKILL.md` as-is — no conversion. `ba-toolkit install --for <agent>` lands skills directly in the agent's native skills root.
|
|
204
209
|
|
|
205
210
|
Skills do not hardcode platform paths — they reference `skills/references/environment.md`, which contains the output directory logic for each platform. Edit that file to customize; all skills pick up the change automatically.
|
|
206
211
|
|