Restrict deploy targets to .agents and .claude skill dirs

Remove $HOME/.cline/skills from the default deploy targets everywhere
(SKILL.md, deploy action, CLI help, Taskfiles), document what $HOME is
and how it is resolved, and restore the execute bit on the cli api
scripts (build.sh, scaffold.sh, validate.sh) so 'task build' works.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-24 13:16:05 +03:00
co-authored by Claude Fable 5
parent 6042272ccc
commit bb184845b2
8 changed files with 18 additions and 10 deletions
+9 -4
View File
@@ -8,7 +8,7 @@ description: >
procedure, or set of instructions into a portable skill that works across Claude Code, procedure, or set of instructions into a portable skill that works across Claude Code,
GitHub Copilot, OpenAI Codex, and other compatible agents — or wants to deploy, install, GitHub Copilot, OpenAI Codex, and other compatible agents — or wants to deploy, install,
publish, or symlink any skill into the agent skill directories ($HOME/.agents/skills, publish, or symlink any skill into the agent skill directories ($HOME/.agents/skills,
$HOME/.claude/skills, $HOME/.cline/skills), even if they just say "make this skill available". $HOME/.claude/skills), even if they just say "make this skill available".
license: Proprietary license: Proprietary
metadata: metadata:
author: workspace-swiss-knife author: workspace-swiss-knife
@@ -83,7 +83,7 @@ task scaffold -- --skill-name="my-skill" --output-dir="/path/to/.agents/skills"
# or directly via cli module: # or directly via cli module:
task cli:scaffold -- --skill-name="my-skill" --output-dir="/path/to/.agents/skills" task cli:scaffold -- --skill-name="my-skill" --output-dir="/path/to/.agents/skills"
# Deploy a skill into $HOME/.agents/skills, $HOME/.claude/skills and $HOME/.cline/skills # Deploy a skill into $HOME/.agents/skills and $HOME/.claude/skills
task deploy -- --skill-dir="/absolute/path/to/skill" task deploy -- --skill-dir="/absolute/path/to/skill"
# copy instead of symlink, replace existing real directories: # copy instead of symlink, replace existing real directories:
task deploy -- --skill-dir="/absolute/path/to/skill" --mode=copy --force task deploy -- --skill-dir="/absolute/path/to/skill" --mode=copy --force
@@ -209,7 +209,12 @@ resolves to **absolute paths** and targets both canonical agent skill directorie
- `$HOME/.agents/skills/<skill-name>` - `$HOME/.agents/skills/<skill-name>`
- `$HOME/.claude/skills/<skill-name>` - `$HOME/.claude/skills/<skill-name>`
- `$HOME/.cline/skills/<skill-name>`
**About `$HOME`:** `$HOME` is the shell environment variable holding the current user's
home directory — e.g. `/Users/<username>` on macOS, `/home/<username>` on Linux. The
deploy action resolves it at runtime via Node's `os.homedir()`, so the same command works
for any user on any machine without hard-coding paths. `~` is the shell shorthand for the
same directory.
```bash ```bash
cd <skill-manager>/scripts cd <skill-manager>/scripts
@@ -235,7 +240,7 @@ Rules:
- [ ] Scripts (if any) have `--help`, avoid interactive prompts, use structured output - [ ] Scripts (if any) have `--help`, avoid interactive prompts, use structured output
- [ ] If `scripts/` exists: `scripts/.gitignore` is present (node_modules/, dist/, .env, .venv/) - [ ] If `scripts/` exists: `scripts/.gitignore` is present (node_modules/, dist/, .env, .venv/)
- [ ] If `scripts/` exists: no source files (`.py`, `.ts`, `.js`, `.sh`) sit directly in `scripts/` — they must be in `scripts/src/` or `scripts/.scripts/` - [ ] If `scripts/` exists: no source files (`.py`, `.ts`, `.js`, `.sh`) sit directly in `scripts/` — they must be in `scripts/src/` or `scripts/.scripts/`
- [ ] Skill is deployed (`task deploy`) so it resolves at `$HOME/.agents/skills/<name>`, `$HOME/.claude/skills/<name>` and `$HOME/.cline/skills/<name>` via absolute paths - [ ] Skill is deployed (`task deploy`) so it resolves at `$HOME/.agents/skills/<name>` and `$HOME/.claude/skills/<name>` via absolute paths
## If the skill isn't triggering reliably ## If the skill isn't triggering reliably
+1 -1
View File
@@ -30,7 +30,7 @@ tasks:
deploy: deploy:
desc: | desc: |
Deploy a skill into $HOME/.agents/skills, $HOME/.claude/skills and $HOME/.cline/skills (absolute paths). Deploy a skill into $HOME/.agents/skills and $HOME/.claude/skills (absolute paths).
Usage: task cli:deploy -- --skill-dir="/absolute/path/to/skill" [--mode=symlink|copy] [--force] Usage: task cli:deploy -- --skill-dir="/absolute/path/to/skill" [--mode=symlink|copy] [--force]
cmds: cmds:
- | - |
View File
View File
View File
+1 -1
View File
@@ -41,7 +41,7 @@ tasks:
deploy: deploy:
desc: | desc: |
Deploy a skill into $HOME/.agents/skills, $HOME/.claude/skills and $HOME/.cline/skills (absolute paths). Deploy a skill into $HOME/.agents/skills and $HOME/.claude/skills (absolute paths).
Usage: task deploy -- --skill-dir="/absolute/path/to/skill" [--mode=symlink|copy] [--force] Usage: task deploy -- --skill-dir="/absolute/path/to/skill" [--mode=symlink|copy] [--force]
cmds: cmds:
- task: cli:deploy - task: cli:deploy
+4 -2
View File
@@ -7,7 +7,9 @@
* Default targets (always resolved to absolute paths): * Default targets (always resolved to absolute paths):
* $HOME/.agents/skills/<skill-name> * $HOME/.agents/skills/<skill-name>
* $HOME/.claude/skills/<skill-name> * $HOME/.claude/skills/<skill-name>
* $HOME/.cline/skills/<skill-name> *
* $HOME is the current user's home directory (e.g. /Users/<username> on macOS,
* /home/<username> on Linux), resolved at runtime via os.homedir().
* *
* Modes: * Modes:
* symlink (default) — creates an absolute-path symlink to the skill source. * symlink (default) — creates an absolute-path symlink to the skill source.
@@ -39,7 +41,7 @@ import { basename, join, resolve } from "node:path";
// Helpers // Helpers
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
const DEFAULT_TARGETS = [".agents/skills", ".claude/skills", ".cline/skills"]; const DEFAULT_TARGETS = [".agents/skills", ".claude/skills"];
const COPY_EXCLUDES = new Set(["node_modules", "dist", ".git"]); const COPY_EXCLUDES = new Set(["node_modules", "dist", ".git"]);
+3 -2
View File
@@ -8,7 +8,7 @@
* Actions: * Actions:
* validate — validate a skill directory against the agentskills.io spec * validate — validate a skill directory against the agentskills.io spec
* scaffold — scaffold a new skill directory from the built-in template * scaffold — scaffold a new skill directory from the built-in template
* deploy — deploy a skill into $HOME/.agents/skills, $HOME/.claude/skills, $HOME/.cline/skills * deploy — deploy a skill into $HOME/.agents/skills and $HOME/.claude/skills
* *
* Output is always YAML to stdout. Exit 0 on success, 1 on error. * Output is always YAML to stdout. Exit 0 on success, 1 on error.
*/ */
@@ -81,7 +81,8 @@ Actions:
--skill-dir <path> Path to the skill root directory (required) --skill-dir <path> Path to the skill root directory (required)
--mode <mode> symlink (default) or copy --mode <mode> symlink (default) or copy
--targets <dirs> Comma-separated target directories --targets <dirs> Comma-separated target directories
(default: $HOME/.agents/skills,$HOME/.claude/skills,$HOME/.cline/skills) (default: $HOME/.agents/skills,$HOME/.claude/skills;
$HOME = the current user's home directory)
--force Replace an existing real directory at the destination --force Replace an existing real directory at the destination
Examples: Examples: