cc-toys
Context switching shouldn't feel like a ceremony
Shell CLI helpers for Claude Code session management - ccup launcher and agentenv profile manager
Small, friendly CLI helpers that make Claude Code sessions easier. Not a framework—just a couple of shell toys that preserve flow state.
The Problem
Claude Code’s default workflow creates friction:
- Session resumption is backwards — Must know you want to resume before launching. Type
claudeand you’ve already started new. - Cognitive load of UUIDs — Remember session IDs? Find them in files? Copy-paste?
- Context bloat — Unnecessary MCP servers and agents eat context window
- Configuration fragmentation — Manual management of which agents/profiles are active
Every moment fumbling with this is a moment pulled out of flow state.
The Solution
ccup — Session Launcher
ccup # Launch from current project
ccup -a # Select from all onboarded projects
What it does:
- Shows recent sessions (smart filtered, no orphans)
- Displays git branch, date, last message preview
- Lets you pick MCP profile (or use project default)
- Asks about yolo mode
- Launches with all correct flags
Inverts the default: See sessions before launching, not after with /resume.
agentenv — Agent Profile Manager
agentenv demo # Activate demo profile
agentenv --clear # Remove all agents
agentenv --only pong # Single agent
Uses symlinks as single source of truth. Agent files live in agents.env/, active agents are pointers in agents/.
Design Philosophy
“Developer experience is the accumulation of small details.”
Why Pure Bash?
- Zero-cost abstraction — No interpreter startup, no node_modules
- Ecosystem fit — Native language of the shell
- Simple distribution — Single files, curl-installable
Why Single-Key Input?
read -n 1 eliminates Enter keypresses. Seems trivial, but compounded over hundreds of uses, it makes the interface feel like direct manipulation rather than Q&A.
Why Symlinks for Agents?
- Atomic switching — Clear all, create new in one operation
- No data duplication — Edit once, effective everywhere
- Transparent state — Filesystem is the database
Technical Decisions
| Choice | Why |
|---|---|
jq dependency | Robust JSON parsing vs brittle grep/sed |
fzf optional | Superior UX for those who have it, fallback for others |
| Session filtering | Only show meaningful conversations, not zombies |
| DIM styling | Visual hierarchy without clutter |
| Green checkmarks | Constant confirmation builds confidence |
Workflow Transformation
Before: Session-centric thinking. “What was that UUID?”
After: Project-centric thinking. “I’m working on project-x; pick up where I left off.”
The claude CLI feels less like a command-line tool and more like an integrated part of the project environment.
Ecosystem Position
cc-toys is a power-user wrapper that sits on top of claude. Doesn’t replace the core—orchestrates it.
Why isn’t this built-in? Official tools must remain unopinionated to serve everyone. Core CLIs provide stable primitives; community builds workflow-specific tools on top.
Healthy division of labor.
Key Insight
“True productivity isn’t just about raw power, but about the seamless and elegant application of that power.”
The deeper lesson: Great tools aren’t about what they can do—they’re about how they feel to use. Remove tiny frictions—an extra keystroke, a moment of confusion, a manual file operation—and you transform functional into joyful.
The CLAUDE.md Innovation
The project’s CLAUDE.md is a blueprint for AI collaboration—documenting design decisions, testing strategies, and enhancement plans for the AI itself. A revolutionary concept: maintain a guidance document for your AI collaborator.