From arthur0824hao-skills
Install and update skills into the skill system from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, update existing skills, or install a skill from another repo (including private repos).
npx claudepluginhub arthur0824hao/skills --plugin document-skillsThis skill uses the workspace's default tool permissions.
Installer and deploy surface for the skill system.
LICENSE.txtSKILL.behavior.yamlSKILL.spec.yamlscripts/ensure_memory_rebuild_hook.pyscripts/fixtures/skill_v2/invalid_v2_missing_voice_tone_file.skill.yamlscripts/fixtures/skill_v2/valid_v1.skill.yamlscripts/fixtures/skill_v2/valid_v2.skill.yamlscripts/github_utils.pyscripts/host_shell.pyscripts/install-skill-from-github.pyscripts/list-curated-skills.pyscripts/migrate_skill_to_v2.pyscripts/skills.shscripts/test_deploy_minimal.pyscripts/test_ensure_memory_rebuild_hook.pyscripts/test_host_shell.pyscripts/test_skill_v2_validator.pyscripts/test_skills.pyscripts/test_update_skills.pyscripts/update-skills.pyCreates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Installer and deploy surface for the skill system.
Public contract:
sk init (skill-system-cli) as the primary bootstrap entrypoint for this repository.sk install deploy --target <path> for advanced sidecar attachment into external projects.scripts/skills.sh remains the implementation backend for installer/deploy operations.<project>-memory) by auto-detection.SKILL_PGDATABASE; prefer project-local overrides only when required.PGDATABASE to silently steer skill runtime DB targets.Use the helper scripts based on the task:
Install skills with the helper scripts.
Run scripts/skills.sh bootstrap to detect and scaffold the skill system:
config/, note/, .tkt/, skills-lock.json"pending" entries in skills-lock.jsonSKILL.mdpython3, git, bash)scripts/skills.sh bootstrap
# or via sk CLI:
sk install bootstrap
Output is JSON with checks (what was found) and actions_taken (what was created).
This is idempotent — safe to run multiple times. Agents should run it when they detect the skill system is partially initialized or when a user asks to set up skills.
When listing curated skills, show available names and which ones are already installed in the current scope.
All of these scripts use network, so when running in the sandbox, request escalation when running them.
scripts/list-curated-skills.py (prints curated list with installed annotations)scripts/list-curated-skills.py --format jsonscripts/skills.sh (unified wrapper for install, list, update, sync, deploy)scripts/skills.sh doctor --target <path> (detect-only preflight checks)scripts/skills.sh deploy --target <path> [--mode minimal|local|full] [--no-dashboard] (sidecar deploy into a target project; dashboard generated by default)scripts/skills.sh dashboard --target <path> (generate target dashboard/index.html)scripts/skills.sh host-shell <bootstrap|discover|compat|doctor> [--target <path>] (thin host plugin shell MVP)scripts/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>scripts/update-skills.py --allscripts/update-skills.py --skill <skill-name> [--update] [--dry-run]Run scripts/skills.sh doctor --target /path/to/project to inspect a target project without modifying it.
Doctor reports:
config/, note/, .tkt/, skills-lock.json)dashboard/index.html) and dashboard generator skill entrypointOutput shape:
statustargetchecksrecommended_actionshealthyRun scripts/skills.sh dashboard --target /path/to/project to generate a dashboard for a target project.
Dashboard generation behavior:
skills/skill-system-dashboard/scripts/generate.py as the single rendering sourceskills/, .tkt/, .memory/, and optional .env/.env.local database URL)<target>/dashboard/index.html by defaultstatus, output, and target)/SK-dashboard to sk dashboardRun scripts/skills.sh deploy --target /path/to/project [--mode minimal|local|full] [--no-dashboard] to deploy the current skill-system repo as a sidecar into a target project.
Deploy behavior:
.skill-system/ as the managed sidecar rootconfig/, note/, .tkt/, and skills-lock.jsonskills resolves to sidecar skills for existing CLI/dashboard path expectations--no-dashboard to skipdoctor --target after deployment and returns a health summarydashboard_onboarding payload fields so users can run /SK-dashboard or the equivalent CLI command immediatelyThe installer ships a minimal host-shell adapter to validate composition boundaries without taking ownership from existing modules.
Entry:
scripts/skills.sh host-shell bootstrap --target /path/to/project
scripts/skills.sh host-shell discover --target /path/to/project
scripts/skills.sh host-shell compat
scripts/skills.sh host-shell doctor --target /path/to/project
Boundary guarantees:
mem.py + MCP). Plugin behavior is optional adapter logic.skill-system-tkt and skill-system-review.skill-system-workflow.This is intentionally an MVP shell and not a platform redesign.
Use scripts/update-skills.py to compare installed skill directories with hashes from skills-lock.json.
--all checks every locked skill; --skill <name> checks one skill.--update to reinstall missing/drifted skills and refresh computedHash.--dry-run to report planned updates without making changes.--preserve-insight/--no-preserve-insight controls local insight-preservation merge behavior (--preserve-insight default true).--lockfile <path> and --skills-dir <path>.When update runs with preserve mode enabled, the installer performs a 3-way merge:
original baseline -> local modified -> upstream new
Conflicts are never auto-merged. Conflict markers are written for user review.
--force is set.$SKILLS_GLOBAL_HOME/skills/<skill-name> (default ~/.skills-system/skills).--path values install multiple skills in one run, each named from the path basename unless --name is supplied.--ref <ref> (default main), --dest <path>, --method auto|download|git, --force.https://github.com/openai/skills/tree/main/skills/.curated via the GitHub API. If it is unavailable, explain the error and exit.GITHUB_TOKEN/GH_TOKEN for download.$SKILLS_GLOBAL_HOME/skills and project-local skills/).{
"schema_version": "2.0",
"id": "skill-system-installer",
"version": "1.0.0",
"capabilities": ["skill-install", "skill-list", "skill-update", "skill-status", "skill-sync", "skill-bootstrap", "skill-doctor", "skill-dashboard", "skill-deploy"],
"effects": ["net.fetch", "fs.write", "fs.read", "proc.exec"],
"operations": {
"bootstrap": {
"description": "First-run setup: detect missing structure, scaffold directories, compute pending lockfile hashes, validate skills.",
"input": {},
"output": {
"description": "Bootstrap report with checks and actions taken",
"fields": { "checks": "object", "actions_taken": "array" }
},
"entrypoints": {
"unix": ["bash", "scripts/skills.sh", "bootstrap"]
}
},
"doctor": {
"description": "Detect-only preflight checks for a target project. Reports readiness and recommended actions without changing files.",
"input": {
"target": { "type": "string", "required": false, "default": ".", "description": "Target project directory to inspect" }
},
"output": {
"description": "Preflight report",
"fields": {
"status": "ok | error",
"target": "string",
"checks": "object",
"recommended_actions": "array",
"healthy": "boolean"
}
},
"entrypoints": {
"unix": ["bash", "scripts/skills.sh", "doctor", "--target", "{target}"]
}
},
"dashboard": {
"description": "Generate target dashboard/index.html using target project context and tolerant empty-section rendering.",
"input": {
"target": { "type": "string", "required": false, "default": ".", "description": "Target project directory" }
},
"output": {
"description": "Dashboard generation report",
"fields": {
"status": "ok | error",
"output": "string",
"target": "string"
}
},
"entrypoints": {
"unix": ["bash", "scripts/skills.sh", "dashboard", "--target", "{target}"]
}
},
"deploy": {
"description": "Deploy the current skill-system repo as a sidecar into a target project and report post-deploy health.",
"input": {
"target": { "type": "string", "required": true, "description": "Target project directory" },
"mode": { "type": "string", "required": false, "default": "full", "description": "Bootstrap profile: minimal, local, or full" },
"dashboard": { "type": "boolean", "required": false, "default": false, "description": "Generate dashboard/index.html after deploy" }
},
"output": {
"description": "Deploy report with paths, actions taken, and doctor health summary",
"fields": {
"status": "ok | error",
"target": "string",
"sidecar": "string",
"deployed_paths": "object",
"actions_taken": "array",
"health_summary": "object"
}
},
"entrypoints": {
"unix": ["bash", "scripts/skills.sh", "deploy", "--target", "{target}", "--mode", "{mode}"]
}
},
"list": {
"description": "List available curated skills with installed annotations and show local/global installed skills.",
"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. The scripts/skills.sh wrapper provides a scoped alternative entrypoint.",
"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}"],
"unix_wrapper": ["bash", "scripts/skills.sh", "install", "--repo", "{repo}", "--path", "{path}"]
}
},
"update": {
"description": "Check skill drift against lockfile and optionally update drifted skills.",
"input": {
"scope": { "type": "string", "required": true, "description": "Either all or one" },
"skill": { "type": "string", "required": false, "description": "Skill name when scope is one" },
"apply": { "type": "boolean", "required": false, "default": false, "description": "Apply updates when true" },
"dry_run": { "type": "boolean", "required": false, "default": false, "description": "Report only" },
"preserve_insight": { "type": "boolean", "required": false, "default": true, "description": "Preserve local insight edits via 3-way merge with conflict markers" }
},
"output": {
"description": "Drift report and optional update actions",
"fields": { "status": "ok | error", "table": "skill_name/local_hash/lock_hash/status" }
},
"entrypoints": {
"unix": ["python3", "scripts/update-skills.py", "--all"],
"windows": ["python", "scripts/update-skills.py", "--all"]
}
},
"status": {
"description": "Report drift/version status and spec-compatibility warnings.",
"input": {
"scope": { "type": "string", "required": false, "description": "global or local", "default": "local" },
"skill": { "type": "string", "required": false, "description": "Optional skill name" }
},
"output": {
"description": "Status rows with warning details",
"fields": { "status": "ok | error", "skills": "array" }
},
"entrypoints": {
"unix": ["bash", "scripts/skills.sh", "status"],
"windows": ["bash", "scripts/skills.sh", "status"]
}
},
"sync": {
"description": "Synchronize global skills into the local workspace.",
"input": {
"strategy": { "type": "string", "required": false, "default": "copy", "description": "Sync strategy: copy or symlink" },
"force": { "type": "boolean", "required": false, "default": false, "description": "Overwrite existing local skills when true" },
"skills": { "type": "string", "required": false, "description": "Comma-separated skill names" }
},
"output": {
"description": "Sync report and updated local lockfile",
"fields": { "status": "ok | error", "skills": "array of synced or skipped skill names" }
},
"entrypoints": {
"unix": ["bash", "scripts/skills.sh", "sync"]
}
}
},
"stdout_contract": {
"last_line_json": false
}
}