Claude Code multi-project workspace launcher with custom prompts and isolated worktrees.
git clone https://github.com/btimothy-har/basecamp.git
cd basecamp && uv run install.py
basecamp setup
basecamp start basecampWhen working with Claude Code across multiple projects, you face friction:
- Scattered context — Each project needs different prompts, working styles, and domain knowledge
- Branch conflicts — Parallel conversations on the same repo compete for the working directory
- Repetitive setup — Re-configuring directories and prompts for each session
basecamp solves this with a single command that:
- Replaces Claude's default system prompt — Full control over behavior, consistency across sessions, tailored to your workflow (Claude Code still appends its tool definitions)
- Configures project context — Loads project-specific prompts and working styles automatically
- Supports isolated worktrees — Use
-l <label>to work in a labeled worktree for parallel conversations - Manages multi-repo projects — Groups related repositories under one project definition
Define projects in ~/.basecamp/projects.json with their directories, descriptions, and working styles. Launch any project with basecamp start <project>.
{
"my-project": {
"dirs": ["GitHub/my-project", "GitHub/my-project-docs"],
"description": "My awesome project",
"working_style": "engineering"
}
}Layer prompts for different contexts:
| Layer | Purpose |
|---|---|
| Environment | CLI context, Python/uv usage, project paths |
| Core | Working principles, task management, tool usage |
| Working Style | Role definition, communication style, code quality practices |
| Project Context | Domain knowledge, project-specific patterns |
Use -l <label> to work in an isolated worktree:
basecamp start myproject -l auth # Create or re-enter "auth" worktree
basecamp start myproject -l bugfix # Create or re-enter "bugfix" worktreeWorktrees live in ~/.worktrees/<repo>/<label>/ with branches named wt/<label>.
Requires uv and Claude Code.
git clone https://github.com/btimothy-har/basecamp.git
cd basecamp
uv run install.py # interactive (prompts for editable mode)
uv run install.py -e # editable (recommended for development)
uv run install.py --no-editableThis installs two tools (basecamp and observer) and saves the install directory to ~/.basecamp/config.json.
Then initialize the environment:
basecamp setup # check prerequisites, scaffold dirs, create default configIf basecamp or observer aren't in your PATH:
export PATH="$HOME/.local/bin:$PATH"uv tool upgrade basecamp-core && uv tool upgrade basecamp-observeruv tool uninstall basecamp-core && uv tool uninstall basecamp-observerbasecamp start <project> # Start in project directory
basecamp start <project> --resume # Resume previous conversation (-r)
basecamp start <project> -l <label> # Work in labeled worktree (creates if new)basecamp open <project> # Open basecamp + project directories
basecamp open <project> -n # Open in new window
basecamp open <project> -l <label> # Open in existing worktreebasecamp worktree list <project> # List worktrees for project
basecamp worktree list --all # List all worktrees (-a)
basecamp worktree clean <project> # Interactive cleanup
basecamp worktree clean <project> <name> # Remove specific worktree
basecamp worktree clean <project> --all # Remove all worktrees
basecamp worktree clean <project> -f # Force removal (--force)basecamp projects # Show available projectsProjects are defined in ~/.basecamp/projects.json:
{
"web-app": {
"dirs": ["GitHub/web-app"],
"description": "Main web application",
"working_style": "engineering"
},
"data-pipeline": {
"dirs": ["GitHub/pipeline", "GitHub/pipeline-config"],
"description": "ETL pipeline and configuration",
"working_style": "engineering",
"context": "pipeline"
}
}| Field | Required | Description |
|---|---|---|
dirs |
Yes | Paths relative to $HOME. First is primary (cwd), rest are --add-dir |
description |
No | Shown in basecamp projects list |
working_style |
No | Loads ~/.basecamp/prompts/working_styles/{name}.md (user override) or package default |
context |
No | Loads ~/.basecamp/prompts/context/{name}.md for project context |
basecamp replaces Claude Code's default system prompt via the --system-prompt flag. This gives you:
- Full control — Define how Claude approaches work, not Anthropic's defaults
- Consistency — Same behavior across sessions; immune to upstream prompt changes
- Customization — Prompts designed for your specific workflow
Claude Code still appends its own tool definitions section (tool schemas, permissions, MCP servers) which cannot be modified. basecamp controls everything else.
The system prompt is assembled from layered sources:
Runtime context (paths, platform, date)
↓
environment.md (CLI usage, Python/uv)
↓
working_styles/{name}.md (if configured)
↓
system.md (working principles, tools, agents)
Override system.md by placing a file at ~/.basecamp/prompts/system.md.
Project context is injected separately via a SessionStart hook, not included in the system prompt. This places the project context alongside any CLAUDE.md file in the primary repository.
| Style | Description |
|---|---|
engineering |
Partner role, quest-based work, code quality focus, frequent check-ins |
advisor |
Advisor role, efficient discovery, direct communication, decision support |
Create custom working styles in ~/.basecamp/prompts/working_styles/.
For multi-repo projects, add cross-repo context in ~/.basecamp/prompts/context/. The context field in project config points to this file.
Single-repo projects typically use CLAUDE.md in the repo itself.
basecamp includes optional plugins for extended functionality. These are complementary, not required.
| Plugin | Description |
|---|---|
bc-collab |
Collaborative discovery and planning for ideation and requirements |
bc-eng |
Code review, PR workflows, testing patterns, Python/SQL development |
bc-cursor |
Discovers .cursor/*.mdc context files |
bc-gpg-check |
Verifies GPG card before git commit/tag |
From within a Claude Code session started via basecamp:
/plugin marketplace add /path/to/basecamp
/plugin install bc-eng@basecamp
The first command registers basecamp as a marketplace (it discovers .claude-plugin/marketplace.json). The second installs a plugin from it. Available plugins: bc-collab, bc-cursor, bc-eng, bc-gpg-check.
Create custom plugins in plugins/ following Claude Code plugin docs. Plugins in plugins/private/ are gitignored.
Apache 2.0