Skip to main content

A package manager and lockfile for your Claude Code setup.

Project description

cchad

A package manager and lockfile for your Claude Code setup.

CI PyPI Python License: MIT

cchad scans a repo, detects its tech stack, and installs a curated, deconflicted set of MCP servers and skills for Claude Code — recording every choice in a committed manifest so anyone who clones the repo gets an identical setup with one command.

Mental model: a preset is your base tooling · auto_plugins_mcps.md is the lockfile · cchad sync is npm install.


Why

Claude Code gets its power from MCP servers, skills, and hooks — but assembling the right set is tedious and easy to get wrong:

  • Discovery is manual. The ecosystem is thousands of repos; finding the few that matter for this project is research every time.
  • Tools fight each other. Stack two workflow frameworks or two browser MCPs and they conflict and degrade the agent.
  • Config isn't shared. Everyone hand-configures their own .claude/ and .mcp.json, so teammates drift.

cchad does curated + auto-detected + deconflicted + team-synced in one tool, and the result is a plain file you can read and review in a PR.

What makes it different

  1. The manifest is the source of truth. A committed, human-readable auto_plugins_mcps.md records what was detected, what got installed, and why. The CLI applies the manifest — it never hides config in an opaque blob.
  2. Deconfliction is first-class. At most one workflow spine, one browser MCP, a capped number of servers, no redundant duplicates — every drop comes with a reason.

Principles: minimal by default, plan before apply, safe (atomic writes, backups, rollback, never auto-runs untrusted installers).


Install

# with uv (recommended)
uv tool install cchad          # or run ad-hoc: uvx cchad --help

# or with pipx
pipx install cchad

Inside Claude Code, install the plugin instead:

/plugin marketplace add Cypsy1714/cchad
/plugin install cchad@cchad

Quickstart

In a terminal

cchad setup        # once: pick a baseline, applied to your user scope
cchad init         # in a repo: detect → preview plan → apply + write the manifest

In Claude Code

/cchad:setup       # once: pick a baseline
/cchad:init        # in a repo: preview the plan, confirm, apply

Onboarding a teammate

Someone clones a repo that already has auto_plugins_mcps.md committed:

cchad sync         # rebuilds their local .mcp.json / .claude to match the manifest

They open Claude Code and it's configured identically.


How it works

cchad has two layers:

Layer Scope Lives in Set by
Base user (~/.claude/) your config.toml cchad setup
Project this repo committed auto_plugins_mcps.md cchad init
  • A preset (minimal / recommended / full) picks your base tooling — the things you want in every project.
  • Rules map the detected stack to project packages (e.g. mongodb → the MongoDB MCP, react → a React skill).
  • The resolver merges both layers and deconflicts them (see docs/deconfliction.md).
  • Apply writes real config: .mcp.json, skill directories, and a fenced block in CLAUDE.md. Plugins are never auto-installed — cchad prints the exact command.

The manifest

auto_plugins_mcps.md is committed to the repo. Its frontmatter is what cchad reads; the body is what your teammates review in a PR.

---
cchad_version: 0.1.0
generated: 2026-07-01
stack: [fastapi, javascript, mongodb, python, react, vite]
tools:
  - id: context7
    kind: mcp
    source: npx -y @upstash/context7-mcp
    scope: project
  - id: mongodb-mcp
    kind: mcp
    source: npx -y mongodb-mcp-server
    scope: project
skipped:
  - id: playwright-mcp
    reason: "only one browser tool allowed; kept 'chrome-devtools-mcp'"
---

# Claude Code setup for this repo
...

Commands

Command What it does
cchad setup Pick a base layer, save config, apply it to your user scope.
cchad init Detect the stack, preview the plan, apply it, write the manifest.
cchad plan Preview the plan (and diff vs the manifest). Writes nothing.
cchad apply Apply this repo's committed manifest to local config.
cchad sync Rebuild local config from the committed manifest (onboarding).
cchad update Reload the catalog and show drift vs the manifest.
cchad add / remove <id> Add or remove a project package in the manifest.
cchad base list / add / remove Manage your base layer.
cchad config edit Open your config in $EDITOR.
cchad rollback Undo the last apply from its .bak backups.

Global flags: --json, --yes, --plan-only, --no-base, --scope. See docs/cli.md.

Configuration

Your personal base choices and policy live in ~/.config/cchad/config.toml (not committed):

[base]
preset  = "recommended"        # minimal | recommended | full
enable  = []                   # extra base packages
disable = []                   # preset items to drop

[policy]
max_mcp_servers = 5
browser = "chrome-devtools-mcp"  # which single browser MCP wins
spine   = "superpowers"          # which single workflow spine wins

[catalog]
sources = []                   # your own catalog YAMLs (paths or github: refs)

See docs/configuration.md.

Extending the catalog

The value is the data. Add your own packages, presets, and rules — no code needed — by pointing [catalog].sources at a YAML file or a github:owner/repo ref. Your entries override the shipped ones by id. See docs/extending.md.

Safety

  • Plan before apply — nothing touches disk without a preview.
  • Atomic writes + .bak backups + cchad rollback — your existing .mcp.json and .claude/ are never corrupted.
  • No auto-run installers — cchad only writes config and installs from sources in its catalog. Plugins become a manual step with the exact command.
  • No secrets in the manifest — servers that need keys reference environment variables; tokens are never written to committed files.

Documentation

Contributing

Issues and PRs welcome — see CONTRIBUTING.md. Adding a package or a detection rule is usually a one-line change to a YAML file.

License

MIT © Cypsy1714

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cchad-0.1.0.tar.gz (41.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cchad-0.1.0-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file cchad-0.1.0.tar.gz.

File metadata

  • Download URL: cchad-0.1.0.tar.gz
  • Upload date:
  • Size: 41.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cchad-0.1.0.tar.gz
Algorithm Hash digest
SHA256 af92cc3e643eff23df1eb7d7aa3c2c7de4a9c8af7bf5a26915a26f431d429ea1
MD5 b63a5d8d7937acf91f7f18f8a35ab1c0
BLAKE2b-256 e48297b4e37c4e80c04b095ae156bc27280500370747555348efcae4749a445b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cchad-0.1.0.tar.gz:

Publisher: release.yml on Cypsy1714/cchad

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cchad-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: cchad-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 37.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cchad-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 99104a1d012618aa8469b2b589b81c2c0962712abe483b3a2e500b6649de8ca9
MD5 2a7d8320a9c92e2586a40f113237f97d
BLAKE2b-256 e7a02ff97ab9ffae0be375f9ac7567816f6efde8584321e2cbd7742c7610213a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cchad-0.1.0-py3-none-any.whl:

Publisher: release.yml on Cypsy1714/cchad

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page