claude-code-toolkit
Part of the GoodieBag collection of tools and libraries
Claude Code management tool for automatic credential synchronization to GitHub, session monitoring, and daemon service management.
Features
- π Automatic Credential Sync: Syncs Claude Code credentials to GitHub organization/repository secrets
- β° Smart Scheduling: Monitors token expiry and syncs 1 minute after new token generation
- π― Multi-Target Support: Sync to multiple GitHub organizations and repositories simultaneously
- π Session Monitoring: Real-time session timer and status tracking with desktop notifications
- π§ Systemd User Service Integration: Runs as a background daemon with automatic startup
- π High Performance: Written in Rust for minimal resource usage and maximum reliability
Installation
Option 1: Cargo Install (Recommended)
# Install from crates.io
# Ensure ~/.cargo/bin is in your PATH
Option 2: From Source
# Clone the repository
# Build and install
Important: The binary must remain in a stable location for the daemon
service to work. If you move the binary after installing the service, run
claude-code-toolkit service install again.
Prerequisites
- Rust 2024 Edition (rustc 1.80+)
- GitHub CLI (
gh) installed and authenticated - GitHub Personal Access Token with appropriate permissions (see setup below)
- Claude Code installed and authenticated
- Linux/macOS with systemd (for daemon functionality)
GitHub Setup
1. Install GitHub CLI
# Ubuntu/Debian
# macOS
# Or download from https://cli.github.com/
2. Create GitHub Personal Access Token
- Go to GitHub Settings > Developer Settings > Personal Access Tokens > Fine-grained tokens
- Create a new token with these permissions:
- Repository access: Select specific repositories OR all repositories (depending on your needs)
- Repository permissions:
Secrets: Write(required for updating repository secrets)Metadata: Read(required for basic repository access)
- Organization permissions (if syncing to organizations):
Organization secrets: Write(required for updating organization secrets)Members: Read(required for organization access)
3. Authenticate GitHub CLI
# Login using your PAT
# Or set token directly
# Verify authentication
Quick Start
- Install and Configure:
# Add GitHub organization
# Add GitHub repository
# Install and start daemon
- Check Status:
- Real-time Session Timer:
Commands
Session Management
claude-code-toolkit status- Show comprehensive session and sync statusclaude-code-toolkit timer- Real-time session timer with progress bar
Organization Management
claude-code-toolkit org add <name> [--secret-name NAME]- Add GitHub organizationclaude-code-toolkit org remove <name>- Remove organizationclaude-code-toolkit org list- List configured organizations with availability
Repository Management
claude-code-toolkit repo add <owner/repo> [--secret-name NAME]- Add repositoryclaude-code-toolkit repo remove <owner/repo>- Remove repositoryclaude-code-toolkit repo list- List configured repositories
Sync Operations
claude-code-toolkit sync now- Force immediate credential syncclaude-code-toolkit sync status- Show detailed sync status for all targetsclaude-code-toolkit sync logs [--lines N]- View daemon logs
Service Management
claude-code-toolkit service install- Install and start systemd user daemonclaude-code-toolkit service uninstall [--keep-config]- Uninstall daemonclaude-code-toolkit service start/stop/restart- Control daemonclaude-code-toolkit service enable/disable- Control auto-start on login
Configuration
claude-code-toolkit configure- Interactive configuration wizard (coming soon)
Configuration
Command-Line Configuration
You can configure targets using the CLI commands:
# Add organizations
# Add repositories
# List current configuration
Direct YAML Configuration
Alternative: You can directly edit the configuration file at
~/.goodiebag/claude-code/config.yml:
daemon:
log_level: info # debug, info, warn, error
sync_delay_after_expiry: 60 # seconds to wait after token expiry
github:
organizations:
- name: deepbrainspace
secret_name: CLAUDE_CODE_TOKEN # Custom secret name (optional)
- name: another-org
secret_name: CLAUDE_ACCESS_TOKEN
- name: simple-org # Uses default secret name
repositories:
- repo: user/special-repo
secret_name: CUSTOM_CLAUDE_TOKEN
- repo: owner/another-repo # Uses default secret name
notifications:
session_warnings: # Warning times (minutes before expiry)
sync_failures: true # Notify on sync failures
Configuration Notes:
- If
secret_nameis omitted, defaults toCLAUDE_CODE_TOKEN - Restart the daemon after editing YAML:
claude-code-toolkit service restart - Validate configuration:
claude-code-toolkit status - The CLI commands automatically update the YAML file
Daemon Installation Details
The claude-code-toolkit service install command:
- Creates Systemd Service: Installs
~/.config/systemd/user/claude-code-sync.service - References Current Binary: Uses the exact path of the currently running binary (no copying)
- User Service: Runs as a user service (no root privileges required)
- Auto-Start: Enables automatic startup on user login
- Security Sandboxing: Runs with restricted file system access
Service Location: ~/.config/systemd/user/claude-code-sync.service
Service Command: {binary_path} daemon Service Type: User service
(systemctl --user)
Manual Service Management
# View service status
# Control service directly
# View logs
# Remove service manually
How It Works
- Credential Monitoring: Daemon monitors
~/.claude/.credentials.jsonfor changes - Smart Timing: When token expires, waits 60 seconds for Claude Code to refresh it
- Automatic Sync: Detects new token and syncs to all configured GitHub targets
- Startup Recovery: Performs reconciliation check on startup to catch missed syncs
- Status Tracking: Maintains detailed sync status and error information per target
Architecture
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Claude Code βββββΆβ claude-code βββββΆβ GitHub Secrets β
β Credentials β β Daemon β β (Orgs & Repos) β
β ~/.claude/ β β (Systemd) β β β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ
β Configuration β
β ~/.goodiebag/ β
β claude-code/ β
ββββββββββββββββββββ
Development
Building
# Check code
# Run tests
# Build optimized binary
# Run with NX
Testing
The project includes comprehensive test coverage:
- Unit Tests: Core functionality testing
- Integration Tests: End-to-end workflow testing
- Property Tests: Edge case validation
# Run all tests
# Run tests with coverage
# Run specific test module
Code Quality
# Lint with clippy
# Format code
# Check formatting
Troubleshooting
Check Daemon Status
View Detailed Logs
Manual Sync
Reset Configuration
Performance
- Binary Size: ~3.5MB (optimized)
- Memory Usage: ~5-10MB runtime
- CPU Usage: Near-zero when idle
- Startup Time: <100ms
- Sync Time: ~2-5 seconds per target
Security
- Credential Security: Read-only access to local Claude credentials
- GitHub Authentication: Uses authenticated
ghCLI for all operations - Audit Trail: All operations logged with timestamps and outcomes
- Systemd Sandboxing: Runs with minimal file system permissions
- No Network Storage: All data stored locally in user directories
Contributing
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
License
MIT License - see LICENSE for details.
Support
- Issues: GitHub Issues
- Documentation: This README and inline code documentation
- Community: Discussions in the repository