Crates.io | cctx |
lib.rs | cctx |
version | 0.1.6 |
created_at | 2025-06-05 04:07:33.215129+00 |
updated_at | 2025-06-19 23:22:30.764117+00 |
description | Claude Code context manager for switching between multiple settings.json configurations |
homepage | https://github.com/nwiizo/cctx |
repository | https://github.com/nwiizo/cctx |
max_upload_size | |
id | 1701066 |
size | 154,541 |
โก Fast and intuitive way to switch between Claude Code contexts (
~/.claude/settings.json
)
cctx (Claude Context) is a kubectx-inspired command-line tool for managing multiple Claude Code configurations. Switch between different permission sets, environments, and settings with a single command.
cctx -
From crates.io (recommended):
cargo install cctx
From source:
git clone https://github.com/nwiizo/cctx.git
cd cctx
cargo install --path .
Pre-built binaries: Download from GitHub Releases
# 1. Create your first context from current settings
cctx -n personal
# 2. Create a restricted work context
cctx -n work
# 3. Switch between contexts
cctx work # Switch to work
cctx personal # Switch to personal
cctx - # Switch back to previous
# List all contexts (current highlighted in green)
cctx
# Switch to a context
cctx work
# Switch to previous context
cctx -
# Show current context
cctx -c
cctx respects Claude Code's settings hierarchy with a simple, predictable approach:
./.claude/settings.local.json
)./.claude/settings.json
)~/.claude/settings.json
) (lowest priority)# Default: always uses user-level contexts (predictable)
cctx # Manages ~/.claude/settings.json
# Explicit flags for project/local contexts
cctx --in-project # Manages ./.claude/settings.json
cctx --local # Manages ./.claude/settings.local.json
# All commands work with any level
cctx --in-project work # Switch to 'work' in project contexts
cctx --local staging # Switch to 'staging' in local contexts
# Create new context from current settings
cctx -n project-alpha
# Delete a context
cctx -d old-project
# Rename a context
cctx -r old-name new-name
# Edit context with $EDITOR
cctx -e work
# Show context content (JSON)
cctx -s production
# Unset current context
cctx -u
# Export context to file
cctx --export production > prod-settings.json
# Import context from file
cctx --import staging < staging-settings.json
# Share contexts between machines
cctx --export work | ssh remote-host 'cctx --import work'
Merge permissions from other contexts or files to build complex configurations:
# Merge user settings into current context
cctx --merge-from user
# Merge from another context
cctx --merge-from personal work
# Merge from a specific file
cctx --merge-from /path/to/permissions.json staging
# Remove previously merged permissions
cctx --unmerge user
# View merge history
cctx --merge-history
# Merge into a specific context (default is current)
cctx --merge-from user production
Merge Features:
Enable tab completion for faster workflow:
# Bash
cctx --completions bash > ~/.local/share/bash-completion/completions/cctx
# Zsh
cctx --completions zsh > /usr/local/share/zsh/site-functions/_cctx
# Fish
cctx --completions fish > ~/.config/fish/completions/cctx.fish
# PowerShell
cctx --completions powershell > cctx.ps1
Contexts are stored as individual JSON files at different levels:
๐ User Level (~/.claude/
):
๐ ~/.claude/
โโโ โ๏ธ settings.json # Active user context
โโโ ๐ settings/
โโโ ๐ผ work.json # Work context
โโโ ๐ personal.json # Personal context
โโโ ๐ .cctx-state.json # State tracking
๐ Project Level (./.claude/
):
๐ ./.claude/
โโโ โ๏ธ settings.json # Shared project context
โโโ ๐ settings.local.json # Local project context (gitignored)
โโโ ๐ settings/
โโโ ๐ staging.json # Staging context
โโโ ๐ญ production.json # Production context
โโโ ๐ .cctx-state.json # Project state
โโโ ๐ .cctx-state.local.json # Local state
When no arguments are provided, cctx enters interactive mode:
# Interactive context selection
cctx
# Create restricted work context for safer collaboration
cctx -n work
cctx -e work # Edit to add restrictions:
# - Read/Edit only in ~/work/** and current directory
# - Deny: docker, kubectl, terraform, ssh, WebFetch, WebSearch
# - Basic dev tools: git, npm, cargo, python only
# Create project-specific contexts
cctx -n client-alpha # For client work
cctx -n side-project # For personal projects
cctx -n experiments # For trying new things
# Switch based on current work
cctx client-alpha # Restricted permissions
cctx experiments # Full permissions for exploration
# Morning: start with work context
cctx work
# Need full access for personal project
cctx personal
# Quick switch back to work
cctx -
# Check current context anytime
cctx -c
# Default restricted context for screen sharing
cctx work
# Full permissions only when needed
cctx personal
# Project-specific minimal permissions
cctx -n client-project
# Configure: only access to ~/projects/client/**
๐ค User-Level Development:
# Personal development with full permissions (default behavior)
cctx personal
# Work context with restrictions (default behavior)
cctx work
๐ Project-Level Collaboration:
# Shared team settings (committed to git)
cctx --in-project staging
cctx --in-project production
# Personal project overrides (gitignored)
cctx --local development
cctx --local debug
๐ Multi-Level Management:
# Check current level (always shows helpful context)
cctx # Shows: ๐ค User contexts + hints for project/local if available
# Switch levels in same directory
cctx personal # User level (default)
cctx --in-project staging # Project level
cctx --local debug # Local level
Use Claude Code to help create specialized contexts:
# Create production-safe context
claude --model opus <<'EOF'
Create a production.json context file with these restrictions:
- Read-only access to most files
- No docker/kubectl/terraform access
- No system file editing
- Limited bash commands for safety
- Based on my current ~/.claude/settings.json but secured
EOF
# Create template contexts for different scenarios
cctx -n template-minimal # Minimal permissions
cctx -n template-dev # Development tools only
cctx -n template-ops # Operations/deployment tools
cctx -n template-restricted # Screen-sharing safe
# Sync contexts across machines
rsync -av ~/.claude/settings/ remote:~/.claude/settings/
# Or use git for version control
cd ~/.claude/settings
git init && git add . && git commit -m "Initial contexts"
git remote add origin git@github.com:user/claude-contexts.git
git push -u origin main
# Create permission hierarchy
cctx -n restricted # No file write, no network, no system access
cctx -n development # File access to ~/dev/**, basic tools only
cctx -n full # All permissions for personal use
cctx -n demo # Read-only, safe for presentations
# Review context permissions regularly
cctx -s work # Check work context permissions
cctx -s personal # Review personal context
cctx -s production # Audit production context
# Quick security check
cctx -s restricted | grep -i "allow\|deny"
cctx -
frequently - Quick toggle between two contextscctx
(no flags) handles 90% of use cases perfectlyalias work='cctx work'
, alias home='cctx personal'
# Add to your shell profile (~/.bashrc, ~/.zshrc)
export EDITOR=code # For cctx -e
alias cx='cctx' # Shorter command
alias cxs='cctx -s' # Show context content
alias cxc='cctx -c' # Show current context
# Git hooks for automatic context switching
# Pre-commit hook to ensure proper context
#!/bin/bash
if [[ $(cctx -c) != "work" ]]; then
echo "โ ๏ธ Switching to work context for this repo"
cctx work
fi
# Tmux integration - show context in status bar
set -g status-right "Context: #(cctx -c) | %H:%M"
# VS Code integration - add to settings.json
"terminal.integrated.env.osx": {
"CLAUDE_CONTEXT": "$(cctx -c 2>/dev/null || echo 'none')"
}
# Fish shell prompt integration
function fish_prompt
set_color cyan
echo -n (cctx -c 2>/dev/null || echo 'no-context')
set_color normal
echo -n '> '
end
This project includes comprehensive automation tools:
Simple One-Command Release:
# Automatic release with all quality checks
./quick-release.sh patch # 0.1.0 -> 0.1.1
./quick-release.sh minor # 0.1.0 -> 0.2.0
./quick-release.sh major # 0.1.0 -> 1.0.0
The script automatically:
# Using justfile (install: cargo install just)
just check # Run all quality checks
just release-patch # Same as ./quick-release.sh patch
just setup # Setup development environment
just audit # Security audit
just completions fish # Generate shell completions
We welcome contributions! This project includes:
To enable automatic publishing to crates.io:
Get your crates.io API token:
cargo login # Opens browser to get token
# Or visit https://crates.io/me โ New Token
Add to GitHub repository secrets:
Web UI method:
CARGO_REGISTRY_TOKEN
CLI method (using gh):
# Store token securely and add to repository
echo "YOUR_TOKEN" | gh secret set CARGO_REGISTRY_TOKEN
See CLAUDE.md for detailed development guidelines.
MIT License - see LICENSE file for details.
cctx
- List contexts (defaults to user-level)cctx <name>
- Switch to contextcctx -
- Switch to previous contextcctx -c
- Show current context namecctx -q
- Quiet mode (only show current context)cctx -n <name>
- Create new context from current settingscctx -d <name>
- Delete context (interactive if no name)cctx -r <old> <new>
- Rename contextcctx -e [name]
- Edit context with $EDITORcctx -s [name]
- Show context content (JSON)cctx -u
- Unset current context (removes settings file)cctx --export [name]
- Export context to stdoutcctx --import <name>
- Import context from stdincctx --merge-from <source> [target]
- Merge permissions from source into target (default: current)
user
, another context name, or file pathcctx --merge-from <source> --merge-full [target]
- Merge ALL settings (not just permissions)cctx --unmerge <source> [target]
- Remove previously merged permissionscctx --unmerge <source> --merge-full [target]
- Remove ALL previously merged settingscctx --merge-history [name]
- Show merge history for contextcctx
- User-level contexts (default: ~/.claude/settings.json
)cctx --in-project
- Project-level contexts (./.claude/settings.json
)cctx --local
- Local project contexts (./.claude/settings.local.json
)cctx --completions <shell>
- Generate shell completionscctx --help
- Show help informationcctx --version
- Show version informationcctx follows the principle of "Predictable defaults with explicit overrides":
~/.claude/settings.json
)--in-project
and --local
for specific casesThis approach eliminates surprises and cognitive overhead while maintaining full functionality.
cctx is designed to work with Claude Code configuration files. As Claude Code is actively developed by Anthropic, configuration formats and file structures may change over time.
We are committed to maintaining compatibility:
If you encounter compatibility issues after a Claude Code update, please open an issue and we'll address it promptly.
โญ Star this repo if cctx makes your Claude Code workflow better!
๐ Report Bug โข ๐ก Request Feature โข ๐ฌ Discussions