Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ This copies skills into:
- `.github/skills/` for VS Code / GitHub Copilot
- `.claude/skills/` for Claude Code (project-level)
- `.cursor/skills/` for Cursor (project-level)
- `.agent/skills/` for Antigravity
- `.gemini/skills/` for Gemini CLI
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fellyph this looks incorrect to me. The install script here doesn't appear to support these targets. Am I missing something?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have send a fix for it


### Install globally for Cursor

Expand Down
12 changes: 8 additions & 4 deletions shared/scripts/skillpack-build.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@ function usage() {
process.stderr.write(
[
"Usage:",
" node shared/scripts/skillpack-build.mjs [--out=dist] [--targets=codex,vscode,claude,cursor] [--skills=skill1,skill2] [--clean]",
" node shared/scripts/skillpack-build.mjs [--out=dist] [--targets=codex,vscode,claude,cursor,antigravity,gemini] [--skills=skill1,skill2] [--clean]",
"",
"Outputs:",
" - <out>/codex/.codex/skills/<skill>/SKILL.md",
" - <out>/vscode/.github/skills/<skill>/SKILL.md",
" - <out>/claude/.claude/skills/<skill>/SKILL.md",
" - <out>/cursor/.cursor/skills/<skill>/SKILL.md",
" - <out>/antigravity/.agent/skills/<skill>/SKILL.md",
" - <out>/gemini/.gemini/skills/<skill>/SKILL.md",
"",
"Options:",
" --targets Comma-separated list of targets (codex, vscode, claude, cursor). Default: codex,vscode,claude,cursor",
" --targets Comma-separated list of targets (codex, vscode, claude, cursor, antigravity, gemini). Default: codex,vscode,claude,cursor,antigravity,gemini",
" --skills Comma-separated list of skill names to build. Default: all skills",
" --clean Remove target directories before building",
"",
Expand All @@ -26,7 +28,7 @@ function usage() {
}

function parseArgs(argv) {
const args = { out: "dist", targets: ["codex", "vscode", "claude", "cursor"], skills: [], clean: false };
const args = { out: "dist", targets: ["codex", "vscode", "claude", "cursor", "antigravity", "gemini"], skills: [], clean: false };
for (const a of argv) {
if (a === "--help" || a === "-h") args.help = true;
else if (a === "--clean") args.clean = true;
Expand Down Expand Up @@ -101,6 +103,8 @@ function buildTarget({ repoRoot, outDir, target, skillDirs }) {
vscode: path.join(outDir, "vscode", ".github", "skills"),
claude: path.join(outDir, "claude", ".claude", "skills"),
cursor: path.join(outDir, "cursor", ".cursor", "skills"),
antigravity: path.join(outDir, "antigravity", ".agent", "skills"),
gemini: path.join(outDir, "gemini", ".gemini", "skills"),
};
const destSkillsRoot = rootByTarget[target];
assert(destSkillsRoot, `Unknown target: ${target}`);
Expand All @@ -117,7 +121,7 @@ function buildTarget({ repoRoot, outDir, target, skillDirs }) {
process.stdout.write(`OK: built ${target} skillpack at ${rel}\n`);
}

const VALID_TARGETS = ["codex", "vscode", "claude", "cursor"];
const VALID_TARGETS = ["codex", "vscode", "claude", "cursor", "antigravity", "gemini"];

function main() {
const args = parseArgs(process.argv.slice(2));
Expand Down
12 changes: 9 additions & 3 deletions shared/scripts/skillpack-install.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ function usage() {
"Options:",
" --dest=<path> Destination repo root (required, unless using --global)",
" --from=<path> Source directory (default: dist)",
" --targets=<list> Comma-separated targets: codex, vscode, claude, claude-global, cursor, cursor-global (default: codex,vscode)",
" --targets=<list> Comma-separated targets: codex, vscode, claude, claude-global, cursor, cursor-global, antigravity, gemini (default: codex,vscode)",
" --skills=<list> Comma-separated skill names to install (default: all)",
" --mode=<mode> 'replace' (default) or 'merge'",
" --global Shorthand for --targets=claude-global (installs to ~/.claude/skills)",
Expand All @@ -25,6 +25,8 @@ function usage() {
" claude-global Install to ~/.claude/skills/ (user-level, ignores --dest)",
" cursor Install to <dest>/.cursor/skills/",
" cursor-global Install to ~/.cursor/skills/ (user-level, ignores --dest)",
" antigravity Install to <dest>/.agent/skills/",
" gemini Install to <dest>/.gemini/skills/",
"",
"Examples:",
" # Build and install to a WordPress project",
Expand Down Expand Up @@ -133,7 +135,7 @@ function listSkillDirs(skillsRoot) {
.filter((d) => fs.existsSync(path.join(d, "SKILL.md")));
}

const VALID_TARGETS = ["codex", "vscode", "claude", "claude-global", "cursor", "cursor-global"];
const VALID_TARGETS = ["codex", "vscode", "claude", "claude-global", "cursor", "cursor-global", "antigravity", "gemini"];

// Map target to source subdirectory in dist
function getSourceDir(fromDir, target) {
Expand All @@ -145,6 +147,8 @@ function getSourceDir(fromDir, target) {
vscode: path.join(fromDir, "vscode", ".github", "skills"),
claude: path.join(fromDir, "claude", ".claude", "skills"),
cursor: path.join(fromDir, "cursor", ".cursor", "skills"),
antigravity: path.join(fromDir, "antigravity", ".agent", "skills"),
gemini: path.join(fromDir, "gemini", ".gemini", "skills"),
};
return targetDirMap[sourceTarget];
}
Expand All @@ -165,6 +169,8 @@ function getDestDir(destRepoRoot, target) {
vscode: path.join(destRepoRoot, ".github", "skills"),
claude: path.join(destRepoRoot, ".claude", "skills"),
cursor: path.join(destRepoRoot, ".cursor", "skills"),
antigravity: path.join(destRepoRoot, ".agent", "skills"),
gemini: path.join(destRepoRoot, ".gemini", "skills"),
};
return destDirMap[target];
}
Expand Down Expand Up @@ -220,7 +226,7 @@ function installTarget({ fromDir, destRepoRoot, target, skillsFilter, mode, dryR

function listAvailableSkills(fromDir) {
// Check all possible target sources
const sources = ["codex", "vscode", "claude", "cursor"]
const sources = ["codex", "vscode", "claude", "cursor", "antigravity", "gemini"]
.map((t) => getSourceDir(fromDir, t))
.filter((p) => fs.existsSync(p));

Expand Down
Loading