@skilly-hand/skilly-hand 0.8.1 → 0.10.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
@@ -16,6 +16,42 @@ All notable changes to this project are documented in this file.
16
16
  ### Removed
17
17
  - _None._
18
18
 
19
+ ## [0.10.0] - 2026-04-04
20
+ [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.10.0)
21
+
22
+ ### Added
23
+ - Added support for `antigravity`, `windsurf`, and `trae` agent targets across install flows.
24
+ - Added native install target coverage for Antigravity (`.agents/skills`, `.agent/skills`, and `.agents/rules/skilly-hand.md`), Windsurf (`.windsurf/skills`), and TRAE (`.trae/skills`).
25
+
26
+ ### Changed
27
+ - Refactored installer agent target handling to use centralized install profiles for instruction files and skill symlink paths.
28
+ - Updated CLI help output and repository documentation to reflect expanded assistant compatibility and install targets.
29
+ - Expanded tests for new agent support, install/uninstall behavior, and shared `AGENTS.md` target deduplication.
30
+
31
+ ### Fixed
32
+ - _None._
33
+
34
+ ### Removed
35
+ - _None._
36
+
37
+ ## [0.9.0] - 2026-04-04
38
+ [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.9.0)
39
+
40
+ ### Added
41
+
42
+ - `standard` agent option: installs `AGENTS.md` and a `skills/` symlink directly at the project root with no vendor-specific folder (`.claude/`, `.codex/`, etc.).
43
+
44
+ ### Changed
45
+
46
+ - Interactive agent selection now pre-checks only `standard` instead of all five agents, so accepting defaults gives a clean, agent-agnostic installation.
47
+ - `codex` and `standard` both produce `AGENTS.md`; when both are selected the file is written once.
48
+
49
+ ### Fixed
50
+ - _None._
51
+
52
+ ### Removed
53
+ - _None._
54
+
19
55
  ## [0.8.1] - 2026-04-04
20
56
  [View on npm](https://www.npmjs.com/package/@skilly-hand/skilly-hand/v/0.8.1)
21
57
 
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,20 @@ 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` |
123
+
124
+ ### AI Integrated Structures
125
+
126
+ - Antigravity: rules at `~/.gemini/GEMINI.md` (global) and workspace `.agents/rules/` (with `.agent/rules/` backward support); skills at `.agents/skills/` or `~/.gemini/antigravity/skills/`; MCP config at `~/.gemini/antigravity/mcp_config.json`.
127
+ - Windsurf: AGENTS-based directory scoping via `AGENTS.md`, rules in `.windsurf/rules/`, skills in `.windsurf/skills/` (plus `.agents/skills/` compatibility), MCP config at `~/.codeium/mcp_config.json`.
128
+ - TRAE: project rules in `.trae/rules/` with `AGENTS.md` support, skills in `.trae/skills/` (optional `.agents/skills/` compatibility toggle), MCP project config via `.trae/mcp.json` and manual/marketplace management in-app.
120
129
 
121
130
  ---
122
131
 
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.8.1",
3
+ "version": "0.10.0",
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
 
@@ -352,7 +352,7 @@ async function runInteractiveInstall({
352
352
  choices: services.defaultAgents.map((agent) => ({
353
353
  value: agent,
354
354
  name: agent,
355
- checked: true
355
+ checked: agent === "standard"
356
356
  }))
357
357
  });
358
358
 
@@ -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 = ["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("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,23 +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
- if (selectedAgents.includes("codex")) {
262
- await ensureSymlink(path.join(cwd, ".codex", "skills"), skillsSourcePath, backupsDir, lockData);
263
- }
264
- if (selectedAgents.includes("claude")) {
265
- await ensureSymlink(path.join(cwd, ".claude", "skills"), skillsSourcePath, backupsDir, lockData);
266
- }
267
- if (selectedAgents.includes("gemini")) {
268
- await ensureSymlink(path.join(cwd, ".gemini", "skills"), skillsSourcePath, backupsDir, lockData);
269
- }
270
- if (selectedAgents.includes("cursor")) {
271
- await ensureSymlink(path.join(cwd, ".cursor", "skills"), skillsSourcePath, backupsDir, lockData);
299
+ for (const pathParts of skillTargets) {
300
+ await ensureSymlink(path.join(cwd, ...pathParts), skillsSourcePath, backupsDir, lockData);
272
301
  }
273
302
 
274
303
  await writeJson(lockPath, lockData);