{"id":51629475,"url":"https://github.com/avidrucker/claude-config","last_synced_at":"2026-07-13T05:32:39.999Z","repository":{"id":366688721,"uuid":"1248876995","full_name":"avidrucker/claude-config","owner":"avidrucker","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-02T03:11:41.000Z","size":165,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T05:10:32.923Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avidrucker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-05-25T06:16:34.000Z","updated_at":"2026-07-02T03:11:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/avidrucker/claude-config","commit_stats":null,"previous_names":["avidrucker/claude-config"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/avidrucker/claude-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Fclaude-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Fclaude-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Fclaude-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Fclaude-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avidrucker","download_url":"https://codeload.github.com/avidrucker/claude-config/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avidrucker%2Fclaude-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35412244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-13T02:00:06.543Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-07-13T05:32:39.380Z","updated_at":"2026-07-13T05:32:39.992Z","avatar_url":"https://github.com/avidrucker.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# claude-config\n\nPersonal Claude Code configuration: skills, slash commands, user-\nscope agents, and reference docs. Cloned into `~/Documents/` (or\nwherever) on each machine; symlinks individual items into\n`~/.claude/` so the user-installed customisations travel across\ncomputers without disturbing per-machine state.\n\n## What's here, what's not\n\n| Lives in this repo | Lives elsewhere |\n|---|---|\n| `skills/` — 14 personally-authored skills | Work/stack skills → sibling repo `claude-config-work` (Fulcro/Clojure/Datomic) |\n| `commands/` — user-scope slash commands | Anthropic-bundled skills (docx, pdf, pptx, etc.) → `~/Documents/anthropic-skills/` |\n| `agents/` — user-scope agents (empty for now) | Matt Pocock's 16 skills (installed separately; see below) |\n| `reference/` — overview docs that explain the skill ecosystem | Anthropic's marketplace plugins (auto-managed by Claude Code) |\n|  | Project-scoped agents (live in each project's `.claude/agents/`) |\n|  | `~/.claude/settings.json` — per-machine, not synced |\n\n\u003e **Repo split (2026-06-17):** this repo originally carried 42 skills. The\n\u003e Fulcro/Clojure/Datomic stack skills + a work-specific issue-tracker workflow\n\u003e moved to a private sibling repo `claude-config-work`, and the Anthropic-bundled skills\n\u003e (proprietary-licensed, also available from the marketplace) moved to a plain\n\u003e `~/Documents/anthropic-skills/` folder. Both are symlinked into\n\u003e `~/.claude/skills/` alongside this repo's skills, so all of them still work\n\u003e on each machine — they're just version-controlled separately.\n\n### Why not include Pocock's skills?\n\nHis skill ecosystem is maintained upstream at\n`mattpocock/skills`. Cloning his skills into THIS repo would create\na fork that drifts from his updates. Strategy: run his installer\n(`npx skills@latest add mattpocock/skills`) once per fresh machine\nto pull his current 16 from upstream into `~/.claude/skills/`.\n\n### Why per-item symlinks rather than whole-dir symlinks?\n\nIf `~/.claude/skills/` were a single symlink to `\u003crepo\u003e/skills/`,\nPocock's installer would write into the symlinked dir (which is THIS\nrepo), polluting the repo with his skills. Per-item symlinks\n(`~/.claude/skills/X` → `\u003crepo\u003e/skills/X` for each of our skills)\nlet Pocock's skills coexist as real dirs in `~/.claude/skills/`.\n\n## Bootstrap (fresh machine)\n\nUse this path when `~/.claude/skills/` does NOT yet contain real\ndirectories that overlap with this repo. If it does (e.g. you've been\nusing Claude Code on the machine for a while), see **\"Existing\nmachine (migration)\"** below instead.\n\n### Prerequisites — all machines\n\n- **Git** (any recent version)\n- **GitHub access** — either an SSH key configured for `github.com`\n  (recommended; matches the `git@github.com:...` URLs below) OR a\n  PAT via `gh auth login` if you'd rather use HTTPS\n- **Node.js** (for the `npx skills@latest add mattpocock/skills`\n  step — only needed if you want Pocock's skills)\n\n### Prerequisites — Windows-specific\n\n**Enable Developer Mode** before running `install.ps1`:\n\n1. Open Settings (`Win + I`)\n2. Privacy \u0026 security → For developers\n3. Toggle **Developer Mode** ON\n\nNo restart required. This grants the\n`SeCreateSymbolicLinkPrivilege` to your user account, which the\ninstall script needs to create symlinks without elevation.\n\nAlternative: skip Dev Mode and run `install.ps1` from a PowerShell\nwindow opened **as Administrator** instead. Symlinks created by an\nadmin session remain readable by non-admin sessions, so this is a\none-time cost.\n\nIf neither is available, `install.ps1` detects the failure and\noffers to switch to `-CopyMode` (copies files instead of\nsymlinking). Copy mode works but breaks the auto-sync property —\nedits made on the machine no longer flow back to the repo\nautomatically; you'd have to manually copy them back and `git pull`\non every refresh.\n\n### Windows\n\n```powershell\n# 1. Clone this repo\ncd ~\\Documents\ngit clone git@github.com:avidrucker/claude-config.git\ncd claude-config\n\n# 2. Install Pocock's 16 skills upstream (optional but recommended)\n#    Lives in ~/.claude/skills/ as real dirs, NOT inside this repo\nnpx skills@latest add mattpocock/skills\n\n# 3. Symlink this repo's content into ~/.claude/\n.\\install.ps1\n```\n\nExpected output: per-skill `[link]` lines (14 of them), then a\n`[link]` line for the one command, then \"Done.\" A \"Next steps\"\nblock at the bottom reminds you about Pocock's installer if you\nskipped step 2.\n\n### macOS / Linux\n\n```bash\n# 1. Clone\ncd ~/Documents       # or wherever you keep repos\ngit clone git@github.com:avidrucker/claude-config.git\ncd claude-config\n\n# 2. Install Pocock's skills\nnpx skills@latest add mattpocock/skills\n\n# 3. Symlink into ~/.claude/\n./install.sh\n```\n\nPOSIX symlinks need no special privileges.\n\n### Verify\n\nAfter the install script finishes, confirm the symlinks landed:\n\n```powershell\n# Windows\nGet-ChildItem ~/.claude/skills -Directory `\n  | Where-Object { $_.LinkType -eq 'SymbolicLink' } `\n  | Measure-Object | Select-Object -ExpandProperty Count\n# Should print 14 (this repo's skills) — more if the work repo /\n# anthropic-skills / Pocock are also linked into ~/.claude/skills\n\nGet-Item ~/.claude/commands/font-change.md | Select-Object LinkType,Target\n# Should show LinkType=SymbolicLink, Target pointing into this repo\n```\n\n```bash\n# macOS / Linux\nls -la ~/.claude/skills/ | grep -c '^l'   # symlink count\nreadlink ~/.claude/commands/font-change.md\n```\n\nThen open Claude Code in any project and invoke a slash command\n(`/fulcro`, `/grill-me`, etc.) — should work transparently.\n\n## Existing machine (migration)\n\nIf `~/.claude/skills/` already has real directories that overlap\nwith `\u003crepo\u003e/skills/` (typical after using Claude Code for a while\non a machine BEFORE adopting this repo), use the migration utility\ninstead of running `install.ps1` directly. The migration script\nchecks that each existing real dir is byte-identical to its repo\ncounterpart before deleting + symlinking, so you can't accidentally\nlose local edits.\n\n```powershell\n# Windows — run from this repo's root\ncd ~\\Documents\\claude-config\n.\\bin\\migrate-existing-skills.ps1 -DryRun    # preview, no changes\n.\\bin\\migrate-existing-skills.ps1            # do it\n```\n\nPer-skill outcomes:\n- **`[migrate]`** — existing real dir was identical to repo, replaced with symlink\n- **`[link new]`** — no existing dir, plain symlink created\n- **`[skip]`** — already a correct symlink, no-op\n- **`[DIFF]`** — content differs from repo, **aborted for that one item** (no destructive action); reconcile manually before re-running\n\nThe migration is idempotent and re-runnable — you can run it again\nafter a `git pull` to pick up new skills the repo gained.\n\nPOSIX equivalent script isn't shipped yet; if you need it on macOS/\nLinux, file an issue or write one along the same shape (drop a real\ndir if `diff -r src dst` is silent; create a symlink either way).\n\n## Troubleshooting\n\n**`install.ps1` aborts with \"Cannot create symlinks.\"**\nDeveloper Mode isn't on AND you're not in an admin PowerShell. See\nPrerequisites — Windows-specific above.\n\n**Skill content didn't refresh after `git pull`.**\nYou're probably in `-CopyMode` (or symlinks were silently\noverwritten by a copy at some point). Re-run `install.ps1` — it\nprints `[skip]` for already-correct symlinks and re-links anything\nthat drifted.\n\n**A skill is missing after install.**\nCheck the corresponding `skills/\u003cname\u003e/` exists in this repo's\nworking tree. If `git status` is clean and the dir exists, run the\ninstall script with `-Verbose` (or look at the script output for a\n`[WARN]` on that specific item). Most common cause: an existing\nnon-symlink at the target that the script refused to clobber.\n\n**Pocock's installer (`npx skills@latest add mattpocock/skills`)\nfails or the package moves.**\nCheck `mattpocock/skills` upstream for the current install recipe —\nthe package name or invocation may have changed.\n\n**Symlinks broke after a Windows backup-restore or filesystem\noperation.**\nRun `.\\bin\\migrate-existing-skills.ps1` — its symlink-vs-real-dir\ndetection re-establishes the right shape. Or just re-run\n`install.ps1` if the targets are missing entirely.\n\n## What's NOT included (deliberately)\n\n- **`settings.json` / `settings.local.json`** — per-machine. May\n  contain local paths, API keys, allow-lists, default model\n  preferences. Set up these manually per machine; reference what\n  you usually have via a `settings.example.json` you can add later.\n- **`cache/` / `sessions/` / `history.jsonl` / `tasks/` /\n  `telemetry/` / `paste-cache/` / `shell-snapshots/`** — runtime\n  state. The `.gitignore` here is defensive against accidentally\n  committing any of these if you ever copy this repo into\n  `~/.claude/` directly.\n- **`projects/`** — per-machine session data Claude Code writes\n  for each project you've opened. Not portable.\n\n## Updating a skill\n\n1. Edit the skill in `~/.claude/skills/\u003cname\u003e/SKILL.md` (or wherever\n   the symlink points — same place from your shell's POV).\n2. Edits are visible in this repo as pending git changes:\n   `git status`.\n3. Commit + push as normal. Other machines pick up the change via\n   `git pull` (no re-install needed; the symlinks already point\n   here).\n\n## Adding a new skill\n\n1. `cd skills/` in this repo, create the new skill dir +\n   `SKILL.md`.\n2. `git add` + commit + push.\n3. On THIS machine, re-run `install.ps1` / `install.sh` — the\n   installer is idempotent and adds new symlinks for new items.\n4. On OTHER machines, `git pull` + re-run the install script.\n\n## Adding a new user-scope agent\n\nSame flow as a skill — put the file in `agents/` (project root),\ncommit, push, re-run installer. Future user-scope agents live in\n`agents/`; project-scoped agents continue to live in each project's\nown `.claude/agents/`.\n\n## Reference\n\nThe `reference/` dir has two docs that explain the broader ecosystem:\n\n- `link-agent-skills.md` — how agents and skills compose.\n- `matt-pocock-skills-overview.md` — annotated index of Pocock's 16\n  skills, what each assumes about the project structure.\n\nThese travel with the repo for cross-machine reference. They're not\ninstalled into `~/.claude/` directly by the bootstrap script.\n\n## License\n\n[MIT](LICENSE) © 2026 Avi Drucker.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favidrucker%2Fclaude-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favidrucker%2Fclaude-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favidrucker%2Fclaude-config/lists"}