skill-installer
Original:🇺🇸 English
Not Translated
3 scriptsChecked / no sensitive code detected
Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos).
2installs
Sourcearthur0824hao/skills
Added on
NPX Install
npx skill4agent add arthur0824hao/skills skill-installerSKILL.md Content
Skill Installer
Helps install skills. By default these are from https://github.com/openai/skills/tree/main/skills/.curated, but users can also provide other locations.
Use the helper scripts based on the task:
- List curated skills when the user asks what is available, or if the user uses this skill without specifying what to do.
- Install from the curated list when the user provides a skill name.
- Install from another repo when the user provides a GitHub repo/path (including private repos).
Install skills with the helper scripts.
Communication
When listing curated skills, output approximately as follows, depending on the context of the user's request:
"""
Skills from {repo}:
- skill-1
- skill-2 (already installed)
- ... Which ones would you like installed? """
After installing a skill, tell the user: "Restart Codex to pick up new skills."
Scripts
All of these scripts use network, so when running in the sandbox, request escalation when running them.
- (prints curated list with installed annotations)
scripts/list-curated-skills.py scripts/list-curated-skills.py --format jsonscripts/install-skill-from-github.py --repo <owner>/<repo> --path <path/to/skill> [<path/to/skill> ...]scripts/install-skill-from-github.py --url https://github.com/<owner>/<repo>/tree/<ref>/<path>
Behavior and Options
- Defaults to direct download for public GitHub repos.
- If download fails with auth/permission errors, falls back to git sparse checkout.
- Aborts if the destination skill directory already exists.
- Installs into (defaults to
$CODEX_HOME/skills/<skill-name>).~/.codex/skills - Multiple values install multiple skills in one run, each named from the path basename unless
--pathis supplied.--name - Options: (default
--ref <ref>),main,--dest <path>.--method auto|download|git
Notes
- Curated listing is fetched from via the GitHub API. If it is unavailable, explain the error and exit.
https://github.com/openai/skills/tree/main/skills/.curated - Private GitHub repos can be accessed via existing git credentials or optional /
GITHUB_TOKENfor download.GH_TOKEN - Git fallback tries HTTPS first, then SSH.
- The skills at https://github.com/openai/skills/tree/main/skills/.system are preinstalled, so no need to help users install those. If they ask, just explain this. If they insist, you can download and overwrite.
- Installed annotations come from .
$CODEX_HOME/skills
skill
{
"schema_version": "2.0",
"id": "skill-installer",
"version": "1.0.0",
"capabilities": ["skill-install", "skill-list"],
"effects": ["net.fetch", "fs.write", "proc.exec"],
"operations": {
"list-curated": {
"description": "List available curated skills with installed annotations.",
"input": {
"format": { "type": "string", "required": false, "default": "text", "description": "Output format: text or json" }
},
"output": {
"description": "List of curated skills with install status",
"fields": { "skills": "array of {name, installed}" }
},
"entrypoints": {
"unix": ["python3", "scripts/list-curated-skills.py", "--format", "{format}"],
"windows": ["python", "scripts/list-curated-skills.py", "--format", "{format}"]
}
},
"install": {
"description": "Install a skill from GitHub repo path.",
"input": {
"repo": { "type": "string", "required": true, "description": "GitHub owner/repo" },
"path": { "type": "string", "required": true, "description": "Path to skill within repo" }
},
"output": {
"description": "Installed skill path",
"fields": { "installed_path": "string" }
},
"entrypoints": {
"unix": ["python3", "scripts/install-skill-from-github.py", "--repo", "{repo}", "--path", "{path}"],
"windows": ["python", "scripts/install-skill-from-github.py", "--repo", "{repo}", "--path", "{path}"]
}
}
},
"stdout_contract": {
"last_line_json": false
}
}