Switch between AI agent configurations in one command.
Full setup with plugins and hooks, vanilla clean slate, or any custom profile — instantly, for 17 AI coding tools at once.
Quickstart · Commands · Supported Tools · How It Works · Contributing
You have Claude Code with 20 plugins, Codex with custom agents, Gemini with MCP servers — and sometimes you just want a clean slate. Or you want to test a new setup without losing your current one. Or you have a "work" config and a "personal" config.
Today, switching means manually moving dozens of directories and hoping you remember where everything was.
raise solves this with profile-based config switching via symlinks — atomic, instant, and credential-preserving.
~/.claude/ ──symlink──> ~/.raise/profiles/full-setup/claude/
~/.codex/ ──symlink──> ~/.raise/profiles/full-setup/codex/
~/.gemini/ ──symlink──> ~/.raise/profiles/full-setup/gemini/
...
$ raise use vanilla # instant switch, credentials preserved
~/.claude/ ──symlink──> ~/.raise/profiles/vanilla/claude/
~/.codex/ ──symlink──> ~/.raise/profiles/vanilla/codex/
~/.gemini/ ──symlink──> ~/.raise/profiles/vanilla/gemini/
# From source
git clone https://github.com/moabualruz/rice-aise.git
cd rice-aise
go build -o raise ./cmd/raise
sudo mv raise /usr/local/bin/
# Or with go install
go install github.com/mkh/rice-aise/cmd/raise@latest# Detect installed tools, save current config, create vanilla profile
raise init
# See what was detected
raise status
# Switch to vanilla (clean config, your credentials preserved)
raise use vanilla
# Switch back to your full setup
raise use 2026-04-07-current| Command | Description |
|---|---|
raise init |
First-run setup — detect tools, save current config, create vanilla profile |
raise use <name> |
Switch all tools to a named profile |
raise use <name> --only tool1,tool2 |
Switch only specified tools |
raise list |
List all profiles (* marks active) |
raise status |
Show active profile per tool in table format |
raise create <name> |
Create new profile with migrated credentials |
raise save <name> |
Snapshot current live config into a profile |
raise rename <old> <new> |
Rename a profile |
raise delete <name> |
Delete a profile (prompts for confirmation) |
raise delete <name> --force |
Delete without confirmation |
raise tools |
List all 17 supported tools and their config paths |
raise which <tool> |
Show which profile a specific tool uses |
raise version |
Print version |
# Switch only Claude and Codex to vanilla, keep everything else
raise use vanilla --only claude,codex
# Create a new "experiment" profile from current credentials
raise create experiment
# Check what Claude is currently using
raise which claude
# Snapshot your current tweaked config before trying something new
raise save before-experiment| ID | Tool | Config Directories |
|---|---|---|
claude |
Claude Code | ~/.claude/ |
codex |
Codex CLI (OpenAI) | ~/.codex/ |
gemini |
Gemini CLI (Google) | ~/.gemini/ |
opencode |
OpenCode | ~/.config/opencode/ ~/.local/share/opencode/ ~/.cache/opencode/ ~/.local/state/opencode/ |
pi |
Pi Coding Agent | ~/.pi/ |
copilot |
GitHub Copilot CLI | ~/.config/github-copilot/ ~/.copilot/ |
omc |
oh-my-claudecode | ~/.omc/ |
omx |
oh-my-codex | ~/.omx/ |
omg |
oh-my-gemini | ~/.omg/ |
aider |
Aider | ~/.aider/ + home dotfiles |
cline |
Cline CLI | ~/.cline/ |
continue |
Continue CLI | ~/.continue/ |
amp |
Amp (Sourcegraph) | ~/.config/amp/ |
goose |
Goose (Block) | ~/.config/block/goose/ ~/.local/share/goose/ ~/.local/state/goose/ |
amazonq |
Amazon Q Developer | ~/.aws/amazonq/ |
kiro |
Kiro CLI (AWS) | ~/.kiro/ |
kilo |
Kilo Code CLI | ~/.config/kilo/ |
raise init performs a one-time setup:
- Detects which AI tools are installed by checking for their config directories
- Moves all config directories into
~/.raise/profiles/<dated-name>/ - Creates symlinks from the original paths back to the profile
- Creates a vanilla profile containing only your credential files (OAuth tokens, API keys) — no plugins, hooks, or extensions
- Sets the current profile as active
raise use <name> atomically re-points symlinks using a safe temp-symlink + rename pattern:
os.Symlink(target, path + ".tmp") # create new symlink
os.Rename(path + ".tmp", path) # atomic swap
When creating profiles (raise init, raise create), only authentication files are migrated:
| Tool | Credential Files |
|---|---|
| Claude | .credentials.json |
| Codex | auth.json |
| Gemini | oauth_creds.json, google_accounts.json, mcp-oauth-tokens.json |
| OpenCode | auth.json (in data dir) |
| Pi | agent/auth.json |
| Copilot | apps.json (in auth dir) |
| Cline | data/secrets.json |
| Continue | config.yaml (keys inline) |
| Aider | .aider.env |
You never need to re-authenticate after switching profiles.
~/.raise/
config.json # active profile mapping per tool
profiles/
2026-04-07-current/ # your original full config
claude/ # full ~/.claude/ contents
codex/ # full ~/.codex/ contents
gemini/ # full ~/.gemini/ contents
opencode-config/ # ~/.config/opencode/
opencode-data/ # ~/.local/share/opencode/
opencode-cache/ # ~/.cache/opencode/
opencode-state/ # ~/.local/state/opencode/
copilot-auth/ # ~/.config/github-copilot/
copilot-config/ # ~/.copilot/
...
vanilla/ # clean config (credentials only)
claude/
codex/
...
| Tool | Handling |
|---|---|
| Aider | Uses home-directory dotfiles (.aider.conf.yml, .aider.env, etc.) — each gets its own symlink rather than a directory swap |
| OpenCode | Manages 4 XDG directories atomically — config, data, cache, and state |
| Copilot | Manages 2 directories — auth (~/.config/github-copilot/) and config (~/.copilot/) |
| Goose | Config dirs are managed; credentials use OS keyring (not file-swappable) |
| Amazon Q / Kiro | Only manages tool-specific dirs (~/.aws/amazonq/, ~/.kiro/) — shared AWS credentials (~/.aws/credentials) are never touched |
cmd/raise/ Entry point (3 lines)
internal/
domain/ Tool, Profile, DirMapping entities
ToolRegistry with all 17 tool definitions
platform/ PathResolver — tilde expansion, env overrides
storage/ ProfileStore interface + FileProfileStore (JSON)
service/ ProfileService — init, save, use, create, switch
Symlink mechanics, credential migration
cli/ Cobra commands — thin wrappers over service
tests/
integration/ Real filesystem lifecycle tests
e2e/ Binary subprocess tests
Design principles: DDD (domain-driven), SOLID interfaces, DRY registry, TDD throughout.
Test coverage: domain 100% | platform 100% | service 100% | storage 100% | cli 98.9%
# All unit tests
go test ./...
# Integration tests (real filesystem operations)
go test ./tests/integration/... -tags integration -v
# E2E tests (builds and runs the actual binary)
go test ./tests/e2e/... -tags e2e -v
# Full verification
go vet ./... && go test ./... && \
go test ./tests/integration/... -tags integration && \
go test ./tests/e2e/... -tags e2e
# Build
go build -o raise ./cmd/raiseSee CONTRIBUTING.md for guidelines. Adding a new tool is straightforward — one function in registry.go and matching tests.
CC BY-NC-SA 4.0 - Copyright (c) 2026 RiceCoder Contributors