{"id":50536874,"url":"https://github.com/pformoso-deus-ai/csk","last_synced_at":"2026-06-03T17:01:29.612Z","repository":{"id":359303807,"uuid":"1245424667","full_name":"pformoso-deus-ai/csk","owner":"pformoso-deus-ai","description":"Skill manager across projects. Update your skills to the latest version effortless and with one command, all at once.","archived":false,"fork":false,"pushed_at":"2026-05-21T14:03:21.000Z","size":115,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T15:51:33.275Z","etag":null,"topics":["ai","claude","claude-code","skills"],"latest_commit_sha":null,"homepage":"https://pabloformoso.com","language":"Go","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/pformoso-deus-ai.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-21T07:55:54.000Z","updated_at":"2026-05-21T14:09:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pformoso-deus-ai/csk","commit_stats":null,"previous_names":["pformoso-deus-ai/csk"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/pformoso-deus-ai/csk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pformoso-deus-ai%2Fcsk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pformoso-deus-ai%2Fcsk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pformoso-deus-ai%2Fcsk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pformoso-deus-ai%2Fcsk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pformoso-deus-ai","download_url":"https://codeload.github.com/pformoso-deus-ai/csk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pformoso-deus-ai%2Fcsk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33874679,"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-06-03T02:00:06.370Z","response_time":59,"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":["ai","claude","claude-code","skills"],"created_at":"2026-06-03T17:01:28.785Z","updated_at":"2026-06-03T17:01:29.606Z","avatar_url":"https://github.com/pformoso-deus-ai.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs/header-dark.svg\"\u003e\n    \u003cimg src=\"docs/header-light.svg\" alt=\"csk — git-native skill manager for Claude Code\" width=\"900\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/pformoso-deus-ai/csk/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/pformoso-deus-ai/csk/actions/workflows/ci.yml/badge.svg\" alt=\"ci\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/go-1.23%2B-00ADD8.svg?logo=go\u0026logoColor=white\" alt=\"Go 1.23+\"\u003e\n\u003c/p\u003e\n\n---\n\n## Why this exists\n\nClaude Code has two ways to load a skill:\n\n- **Plugins** — distributed through the marketplace, with `claude plugin install` and update tooling.\n- **Personal skills** — loose files in `~/.claude/skills/\u003cname\u003e/` or `.claude/skills/\u003cname\u003e/`.\n\nPlugins have a distribution story. **Personal skills don't.** If you develop a skill in its own git repo today, the workflow is: clone it manually, copy or symlink into `~/.claude/skills/`, remember to `git pull` later. There is no lockfile, no manifest, no way to declare a reproducible set of skills, no way to share that set across machines or with a teammate.\n\n`csk` fills exactly that gap. It is to skills what `cargo` and `uv` are to libraries: a declarative manifest, a pinned lockfile, and a reproducible `csk install` on any machine. It does **not** replace the plugin system — plugins keep their existing distribution story — `csk` is for the personal-skill side of the line.\n\nWhat you get:\n\n- **Declare** your skills in `skills.toml`. One TOML key per skill, with a git URL and an optional ref / subdir.\n- **Pin** to a commit SHA in `skills.lock`. Commit the lockfile to your dotfiles or project repo.\n- **Reproduce** on any machine with `csk install`. Cache + symlinks/junctions get rebuilt to match the lockfile.\n- **Adopt** the skills you've already hand-installed without losing local data.\n\nZero coupling to Claude Code itself: `csk` writes to the same `~/.claude/skills/` paths Claude already reads. Claude Code needs no awareness of `csk`.\n\n## Install\n\n`csk` is a single static binary. Install it to a user-scoped directory so you never need `sudo`, and so `csk upgrade` can replace it in place.\n\n### macOS / Linux\n\n```sh\nmkdir -p ~/.local/bin\n\n# Detect platform and download the latest release.\nOS=$(uname -s | tr '[:upper:]' '[:lower:]')\nARCH=$(uname -m); case \"$ARCH\" in x86_64|amd64) ARCH=x86_64;; aarch64|arm64) ARCH=arm64;; esac\nVERSION=$(curl -sI https://github.com/pformoso-deus-ai/csk/releases/latest | awk -F/ '/^location:/ {gsub(\"\\r\",\"\"); print $NF}')\ncurl -fsSL \"https://github.com/pformoso-deus-ai/csk/releases/download/${VERSION}/csk_${VERSION#v}_${OS}_${ARCH}.tar.gz\" \\\n  | tar xz -C ~/.local/bin csk\nchmod +x ~/.local/bin/csk\n```\n\nIf `csk` isn't found after install, add `~/.local/bin` to your `PATH`. Pick the line that matches your shell:\n\n```sh\n# zsh (macOS default)\necho 'export PATH=\"$HOME/.local/bin:$PATH\"' \u003e\u003e ~/.zshrc \u0026\u0026 source ~/.zshrc\n\n# bash\necho 'export PATH=\"$HOME/.local/bin:$PATH\"' \u003e\u003e ~/.bashrc \u0026\u0026 source ~/.bashrc\n\n# fish\nfish_add_path ~/.local/bin\n```\n\n### Windows\n\nPowerShell, user-scoped install:\n\n```powershell\n$dest = \"$env:LOCALAPPDATA\\Programs\\csk\"\nNew-Item -ItemType Directory -Force -Path $dest | Out-Null\n\n$arch = if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64') { 'arm64' } else { 'x86_64' }\n$latest = (Invoke-WebRequest -UseBasicParsing -Uri 'https://github.com/pformoso-deus-ai/csk/releases/latest' -MaximumRedirection 0 -ErrorAction SilentlyContinue).Headers.Location\n$tag = $latest.Split('/')[-1]                          # e.g. v0.1.2\n$ver = $tag.TrimStart('v')\n$url = \"https://github.com/pformoso-deus-ai/csk/releases/download/$tag/csk_${ver}_windows_${arch}.zip\"\n\nInvoke-WebRequest -Uri $url -OutFile \"$env:TEMP\\csk.zip\"\nExpand-Archive -Force -Path \"$env:TEMP\\csk.zip\" -DestinationPath $dest\n\n# Persist on user PATH (new terminals pick it up automatically)\n$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')\nif (-not ($userPath.Split(';') -contains $dest)) {\n    [Environment]::SetEnvironmentVariable('Path', \"$userPath;$dest\", 'User')\n}\n# Make it available in this session too\n$env:Path += \";$dest\"\n\ncsk --help\n```\n\nIf you don't want to touch the user-PATH environment variable, just keep `csk.exe` somewhere already on `PATH` (e.g. inside an existing `bin` folder you manage). No admin or developer mode is required.\n\n### With Go\n\nIf you have Go 1.23+ installed:\n\n```sh\ngo install github.com/pformoso-deus-ai/csk/cmd/csk@latest\n# binary lands in `go env GOPATH`/bin — usually already on PATH\n```\n\n### Subsequent upgrades\n\nOnce installed, future versions are one command — no re-download, no `sudo`:\n\n```sh\ncsk upgrade           # check, download, verify SHA256, swap binary\ncsk upgrade --check   # preview only\n```\n\n## Quickstart\n\n```sh\n# One-time: stand up the global scope\ncsk init\n\n# Browse the public registry (Skill Central) and install by short name…\ncsk search                                              # list everything\ncsk search handoff                                      # fuzzy search\ncsk info handoff                                        # full entry\ncsk add handoff                                         # install by registry name\n\n# …or install directly from any git URL:\ncsk add https://github.com/pformoso-deus-ai/handoff-claude-skill.git\n\n# Inspect what's installed\ncsk list\n\n# Commit ~/.claude/skills.toml and ~/.claude/skills.lock to your dotfiles.\n# On a fresh machine after cloning your dotfiles:\ncsk install   # reproduces the exact same skill set\n```\n\nFor a per-project skill set, run the same commands from inside the project. `csk` auto-detects scope based on whether `./.claude/skills.toml` exists; `--global` / `--project` force.\n\n## Concept\n\n```\n# Global scope\n~/.claude/skills.toml              # manifest — you edit this\n~/.claude/skills.lock              # lockfile — csk writes this; commit to your dotfiles\n~/.claude/skills-cache/\u003cname\u003e/     # full git clone — source of truth\n~/.claude/skills/\u003cname\u003e            # symlink / junction → ../skills-cache/\u003cname\u003e/[subdir]\n\n# Project scope mirrors the same layout under \u003cproject\u003e/.claude/\n```\n\n`skills-cache/` is the source of truth for installed bits; `skills/` is just the surface Claude Code reads. The split lets you `git pull` directly inside a cache entry while developing, or let `csk` manage it.\n\n## Commands\n\n| Command | What it does |\n|---|---|\n| `csk init` | Create empty manifest + lockfile in the current scope |\n| `csk add \u003cgit-url\u003e` | Clone, resolve ref → SHA, write manifest + lockfile, create the junction |\n| `csk remove \u003cname\u003e` | Drop manifest + lockfile entries, remove junction, optional `--prune` of the cache |\n| `csk install` | Reconcile cache + junctions to match the lockfile (idempotent) |\n| `csk sync` | Alias for `install` |\n| `csk update [name ...]` | Re-resolve refs to fresh SHAs, update lockfile, sync cache. No args = update all |\n| `csk lock` | Re-resolve the manifest, rewrite the lockfile from scratch, no install side effect |\n| `csk list` | Tabular view of every skill with state: `clean` / `drifted` / `missing` / `unlinked` / `manifest-only` / `lock-only` |\n| `csk adopt \u003cname\u003e --source URL` | Register a hand-installed skill: byte-diff existing dir against the source, swap to junction on match |\n| `csk doctor` | Read-only diagnosis of cache / junction / manifest / lockfile drift |\n| `csk search [query]` | Fuzzy-search the public registry (Skill Central). No arg = list all. |\n| `csk info \u003cname\u003e` | Show the full registry entry for a skill. |\n| `csk upgrade` | Replace the csk binary itself with the latest GitHub release. `--check` only previews. |\n\nRun any command with `--help` for its full flag surface.\n\n## Manifest (`skills.toml`)\n\n```toml\nversion = 1\n\n[skills.handoff]\nsource = \"https://github.com/pformoso-deus-ai/handoff-claude-skill.git\"\nref = \"main\"                       # branch, tag, or commit. Default: \"main\".\n# subdir = \"packages/handoff\"      # optional, for monorepos.\n```\n\nMinimum required field per skill: `source`. The TOML key is the local install name (also the junction name).\n\n## Lockfile (`skills.lock`)\n\nTool-managed. One `[[skill]]` block per entry, with `commit = \"\u003cfull SHA\u003e\"`. OS-independent — junction-vs-symlink is decided at install time, never stored. Commit it across machines.\n\n```toml\nversion = 1\ngenerated = \"2026-05-21T09:34:00Z\"\n\n[[skill]]\nname = \"handoff\"\nsource = \"https://github.com/pformoso-deus-ai/handoff-claude-skill.git\"\nref = \"main\"\ncommit = \"a1b2c3d4e5f6789abcdef...\"\nsubdir = \"\"\n```\n\n## Workflows\n\n### Dotfiles-style sharing\n\n```sh\ncsk init\ncsk add https://github.com/pformoso-deus-ai/handoff-claude-skill.git\ncsk add https://github.com/pablo/codegraph-skill.git\n# commit ~/.claude/skills.toml and ~/.claude/skills.lock to your dotfiles\n```\n\nOn a fresh machine: `git clone \u003cdotfiles\u003e ~/dotfiles \u0026\u0026 cp ~/dotfiles/.claude/skills.{toml,lock} ~/.claude/ \u0026\u0026 csk install` — same skill set, same pinned commits.\n\n### Per-project skill set\n\n```sh\ncd ~/work/my-project\ncsk init --project       # writes ./.claude/skills.toml\ncsk add https://github.com/team/project-skill.git\ngit add .claude/skills.toml .claude/skills.lock\n```\n\nTeammates clone the project and `csk install` to get the project's skills set up.\n\n### Adopting a hand-installed skill\n\n```sh\n# You already have ~/.claude/skills/handoff/ from a previous manual clone.\ncsk init\ncsk adopt handoff --source https://github.com/pformoso-deus-ai/handoff-claude-skill.git\n# csk byte-diffs your local content against the source. If they match, your\n# directory is replaced with a junction into the csk-managed cache and the\n# skill is registered. If they diverge, csk lists the differences and\n# refuses unless you pass --force --yes.\n```\n\n### Updating a skill\n\n```sh\ncsk update handoff             # one skill\ncsk update                     # all skills in the manifest\n```\n\nFor each target, `csk update` re-resolves the manifest ref to the latest commit on that ref, updates the lockfile, and checks out the new commit in the cache. The junction repoints automatically.\n\n## Building from source\n\nYou need Go 1.23+ and `git` on `PATH`.\n\n```sh\ngo build -o csk ./cmd/csk\n./csk --help\n```\n\nCross-compile:\n\n```sh\nGOOS=windows GOARCH=amd64 go build -o csk.exe ./cmd/csk\nGOOS=darwin  GOARCH=arm64 go build -o csk     ./cmd/csk\nGOOS=linux   GOARCH=amd64 go build -o csk     ./cmd/csk\n```\n\n## Platform notes\n\n- **Linux / macOS**: skills are exposed as symlinks.\n- **Windows**: skills are exposed as directory junctions (`mklink /J`). No admin or developer-mode required — junctions don't need either.\n\nDecided automatically at install time. The lockfile itself is OS-independent (URLs + SHAs only).\n\n## Design\n\nSee [`SPEC.md`](SPEC.md) for the full design document — goals, non-goals, command behavior, edge cases, and the v1 implementation decisions that fleshed out the spec during build.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpformoso-deus-ai%2Fcsk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpformoso-deus-ai%2Fcsk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpformoso-deus-ai%2Fcsk/lists"}