{"id":49098675,"url":"https://github.com/onmyway133/pica","last_synced_at":"2026-04-20T22:12:08.797Z","repository":{"id":349630604,"uuid":"1203187475","full_name":"onmyway133/pica","owner":"onmyway133","description":"🕊️ Fetch agents, skills, commands from repos","archived":false,"fork":false,"pushed_at":"2026-04-06T21:06:41.000Z","size":889,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-06T22:18:46.714Z","etag":null,"topics":["agents","fetch","install","skills","uninstall"],"latest_commit_sha":null,"homepage":"https://onmyway133.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/onmyway133.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T20:05:08.000Z","updated_at":"2026-04-06T21:06:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/onmyway133/pica","commit_stats":null,"previous_names":["onmyway133/pica"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/onmyway133/pica","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2Fpica","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2Fpica/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2Fpica/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2Fpica/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onmyway133","download_url":"https://codeload.github.com/onmyway133/pica/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onmyway133%2Fpica/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","fetch","install","skills","uninstall"],"created_at":"2026-04-20T22:12:08.188Z","updated_at":"2026-04-20T22:12:08.791Z","avatar_url":"https://github.com/onmyway133.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pica\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/pica.png\" width=\"200\" alt=\"pica\" /\u003e\n\u003c/p\u003e\n\nCLI to detect and install Claude Code agents, skills, commands, hooks, and rules from any GitHub repo or local path.\n\nNamed after *Pica pica* — the magpie, known for collecting shiny things.\n\n```\nnpx @onmyway133/pica \u003crepo\u003e\nnpx @onmyway133/pica uninstall \u003crepo\u003e\n```\n\n## Usage\n\n```sh\n# Install — GitHub shorthand\npica onmyway133/cmon\n\n# Install — full URL\npica https://github.com/onmyway133/cmon\n\n# Install — local path\npica ./my-claude-setup\n\n# Uninstall\npica uninstall onmyway133/cmon\n```\n\n![](images/prompt.png)\n\npica clones the repo, scans it, and walks you through an interactive prompt to pick what to install or remove, the scope (local vs global), and the mode (symlink vs copy).\n\n## Install\n\nPrompts for:\n1. Which types to install (Agents, Skills, Commands, Hooks, Rules)\n2. Which individual items within those types\n3. Scope — local (`.claude/`) or global (`~/.claude/`)\n4. Mode — symlink or copy\n\n## Uninstall\n\n```sh\npica uninstall \u003crepo\u003e\n```\n\npica fetches the same repo, detects what it contains, and shows only the items that are actually installed on your machine. Select what to remove and confirm.\n\nFor **hooks**, uninstall surgically removes only the matching entries from `settings.json`, leaving any other hooks you have configured untouched. Script files in `.claude/hooks/` are deleted.\n\nScope options at uninstall time:\n- **Local + Global** — removes from both `.claude/` and `~/.claude/` (use this if you installed with symlink mode)\n- **Global only** — removes only from `~/.claude/`\n\n## What gets detected\n\npica looks for five types of Claude Code config in a repo:\n\n| Type | Detected from |\n|------|--------------|\n| Agent | `.claude/agents/*.md` |\n| Skill | `SKILL.md` at root, `skills/{name}/SKILL.md`, `.claude/skills/{name}/SKILL.md`, or `{name}/SKILL.md` at root |\n| Command | `.claude/commands/*.md` or `commands/*.md` |\n| Hook | `hooks/hooks.json` or `.claude/hooks/hooks.json` |\n| Rule | `.claude/rules/*.md` |\n\n## What gets installed\n\n### Agent\n\nAn agent is a `.md` file that defines a Claude Code sub-agent with a specific persona and tools.\n\n**Installed to:**\n```\n# local\n.claude/agents/my-agent.md\n\n# global\n~/.claude/agents/my-agent.md\n```\n\nClaude Code picks up any `.md` file in `agents/` automatically. No further setup needed.\n\n---\n\n### Skill\n\nA skill is a directory containing a `SKILL.md` file with instructions for Claude.\n\n**Installed to:**\n```\n# local\n.claude/skills/my-skill/SKILL.md\n\n# global\n~/.claude/skills/my-skill/SKILL.md\n```\n\nThe whole directory is installed (not just the `.md`), so skills can bundle supporting files alongside their instructions.\n\n---\n\n### Command\n\nA command is a `.md` file that defines a Claude Code slash command (e.g. `/commit`, `/review`).\n\n**Installed to:**\n```\n# local\n.claude/commands/my-command.md\n\n# global\n~/.claude/commands/my-command.md\n```\n\nOnce installed, the command is available in Claude Code as `/my-command`.\n\n---\n\n### Hook\n\nA hook repo must have a `hooks/hooks.json` that declares which Claude Code lifecycle events to intercept, and the scripts that handle them. The format of `hooks.json` mirrors the `hooks` block in `settings.json`:\n\n```json\n{\n  \"description\": \"...\",\n  \"hooks\": {\n    \"Stop\": [\n      {\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \\\"${CLAUDE_PLUGIN_ROOT}/hooks/stop-hook.sh\\\"\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Installing a hook does two things:**\n\n1. **Copies scripts** to `.claude/hooks/` (and makes `.sh` files executable):\n   ```\n   .claude/hooks/stop-hook.sh\n   ```\n\n2. **Merges the hooks config** into `.claude/settings.json`, replacing `${CLAUDE_PLUGIN_ROOT}` with the real path:\n   ```json\n   {\n     \"hooks\": {\n       \"Stop\": [\n         {\n           \"hooks\": [\n             {\n               \"type\": \"command\",\n               \"command\": \"bash \\\"/your/project/.claude/hooks/stop-hook.sh\\\"\"\n             }\n           ]\n         }\n       ]\n     }\n   }\n   ```\n\nClaude Code reads `settings.json` on startup and runs registered hooks at the matching lifecycle events. If `settings.json` already has hooks for that event, pica appends rather than overwrites.\n\n---\n\n### Rule\n\nA rule is a `.md` file placed in `.claude/rules/`. Claude Code loads all files in this directory as persistent instructions that apply to every session.\n\n**Installed to:**\n```\n# local\n.claude/rules/my-rule.md\n\n# global\n~/.claude/rules/my-rule.md\n```\n\n---\n\n## Symlink vs Copy\n\n| Mode | What happens |\n|------|-------------|\n| **Symlink** | Files are copied to `~/.claude/` (global store), then a symlink is created from `.claude/` → `~/.claude/`. One source of truth — updating the global copy is reflected everywhere. |\n| **Copy** | Files are copied directly to the chosen scope (local `.claude/` or global `~/.claude/`). Independent copy, no link. |\n\n## Local vs Global scope\n\n| Scope | Base directory | Committed to repo? |\n|-------|---------------|-------------------|\n| Local | `.claude/` in current project | Yes (if you commit it) |\n| Global | `~/.claude/` | No — available in all projects |\n\n## Repo format\n\nTo make your repo work with pica, follow these conventions:\n\n```\nmy-repo/\n├── .claude/\n│   ├── agents/\n│   │   └── my-agent.md        # sub-agent\n│   ├── commands/\n│   │   └── my-command.md      # slash command\n│   ├── rules/\n│   │   └── my-rule.md         # persistent rule\n│   └── skills/\n│       └── my-skill/\n│           └── SKILL.md       # skill\n├── hooks/\n│   ├── hooks.json             # hook manifest\n│   └── my-hook.sh             # hook script\n└── skills/\n    └── my-skill/\n        └── SKILL.md           # alternative skills location\n```\n\nA repo can contain any combination of these. pica detects whatever is present and lets you choose what to install.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonmyway133%2Fpica","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonmyway133%2Fpica","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonmyway133%2Fpica/lists"}