@skilly-hand/skilly-hand 0.9.0 → 0.10.2

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
@@ -16,6 +16,54 @@ All notable changes to this project are documented in this file.
16
16
  ### Removed
17
17
  - _None._
18
18
 
19
+ ## [0.10.2] - 2026-04-04
20
+ [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.10.2)
21
+
22
+ ### Added
23
+ - _None._
24
+
25
+ ### Changed
26
+ - _None._
27
+
28
+ ### Fixed
29
+ - _None._
30
+
31
+ ### Removed
32
+ - _None._
33
+
34
+ ## [0.10.1] - 2026-04-04
35
+ [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.10.1)
36
+
37
+ ### Added
38
+ - _None._
39
+
40
+ ### Changed
41
+ - Removed the `AI Integrated Structures` subsection from `README.md` to keep assistant compatibility docs focused on current install targets.
42
+
43
+ ### Fixed
44
+ - _None._
45
+
46
+ ### Removed
47
+ - _None._
48
+
49
+ ## [0.10.0] - 2026-04-04
50
+ [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.10.0)
51
+
52
+ ### Added
53
+ - Added support for `antigravity`, `windsurf`, and `trae` agent targets across install flows.
54
+ - Added native install target coverage for Antigravity (`.agents/skills`, `.agent/skills`, and `.agents/rules/skilly-hand.md`), Windsurf (`.windsurf/skills`), and TRAE (`.trae/skills`).
55
+
56
+ ### Changed
57
+ - Refactored installer agent target handling to use centralized install profiles for instruction files and skill symlink paths.
58
+ - Updated CLI help output and repository documentation to reflect expanded assistant compatibility and install targets.
59
+ - Expanded tests for new agent support, install/uninstall behavior, and shared `AGENTS.md` target deduplication.
60
+
61
+ ### Fixed
62
+ - _None._
63
+
64
+ ### Removed
65
+ - _None._
66
+
19
67
  ## [0.9.0] - 2026-04-04
20
68
  [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.9.0)
21
69
 
package/README.md CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  - **Installs portable AI agent skills** into your project from a curated catalog
26
26
  - **Auto-detects your stack** and recommends relevant skills automatically
27
- - **Supports every major coding assistant** — Claude Code, OpenCode, Cursor, Copilot, Gemini, and Codex — from a single command
27
+ - **Supports every major coding assistant** — Claude Code, OpenCode, Cursor, Copilot, Gemini, Codex, Antigravity, Windsurf, and TRAE — from a single command
28
28
  - **Ships a curated core skill set** including orchestration, SDD workflow, and Figma MCP onboarding
29
29
  - **Preserves original agentic structures** in `source/legacy/` as a migration reference
30
30
 
@@ -112,11 +112,14 @@ Skills are installed into `.skilly-hand/` with the correct format for each tool:
112
112
 
113
113
  | Tool | Install Target |
114
114
  | ---- | -------------- |
115
+ | Antigravity | `.agents/skills/`, `.agent/skills/` (compat), `.agents/rules/skilly-hand.md`, `AGENTS.md` |
115
116
  | Claude Code / OpenCode | `.claude/skills/` |
116
117
  | Cursor | `.cursor/skills/` |
117
118
  | GitHub Copilot | `.github/copilot-instructions.md` |
118
119
  | Gemini CLI | `.gemini/skills/` |
119
120
  | Codex (OpenAI) | `.codex/skills/` |
121
+ | Windsurf | `.windsurf/skills/`, `AGENTS.md` |
122
+ | TRAE | `.trae/skills/`, `AGENTS.md` |
120
123
 
121
124
  ---
122
125
 
package/catalog/README.md CHANGED
@@ -8,8 +8,8 @@ Published portable skills consumed by the `skilly-hand` CLI.
8
8
  | `agents-root-orchestrator` | Author root AGENTS.md as a Where/What/When orchestrator that routes tasks and skill invocation clearly. | core, workflow, orchestration | all |
9
9
  | `angular-guidelines` | Guide Angular code generation and review using latest stable Angular verification and modern framework best practices. | angular, frontend, workflow, best-practices | all |
10
10
  | `figma-mcp-0to1` | Guide users from Figma MCP installation and authentication through first canvas creation, with function-level tool coverage and operational recovery patterns. | figma, mcp, workflow, design | all |
11
- | `frontend-design` | Project-aware frontend design skill that detects the existing tech stack, UI libraries, CSS variables, and design tokens before proposing any UI work. Never invents design decisions — reads the project first, confirms with the user, then designs. | frontend, design, workflow, ui | all |
12
- | `life-guard` | Review code, decisions, and artifacts through a multi-perspective committee and a domain expert safety guard, then synthesize a structured verdict. | core, review, workflow, quality | all |
11
+ | `frontend-design` | Project-aware frontend design skill that detects the existing tech stack, UI libraries, CSS variables, and design tokens before proposing any UI work. | frontend, design, workflow, ui | all |
12
+ | `life-guard` | Review code, decisions, and artifacts through a multi-perspective committee and a domain expert safety guard, then synthesize a structured verdict. | core, workflow, review, quality | all |
13
13
  | `skill-creator` | Create and standardize AI skills with reusable structure, metadata rules, and templates. | core, workflow, authoring | all |
14
14
  | `spec-driven-development` | Plan, execute, and verify multi-step work through versioned specs with small, testable tasks. | core, workflow, planning | all |
15
15
  | `test-driven-development` | Guide implementation using the RED → GREEN → REFACTOR TDD cycle: write a failing test first, write the minimum code to pass, then refactor while tests stay green. | testing, workflow, quality, core | all |
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["manual"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-04",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["always"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-03",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["angular"],
8
8
  "detectionTriggers": ["auto"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-03",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["manual"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-03",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["manual"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-04",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["manual"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-04",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["always"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-03-27",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["always"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-03",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["manual"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-04",
@@ -7,7 +7,7 @@
7
7
  "detectors": ["always"],
8
8
  "detectionTriggers": ["always"],
9
9
  "installsFor": ["all"],
10
- "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot"],
10
+ "agentSupport": ["codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"],
11
11
  "skillMetadata": {
12
12
  "author": "skilly-hand",
13
13
  "last-edit": "2026-04-03",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skilly-hand/skilly-hand",
3
- "version": "0.9.0",
3
+ "version": "0.10.2",
4
4
  "license": "CC-BY-NC-4.0",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -91,7 +91,7 @@ function buildHelpText(renderer, appVersion) {
91
91
  "--json Emit stable JSON output for automation",
92
92
  "--yes, -y Skip install/uninstall confirmations",
93
93
  "--verbose, -v Reserved for future debug detail",
94
- "--agent, -a <name> codex|claude|cursor|gemini|copilot (repeatable)",
94
+ "--agent, -a <name> standard|codex|claude|cursor|gemini|copilot|antigravity|windsurf|trae (repeatable)",
95
95
  "--cwd <path> Project root (defaults to current directory)",
96
96
  "--include <tag> Include only skills matching all tags",
97
97
  "--exclude <tag> Exclude skills matching any tag",
@@ -102,7 +102,7 @@ function buildHelpText(renderer, appVersion) {
102
102
  "npx skilly-hand",
103
103
  "npx skilly-hand install --dry-run",
104
104
  "npx skilly-hand detect --json",
105
- "npx skilly-hand install --agent codex --agent claude",
105
+ "npx skilly-hand install --agent antigravity --agent windsurf",
106
106
  "npx skilly-hand uninstall --yes"
107
107
  ], { bullet: "-" }));
108
108
 
@@ -3,8 +3,45 @@ import path from "node:path";
3
3
  import { copySkillTo, loadAllSkills, renderAgentsMarkdown, verifyCatalogFiles } from "../../catalog/src/index.js";
4
4
  import { detectProject, inspectProjectFiles } from "../../detectors/src/index.js";
5
5
 
6
- export const DEFAULT_AGENTS = ["standard", "codex", "claude", "cursor", "gemini", "copilot"];
6
+ export const DEFAULT_AGENTS = ["standard", "codex", "claude", "cursor", "gemini", "copilot", "antigravity", "windsurf", "trae"];
7
7
  const MANAGED_MARKER = "<!-- Managed by skilly-hand.";
8
+ const AGENT_INSTALL_PROFILES = {
9
+ standard: {
10
+ instructionFiles: [["AGENTS.md"]],
11
+ skillPaths: [["skills"]]
12
+ },
13
+ codex: {
14
+ instructionFiles: [["AGENTS.md"]],
15
+ skillPaths: [[".codex", "skills"]]
16
+ },
17
+ claude: {
18
+ instructionFiles: [["CLAUDE.md"]],
19
+ skillPaths: [[".claude", "skills"]]
20
+ },
21
+ cursor: {
22
+ instructionFiles: [["cursor-instructions.md"]],
23
+ skillPaths: [[".cursor", "skills"]]
24
+ },
25
+ gemini: {
26
+ instructionFiles: [["GEMINI.md"]],
27
+ skillPaths: [[".gemini", "skills"]]
28
+ },
29
+ copilot: {
30
+ instructionFiles: [[".github", "copilot-instructions.md"]]
31
+ },
32
+ antigravity: {
33
+ instructionFiles: [["AGENTS.md"], [".agents", "rules", "skilly-hand.md"]],
34
+ skillPaths: [[".agents", "skills"], [".agent", "skills"]]
35
+ },
36
+ windsurf: {
37
+ instructionFiles: [["AGENTS.md"]],
38
+ skillPaths: [[".windsurf", "skills"]]
39
+ },
40
+ trae: {
41
+ instructionFiles: [["AGENTS.md"]],
42
+ skillPaths: [[".trae", "skills"]]
43
+ }
44
+ };
8
45
 
9
46
  function uniq(values) {
10
47
  return [...new Set(values)];
@@ -168,30 +205,29 @@ async function ensureSymlink(targetPath, sourcePath, backupsDir, lockData) {
168
205
  lockData.managedSymlinks.push(targetPath);
169
206
  }
170
207
 
171
- function buildInstructionFiles({ agentsMarkdown, selectedAgents }) {
172
- const files = [];
173
-
174
- if (selectedAgents.includes("standard") || selectedAgents.includes("codex")) {
175
- files.push({ pathParts: ["AGENTS.md"], content: agentsMarkdown });
176
- }
177
-
178
- if (selectedAgents.includes("claude")) {
179
- files.push({ pathParts: ["CLAUDE.md"], content: agentsMarkdown });
180
- }
208
+ function buildInstallTargets(selectedAgents) {
209
+ const instructionTargets = new Map();
210
+ const skillTargets = new Map();
181
211
 
182
- if (selectedAgents.includes("gemini")) {
183
- files.push({ pathParts: ["GEMINI.md"], content: agentsMarkdown });
184
- }
212
+ for (const agent of selectedAgents) {
213
+ const profile = AGENT_INSTALL_PROFILES[agent];
214
+ if (!profile) {
215
+ continue;
216
+ }
185
217
 
186
- if (selectedAgents.includes("cursor")) {
187
- files.push({ pathParts: ["cursor-instructions.md"], content: agentsMarkdown });
188
- }
218
+ for (const pathParts of profile.instructionFiles || []) {
219
+ instructionTargets.set(path.join(...pathParts), pathParts);
220
+ }
189
221
 
190
- if (selectedAgents.includes("copilot")) {
191
- files.push({ pathParts: [".github", "copilot-instructions.md"], content: agentsMarkdown });
222
+ for (const pathParts of profile.skillPaths || []) {
223
+ skillTargets.set(path.join(...pathParts), pathParts);
224
+ }
192
225
  }
193
226
 
194
- return files;
227
+ return {
228
+ instructionTargets: [...instructionTargets.values()],
229
+ skillTargets: [...skillTargets.values()]
230
+ };
195
231
  }
196
232
 
197
233
  export async function installProject({
@@ -252,24 +288,16 @@ export async function installProject({
252
288
 
253
289
  await writeFile(path.join(installRoot, "AGENTS.md"), agentsMarkdown, "utf8");
254
290
 
255
- for (const instructionFile of buildInstructionFiles({ agentsMarkdown, selectedAgents })) {
256
- await ensureManagedTextFile(path.join(cwd, ...instructionFile.pathParts), instructionFile.content, backupsDir, lockData);
291
+ const { instructionTargets, skillTargets } = buildInstallTargets(selectedAgents);
292
+
293
+ for (const pathParts of instructionTargets) {
294
+ await ensureManagedTextFile(path.join(cwd, ...pathParts), agentsMarkdown, backupsDir, lockData);
257
295
  }
258
296
 
259
297
  const skillsSourcePath = path.join(installRoot, "catalog");
260
298
 
261
- const agentSkillsPaths = {
262
- standard: "skills",
263
- codex: path.join(".codex", "skills"),
264
- claude: path.join(".claude", "skills"),
265
- gemini: path.join(".gemini", "skills"),
266
- cursor: path.join(".cursor", "skills")
267
- };
268
-
269
- for (const agent of selectedAgents) {
270
- if (agentSkillsPaths[agent]) {
271
- await ensureSymlink(path.join(cwd, agentSkillsPaths[agent]), skillsSourcePath, backupsDir, lockData);
272
- }
299
+ for (const pathParts of skillTargets) {
300
+ await ensureSymlink(path.join(cwd, ...pathParts), skillsSourcePath, backupsDir, lockData);
273
301
  }
274
302
 
275
303
  await writeJson(lockPath, lockData);