Claude Code Toolkit

A reproducible, verifiable Claude Code setup — skills, agents, hooks and provider switching, installed with one command.

CI Latest release License: MIT Platforms

Getting started · Configuration · Security · Catalog · FAQ


What this is

Claude Code is far more capable once it has skills, agents and hooks wired in — but assembling those from a dozen upstream repositories, keeping them current, and knowing what you actually installed is tedious and easy to get wrong.

This toolkit does that assembly and keeps it honest:

  • Install only what you want. Five plugins, installable separately from a Claude Code marketplace — or the full bootstrap in one command on Linux, macOS, native Windows or WSL.
  • Context cost is measured, not hoped for. Claude Code budgets the skill listing at 2% of your context window and silently drops descriptions past it, leaving those skills unroutable. This toolkit's entire listing is CI-enforced at 2,048 characters — half of what a 200k-token context allows.
  • Every skill is pinned to a reviewed commit SHA, licence-checked, and recorded with a content digest — so you can see exactly what is on your machine and where it came from.
  • Updates never destroy your work. Fast-forward only; an update that would discard a local change refuses and tells you, rather than resolving it for you.
  • Upstream updates arrive as reviewed pull requests, not silent overwrites. Routine changes merge automatically; anything carrying capability surface (hooks, agents, executables, credentials, network access) is held for a human.
  • No telemetry, no account, no service. Nothing phones home.

Not an official Anthropic project. It packages Anthropic's published skills alongside third-party and repository-owned ones, each under its own licence.

Quick start

Just the plugins

If you only want the skills and agents, and want them namespaced and independently updatable:

/plugin marketplace add furkankoykiran/.claude
/plugin install fk-gh-flow@fk-toolkit
Plugin What it does Skill-listing cost
fk-gh-flow Find issues worth working on, solve one into a PR, follow up on review feedback, write human-sounding comments 746 chars
fk-writing-kit Strip AI tells from drafts; build blog posts or LinkedIn copy from a chat, URL or GitHub profile 819 chars
fk-manim-video Manim animations with spoken narration synced to the animation 248 chars
fk-eng-agents researcher · planner · code-reviewer · debugger subagents 0
fk-toolkit-ops Wire an MCP server from a pasted config; manage toolkit updates 161 chars

Plugins carry no hooks, no MCP servers and no executables — only skills and agents. Everything with capability surface lives in the bootstrap layer below, where you can see it before it runs.

The whole toolkit

The bootstrap additionally installs the upstream skill packs, the provider switcher, the safety hooks and the updater.

Linux · macOS · WSL · Git Bash

curl -fsSL https://raw.githubusercontent.com/furkankoykiran/.claude/main/install.sh | bash

Windows (native PowerShell)

irm https://raw.githubusercontent.com/furkankoykiran/.claude/main/install.ps1 | iex

Native Windows requires Git for Windows — it bundles Git Bash, which runs the shell hooks.

Re-running is safe. The installer is idempotent and fail-soft: it never overwrites an existing config.json or settings.json, and a component that fails to install does not abort the rest.

Required: git, curl, bash (or PowerShell 7+ on Windows). Bootstrapped if missing: bun, rtk, gstack, Chromium for browser skills. Optional components can be skipped — see installer flags.

Verify the install:

bun install --frozen-lockfile && bun run catalog:check

Updating

fkt check     # is there an update? (cached; no network on a cache hit)
fkt update    # fast-forward, then run migrations

fkt never runs reset --hard, never runs clean, and never stashes on your behalf. If your checkout has uncommitted changes or local commits, it refuses and prints the command to inspect them — this directory holds your settings and your memory, and only you can decide what happens to work you did in it.

Two channels: stable (the default) follows tagged releases and installs third-party packs at reviewed SHAs, so two machines get byte-identical skills; edge follows main and upstream HEAD.

Plugins update through Claude Code itself: /plugin marketplace update fk-toolkit.

Full detail — migrations, snoozing, opting out, security advisories — in Updates. Uninstall instructions are in Getting started.

What you get

Component Location What it does
Plugins skills/fk-* The fk-toolkit marketplace: fk-gh-flow, fk-writing-kit, fk-manim-video, fk-eng-agents, fk-toolkit-ops
Skill packs skills/ Installer-fetched upstream packs, pinned to reviewed commits
Hooks hooks/ Format on edit, secret scan on commit, pre-push verify, Docker volume protection, update notice
Updater bin/fkt Fast-forward-only bootstrap updates on a stable or edge channel
Providers providers/, bin/cc-provider Switch Claude Code between Anthropic, NVIDIA, DeepSeek, Kimi, MiniMax, OpenRouter, Z.ai
Utilities utils/ Shared Python helpers and profile-aware config
Catalog catalog/ Deterministic resolver + generator producing the verifiable skills catalog

How it fits together

flowchart LR
  M["skills-sources.toml<br/>declarative manifest"] --> RES
  G["git sources"] --> RES["resolver<br/>pin, fetch, verify licence"]
  R["runtime sources"] -. metadata only .-> RES
  RES --> L["skills-source.lock.json<br/>catalog/cache"]
  L --> GEN["generator"]
  GEN --> OUT["catalog/generated/<br/>catalog, index, digests"]
  GEN --> D["docs/skills/"]
  OUT --> PR["automation pull request"]
  PR --> GATE{"policy gate"}
  GATE -- routine --> AM["squash auto-merge<br/>after required checks"]
  GATE -- capability surface --> HUMAN["manual-review-required<br/>held for a human"]
  AM --> REL["tagged release<br/>with SHA256SUMS"]

The catalog

Every skill is resolved from a declared source, pinned to an immutable revision, licence-checked, and recorded with a content digest. Generation is deterministic — two runs produce byte-identical output — so the committed catalog is verifiable rather than trusted.

How sources are selected:

Mode Meaning New upstream skills
all-skills every <dir>/SKILL.md under a root ingested automatically
named only the listed skills never — reported, not added
subpath one skill at a fixed path never — siblings reported
repo-owned committed in this repository n/a
runtime resolved by the claude CLI, PyPI or an installer metadata only

metadata-only sources publish name, description, digest and an immutable link but never the body — either upstream grants no redistribution right, or the component cannot be resolved from files.

bun run catalog:coverage   # what each source contributes, and what is curated out

See Catalog coverage and Catalog architecture.

Safety model

Skills are instructions Claude reads; they are not sandboxed. Adding a source is a supply-chain decision, so the automation treats it as one.

A change is held for human review when it introduces a credential reference, executable or binary, hooks, MCP/LSP config, agents, dynamic shell, Bash or PowerShell, network access or hidden files — or when an existing skill gains any of those, when a skill that already carries a severe capability has its content rewritten, when files appear or disappear beside SKILL.md, when the tool surface grows, when redistribution or licence changes, when the source repository changes, when a skill is removed or renamed, or when the batch is unusually large.

The gate is a strong filter, not a proof of safety: it reasons about capability surface and provenance, not intent. A rewrite of a skill carrying no severe capability still merges as routine. Read the diff on anything you care about.

Detection does not rely on the content digest: the same bytes re-pointed at a different repository or re-licensed is still a change. Auto-merge state is torn down and re-proven on every run, so a merge request enabled by an earlier routine update cannot carry into a later sensitive one.

API keys live only in git-ignored files; a commit hook scans staged content. Full detail in Security model.

Privacy

There is no telemetry, no analytics, no account and no service of ours anywhere.

The toolkit makes exactly three kinds of outbound request, all of them to public endpoints you can see in the source:

Request When What it carries
git ls-remote / git fetch against this repository and the pinned upstreams install, and fkt check at most every 12 hours what git sends
one GET of security-advisories.tsv alongside an update check nothing identifying — it is a static file, and the matching happens on your machine
whatever you install (bun, rtk, gstack, pip packages) first install their own business; each is named in Provenance

fkt disable stops update checks. FKT_OFFLINE=1 forbids all network access. Security advisories deliberately survive fkt disable — turning off "there is a new version" should not turn off "the version you are on has a known problem" — and have their own switch.

Context cost

Claude Code injects name + description for every model-discoverable skill at session start, budgeted at 2% of your context window. Past that it drops descriptions without a warning, and a skill listed by name alone cannot be routed to by the model.

Before this toolkit's plugin split, its install put 54,529 characters into that listing — 13× the budget of a 200k-token context. Roughly fifty skills were unroutable and nothing said so.

bun run catalog:budget

is CI-enforced at 2,048 characters with a per-plugin, per-skill breakdown. Measurement, method and the full before/after in Skill context economy.

Repository layout

.claude-plugin/  generated marketplace manifest
bin/             executables on PATH (cc-provider, fkt)
catalog/         catalog toolchain (src, tests, cache, generated)
docs/            documentation — start at docs/README.md
hooks/           git and Claude Code hooks
memory/          persistent memory files
migrations/      versioned bootstrap migrations run by `fkt`
providers/       API provider definitions
scripts/         maintenance and test scripts
skills/          repo-owned plugins (fk-*) and installer-fetched packs
utils/           shared Python helpers
install.sh       installer for Linux/macOS/WSL — public URL, do not move
install.ps1      installer for native Windows — public URL, do not move
marketplace.toml          plugin marketplace source of truth
skills-sources.toml       declarative source manifest
skills-source.lock.json   pinned revisions and digests
security-advisories.tsv   advisory feed consumed by `fkt`
VERSION          single version source of truth
package.json     catalog toolchain scripts
tsconfig.json    TypeScript configuration
bun.lock         dependency lock
CLAUDE.md        repository instructions for Claude Code
README.md        this file
docs/            documentation, including the release process and archive
CONTRIBUTING.md  contribution guide
CODE_OF_CONDUCT.md  community standards
SECURITY.md      vulnerability reporting
LICENSE          MIT, for this repository's own code
config.json.example     template seeded to config.json on install
settings.json.example   template seeded to settings.json on install
PSScriptAnalyzerSettings.psd1   PowerShell lint configuration

Generated artifacts live in catalog/generated/ and are rebuilt by bun run catalog:generate — never edit them by hand. Published release asset names stay stable regardless of where their sources sit in the tree.

Contributing

Contributions are genuinely welcome — this is more useful the more people shape it. Especially valuable:

  • New source adapters and skill sources, with a clear upstream licence
  • Platform support — macOS, native Windows and WSL edge cases
  • Tests, particularly around the resolver and the policy gate
  • Documentation — if something here was unclear, that is a bug
  • Bug reports including the failing command's output

Before opening a pull request:

bun install --frozen-lockfile
bun run typecheck
bun test catalog
bun run catalog:check
bun run docs:check

See CONTRIBUTING.md and the Code of Conduct.

Security

Report vulnerabilities privately — see SECURITY.md. Please do not open a public issue for security reports.

Licence and acknowledgements

This repository's own code is MIT. Cataloged and vendored content keeps its upstream licence; the resolver verifies each and withholds bodies it may not republish.

Built on the work of gstack, Anthropic's skills, impeccable, marketing skills, taste-skill, manim skills, Karpathy guidelines and rtk. Thank you to their authors.