https://github.com/technicalpickles/fitout
Context-aware plugin manager for Claude Code
https://github.com/technicalpickles/fitout
claude claude-code cli npm plugins
Last synced: 6 days ago
JSON representation
Context-aware plugin manager for Claude Code
- Host: GitHub
- URL: https://github.com/technicalpickles/fitout
- Owner: technicalpickles
- License: mit
- Created: 2026-01-30T21:07:13.000Z (20 days ago)
- Default Branch: main
- Last Pushed: 2026-02-02T20:30:17.000Z (17 days ago)
- Last Synced: 2026-02-03T10:31:11.326Z (17 days ago)
- Topics: claude, claude-code, cli, npm, plugins
- Language: TypeScript
- Size: 292 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Fitout
[](https://github.com/technicalpickles/fitout/actions/workflows/ci.yml)
Context-aware plugin manager for Claude Code.
## The Problem
Managing Claude Code plugins across projects is painful:
- Config files *look* correct but don't reflect what's actually installed
- This mismatch leads to broken sessions and missing capabilities
- Manually syncing plugins across projects is tedious and error-prone
## The Solution
Fitout ensures your actual runtime state matches your declared configuration.
1. Declare desired plugins in `.claude/fitout.toml`
2. Run `fitout status` to see the diff
3. Run `fitout install` to sync
## Installation
```bash
# Install globally
npm install -g fitout
# Set up Claude integration
fitout init
```
This adds a SessionStart hook to Claude Code that automatically installs missing plugins when you start a session.
### Non-interactive setup
```bash
fitout init --yes # Use defaults (creates default profile)
fitout init --hook-only # Only add hook, no profile
```
Requires [Claude Code CLI](https://claude.ai/docs/claude-code) to be installed.
## Quick Start
Create `.claude/fitout.toml` in your project:
```toml
plugins = [
"superpowers@superpowers-marketplace",
"ci-cd-tools@pickled-claude-plugins",
]
```
Check status:
```bash
fitout status
```
Output:
```
Context: /path/to/project
✗ superpowers@superpowers-marketplace (missing)
✗ ci-cd-tools@pickled-claude-plugins (missing)
0 present, 2 missing
```
Install missing plugins:
```bash
fitout install
```
## Commands
### `fitout status`
Shows the diff between desired and installed plugins.
- `✓` - Plugin is installed
- `✗` - Plugin is missing
- `?` - Plugin is installed but not in config
Exit code is `1` if any plugins are missing, `0` otherwise.
### `fitout install`
Installs missing plugins to sync with config.
```bash
fitout install # Install missing plugins
fitout install --dry-run # Preview what would be installed
```
## Profiles
Share plugin sets across projects using profiles.
### User Profiles
Create profiles at `~/.config/fitout/profiles/`:
```toml
# ~/.config/fitout/profiles/default.toml
# Auto-included in every project (silent if missing)
plugins = [
"superpowers@superpowers-marketplace",
]
```
```toml
# ~/.config/fitout/profiles/backend.toml
plugins = [
"database-tools@some-registry",
"api-helpers@some-registry",
]
```
### Using Profiles
Reference profiles in your project config:
```toml
# .claude/fitout.toml
profiles = ["backend"]
plugins = [
"project-specific@registry",
]
```
Plugins merge additively. The `default` profile auto-includes if present.
### Provenance
Status output shows where each plugin comes from:
```
Context: /path/to/project
✓ superpowers@superpowers-marketplace (from: default)
✓ database-tools@some-registry (from: backend)
✓ project-specific@registry
3 present
```
## Configuration Reference
### Project Config (`.claude/fitout.toml`)
```toml
# Optional: explicit profiles to include
profiles = ["backend", "testing"]
# Required: plugins for this project
plugins = [
"plugin-name@registry",
]
```
### Profile Config (`~/.config/fitout/profiles/.toml`)
```toml
# Plugins provided by this profile
plugins = [
"plugin-name@registry",
]
```
## Development
```bash
npm install # Install dependencies
npm test # Run tests
npm run dev -- status # Run in dev mode
npm run build # Build to dist/
```
## License
MIT