{"_id":"@alicankorkmaz-sudo/capsule","_rev":"2-ce053e2c1b255e644db4aa898a68775f","name":"@alicankorkmaz-sudo/capsule","dist-tags":{"latest":"0.3.0"},"versions":{"0.2.0":{"name":"@alicankorkmaz-sudo/capsule","version":"0.2.0","keywords":["claude-code","codex","mcp","cli","profiles"],"author":{"name":"Alican Korkmaz"},"license":"MIT","_id":"@alicankorkmaz-sudo/capsule@0.2.0","maintainers":[{"name":"alicankorkmaz-sudo","email":"akorkmaz@pm.me"}],"homepage":"https://github.com/alicankorkmaz-sudo/capsule#readme","bugs":{"url":"https://github.com/alicankorkmaz-sudo/capsule/issues"},"bin":{"cx":"dist/server/profileCli.js","caps":"dist/server/cli/index.js"},"dist":{"shasum":"4b016b9aae4c585317ea1c74c1d9b6da22de8b58","tarball":"https://registry.npmjs.org/@alicankorkmaz-sudo/capsule/-/capsule-0.2.0.tgz","fileCount":31,"integrity":"sha512-32flcekE8WYNO8u00dIuoo/S9zwsWUrFNMDRfA4X9rnQi2MA1cMRUGbOyt5R4AWWqhcwkt3B1ZP0ttcNilgtig==","signatures":[{"sig":"MEQCIFsH3FqIvZ2pKwrgWBaan8sClICXWFyc39PgqEDFxI32AiBrPEJlyQSvwLc2Z/g4OEx6ycEWcmFYOydfmS5wF9kjYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":433343},"engines":{"node":">=20"},"gitHead":"272446a6e5d68040350491cad516e3379fca3b62","scripts":{"dev":"concurrently -k -n api,web -c cyan,magenta \"tsx watch server/src/index.ts\" \"vite --host 127.0.0.1\"","test":"vitest run","build":"npm run build:server && npm run build:client","start":"node dist/server/index.js","typecheck":"tsc -p tsconfig.server.json --noEmit && tsc -p tsconfig.client.json --noEmit","build:client":"vite build","build:server":"tsc -p tsconfig.server.json","prepublishOnly":"npm run typecheck && npm test && npm run build"},"_npmUser":{"name":"alicankorkmaz-sudo","email":"akorkmaz@pm.me"},"repository":{"url":"git+https://github.com/alicankorkmaz-sudo/capsule.git","type":"git"},"_npmVersion":"11.19.0","description":"Profile-based capability manager for Claude Code and Codex","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"^3.24.1","react":"^18.3.1","fastify":"^5.6.2","commander":"^15.0.0","react-dom":"^18.3.1","@iarna/toml":"^2.2.5","lucide-react":"^0.468.0","@fastify/static":"^10.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vite":"^6.0.3","vitest":"^4.1.10","typescript":"^5.7.2","@types/node":"^22.10.2","@types/react":"^18.3.17","concurrently":"^9.1.2","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"_npmOperationalInternal":{"tmp":"tmp/capsule_0.2.0_1787831438100_0.727858238522368","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"_id":"@alicankorkmaz-sudo/capsule@0.3.0","bin":{"cx":"dist/server/profileCli.js","caps":"dist/server/cli/index.js"},"bugs":{"url":"https://github.com/alicankorkmaz-sudo/capsule/issues"},"dist":{"shasum":"73e0e93e3c8e014cfddfcbb2aae0da6495fa7361","tarball":"https://registry.npmjs.org/@alicankorkmaz-sudo/capsule/-/capsule-0.3.0.tgz","fileCount":31,"integrity":"sha512-xlaDt4CoDKpNKS3LXhJmC7g1wvPFWTSWGq3rdrD4hI4kxNZfdFGmabXoMtqnbkRunayNJ81jvkWsja0f5sHxRA==","signatures":[{"sig":"MEUCIQDCVDA1sTjwLXoPHJbzsDUjVJ98NNQAlnshmTadQK5lbgIgBipDEKTS+zZclOQjnBtYkzzAsHjVmh9rHhkYPYCO0Jg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICnWq7vDhAdsrfYc+x32x1jv3Di8nKbyI9gM5wdaevfpAiBgxQLNDl4f7z7Z4KAQ/ma7jAgXStuW4KCDZH/NG3w6qg=="}],"unpackedSize":434874},"name":"@alicankorkmaz-sudo/capsule","author":{"name":"Alican Korkmaz"},"engines":{"node":">=20"},"gitHead":"4a9a99adcae7542e6655e041ff81d9ebbcadca05","license":"MIT","scripts":{"dev":"concurrently -k -n api,web -c cyan,magenta \"tsx watch server/src/index.ts\" \"vite --host 127.0.0.1\"","test":"vitest run","build":"npm run build:server && npm run build:client","start":"node dist/server/index.js","typecheck":"tsc -p tsconfig.server.json --noEmit && tsc -p tsconfig.client.json --noEmit","build:client":"vite build","build:server":"tsc -p tsconfig.server.json","prepublishOnly":"npm run typecheck && npm test && npm run build"},"version":"0.3.0","_npmUser":{"name":"alicankorkmaz-sudo","email":"akorkmaz@pm.me"},"homepage":"https://github.com/alicankorkmaz-sudo/capsule#readme","keywords":["claude-code","codex","mcp","cli","profiles"],"repository":{"url":"git+https://github.com/alicankorkmaz-sudo/capsule.git","type":"git"},"_npmVersion":"11.19.1","description":"Profile-based capability manager for Claude Code and Codex","directories":{},"maintainers":[{"name":"alicankorkmaz-sudo","email":"akorkmaz@pm.me"}],"_nodeVersion":"26.9.0","dependencies":{"zod":"^3.24.1","react":"^18.3.1","fastify":"^5.6.2","commander":"^15.0.0","react-dom":"^18.3.1","@iarna/toml":"^2.2.5","lucide-react":"^0.468.0","@fastify/static":"^10.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vite":"^6.0.3","vitest":"^4.1.10","typescript":"^5.7.2","@types/node":"^22.10.2","@types/react":"^18.3.17","concurrently":"^9.1.2","@types/react-dom":"^18.3.5","@vitejs/plugin-react":"^4.3.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capsule_0.3.0_1790692762534_0.8955572908567198"}}},"time":{"created":"2026-08-27T11:50:37.927Z","modified":"2026-09-29T14:39:22.877Z","0.2.0":"2026-08-27T11:50:38.251Z","0.3.0":"2026-09-29T14:39:22.674Z"},"bugs":{"url":"https://github.com/alicankorkmaz-sudo/capsule/issues"},"author":{"name":"Alican Korkmaz"},"license":"MIT","homepage":"https://github.com/alicankorkmaz-sudo/capsule#readme","keywords":["claude-code","codex","mcp","cli","profiles"],"repository":{"url":"git+https://github.com/alicankorkmaz-sudo/capsule.git","type":"git"},"description":"Profile-based capability manager for Claude Code and Codex","maintainers":[{"name":"alicankorkmaz-sudo","email":"akorkmaz@pm.me"}],"readme":"# Capsule\n\n[![CI](https://github.com/alicankorkmaz-sudo/capsule/actions/workflows/ci.yml/badge.svg)](https://github.com/alicankorkmaz-sudo/capsule/actions/workflows/ci.yml)\n\nProfile-based capability manager for Claude Code and Codex.\n\nClaude Code configuration is spread across several files, and every project wants a\ndifferent slice of it. Capsule bundles capabilities into named **profiles**, applies a\nprofile to a project in one command, and backs up whatever it overwrites.\n\n## Capabilities\n\nA profile enables any mix of six capability kinds:\n\n| Kind | What it is |\n| --- | --- |\n| `mcp` | An MCP server entry |\n| `installed-plugin` | A Claude Code plugin installed from a marketplace |\n| `custom-plugin` | An installed plugin forked into an editable copy |\n| `skill` | A Claude Code skill |\n| `hook` | A Claude Code hook |\n| `instruction` | CLAUDE.md / instruction content |\n\n## Targets\n\nCapabilities are written into six config targets, each detected and validated separately:\n\n| Key | File |\n| --- | --- |\n| `codex` | `~/.codex/config.toml` |\n| `codex-project` | `<project>/.codex/config.toml` |\n| `claude-desktop` | `~/Library/Application Support/Claude/claude_desktop_config.json` |\n| `claude-code-user` | `~/.claude.json` |\n| `claude-code-local` | `~/.claude.json` (project-local scope) |\n| `claude-code-project` | `<project>/.mcp.json` |\n\n## Install\n\n```bash\nnpm install -g @alicankorkmaz-sudo/capsule\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/alicankorkmaz-sudo/capsule.git\ncd capsule\nnpm install\nnpm run build\nnpm link          # installs the `caps` and `cx` binaries\n```\n\nRequires Node 20 or newer.\n\n## Usage\n\nTwo binaries:\n\n- **`caps`** — the manager CLI.\n- **`cx`** — launcher; starts Claude Code (or Codex, via `--target codex`) in the current directory, applying a profile if one is given or assigned.\n\nWithout `-p`, `cx` means *no profile override*: a project that already has an\nassigned profile gets it, and a project with none launches with its own\nexisting setup, untouched — Capsule writes nothing and records nothing. Use\n`cx -p vanilla` to explicitly launch in safe mode with customizations disabled.\n\n```bash\ncx                          # the project's assigned profile, or its own setup\ncx -p personal              # launch with a named profile\ncx -p vanilla               # explicitly disable all customizations\ncx -p personal -- --resume  # pass arguments through to Claude Code\ncx -t codex                 # start Codex instead of Claude Code\ncx --yolo                   # skip every permission/approval prompt\ncx -t codex --yolo          # same, for Codex\n\ncaps profiles list          # all profiles and their capabilities\ncaps profiles apply personal\ncaps profiles preview personal   # dry run — show what would change\ncaps profiles deactivate         # restore the project's original files\n\ncaps servers list           # MCP servers across every target\ncaps targets                # config files and their status\ncaps catalog list           # every known capability\ncaps catalog create autosave -k hook --event SessionEnd --command ./save.sh --timeout 30\ncaps plugins sync           # pull installed Claude Code plugins into the catalog\ncaps import scan            # find importable capabilities in existing configs\ncaps backups list           # every backup Capsule has taken\n```\n\nGlobal flags: `-C <path>` (project directory), `--json`, `-y`, `--elevated`.\n\nRun `caps <command> --help` for the full surface.\n\n### Web UI\n\n```bash\nnpm run dev     # API on :8787, Vite dev server on :5173\nnpm start       # built server on :8787, serves the built client\n```\n\n## Safety\n\nApplying a profile rewrites managed files, so Capsule backs up their prior contents\nfirst — `caps backups list`, then `caps backups restore <id>` or `restore-group <id>`.\n### Skipping permission prompts\n\n`--yolo` starts the agent with every confirmation turned off: it passes\n`--dangerously-skip-permissions` to Claude Code and\n`--dangerously-bypass-approvals-and-sandbox` to Codex. The agent can then run\ncommands without asking, so use it only where that blast radius is acceptable.\nIt is rejected with the `vanilla` profile, whose whole point is safe mode.\n\nCodex reads MCP servers from `~/.codex/config.toml` (managed by `caps servers`)\nrather than from a compiled profile, so `cx -t codex` applies the profile's\nClaude-side files but warns that profile plugin directories are not passed to\nCodex.\n\nIf a managed file was edited outside Capsule, apply refuses until you pass `--force`,\nso hand edits are never silently clobbered.\n\n## State\n\nProfiles, the catalog, and backups live in `~/.capsule`. Set `CAPSULE_PROJECTS_DIR` to\nchange where `caps projects` looks for projects (default `~/Code`).\n\nA pre-rebrand `~/.mcpmanager` directory is moved to `~/.capsule` automatically on first\nrun. If both exist, Capsule leaves them alone and warns — merge them yourself.\n\n## Development\n\n```bash\nnpm run typecheck\nnpm test\nnpm run build\n```\n\nNote on naming: `mcp` throughout the code refers to the Model Context Protocol, not to\nthis tool. `McpManager` is the class that reads and writes MCP server entries across\ntargets, alongside `ProfileManager`.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}