llmux

skill
Security Audit
Fail
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Fail
  • rm -rf — Recursive force deletion command in install.sh
Permissions Pass
  • Permissions — No dangerous permissions requested
Purpose
This tool is a workspace manager for Claude Code. It allows developers to run multiple, isolated sessions with separate authentication, settings, and API keys for different projects.

Security Assessment
The tool inherently handles highly sensitive data, including API keys, OAuth tokens, and configuration files. It requires a shell wrapper to execute commands and route directories automatically. The automated scan flagged a failure for a recursive force deletion command (`rm -rf`) inside its installation script. While standard for many shell installers, piping a web script directly to the shell (`curl | sh`) combined with forceful deletion commands requires careful review. No dangerous base permissions were requested, and no hardcoded secrets were found. Overall risk is rated as Medium.

Quality Assessment
The project is actively maintained, with its last push occurring today. It uses the standard, permissive MIT license. However, community trust and visibility are currently very low; the repository only has 5 stars, meaning the codebase has not been widely vetted by a large audience.

Verdict
Use with caution: the tool is actively maintained and properly licensed, but its low community visibility and sensitive access to credentials mean you should thoroughly inspect the installation script before integrating it into your workflow.
SUMMARY

Workspace manager for Claude Code. Isolated sessions with separate auth, settings, history, and API keys per project. Automatic directory routing, git worktree sessions, interactive TUI. Open source CLI.

README.md

llmux-icon llmux

GitHub release
License: MIT

llmux.sh — Session manager for Claude Code. Run multiple isolated sessions — each project gets its own authentication, settings, and history, grouped into reusable profiles. No manual env vars, no wrapper scripts.

Quick start

# Install
curl -fsSL https://llmux.sh/install | sh

# Set up your shell
llmux init zsh   # or bash / fish

# Restart your shell, then launch the TUI
llmux

From the TUI: create a profile, add a project directory, and you're done. Run claude anywhere and llmux handles the rest.

Other install methods

With Go:

go install github.com/alansikora/llmux@latest

From source:

git clone https://github.com/alansikora/llmux.git
cd llmux
go build -o llmux .

Custom install directory (default: ~/.local/bin):

INSTALL_DIR=/usr/local/bin curl -fsSL https://llmux.sh/install | sudo sh

Canary (latest from main):

curl -fsSL https://llmux.sh/install | sh -s -- --canary

Why

Claude Code stores everything in ~/.claude. If you work across multiple projects — personal repos, work repos, client projects — they all share the same session, API key, and settings. llmux gives each project its own CLAUDE_CONFIG_DIR, so you get full isolation with zero friction.

Concepts

  • Profile — an auth/credentials bundle (OAuth subscription or API key). Each profile has its own .claude.json and settings, so you can keep personal and work accounts separate.
  • Project — a directory path bound to a profile. Projects are the primary entity in the TUI; the main view is a flat alphabetical list of every project.
  • Session — an isolated git worktree for a project, so Claude can work on a separate branch without touching your main working tree.

Features

Profiles and routing

  • Isolated sessions — each profile gets its own auth, history, settings, and API key
  • Profile-scoped insights/insights uses your conversation history, and since each profile has its own, you get account-specific insights automatically
  • Automatic routing — a thin shell wrapper resolves the right profile based on your current directory. Register a parent directory and all subdirectories inherit it; register a more specific child path and it gets its own mapping while siblings keep the parent's
  • Auto-registration — run claude in an unregistered directory and get prompted to pick a profile
  • Default profile — set a fallback for directories that don't match any project
  • Subcommand passthroughclaude mcp, claude config, etc. bypass profile resolution and work natively

Worktree sessions

When a profile has Always use worktree enabled, Claude Code runs in an isolated git worktree under .claude/worktrees/. This keeps your main branch clean while Claude works on a separate branch.

  • Apply and unapply — bring session changes into your main working tree as uncommitted diffs, then cleanly revert them
  • Full working-state capture — apply picks up committed, staged, and unstaged changes (including untracked files)
  • 3-way merge — conflicts during apply are handled gracefully via git apply --3way
  • Safe with dirty trees — if your working tree has uncommitted changes, llmux auto-stashes before apply and restores on unapply
  • Diff-based unapply — reversal uses a saved diff, so edits you make after applying are preserved
  • Stale detection — sessions older than 7 days are marked as stale in the TUI
  • Resume — resume any session by name or branch without manually navigating to the worktree
  • Auto-fetch — worktree mode fetches origin/<default-branch> before launching Claude, so worktrees start from an up-to-date base
  • Slash commands/llmux apply and /llmux unapply work directly inside Claude Code sessions

Customization

  • Per-profile API keys — use different Anthropic API keys per profile (personal vs work)
  • Disable attributions — remove "Made with Claude Code" from commits and PRs (per profile or per project)
  • Auto mode — globally pass --enable-auto-mode to Claude Code
  • Status line — enable ccstatusline showing model, context, and git info
  • Apply marker — drop a .llmux-applied file when a session is applied (visible in git status)
  • Short alias — optionally define c as a shorthand for claude
  • Project overrides — override any profile default (worktree, attributions) per project directory
  • Auto-updatellmux upgrade checks GitHub releases and upgrades in place, with update notices in the TUI

Usage

TUI

llmux

Opens an interactive manager. The main view is a flat, alphabetical list of all your projects — each showing its auth status and profile. Press p to manage profiles, enter to drill into a project's worktree sessions. Press ? or see the on-screen help for keybindings.

See USAGE.md for the full keybindings reference.

CLI

llmux                       # open the TUI manager
llmux list                  # list all projects with profile and auth status
llmux sessions [profile]    # list worktree sessions for the current project
llmux resume <name>         # resume a session by name or branch
llmux apply [session]       # apply session changes to main working tree
llmux unapply               # revert applied changes
llmux upgrade               # upgrade to the latest version
llmux init <shell> [--print]  # set up shell integration (or print without installing)

llmux apply auto-detects the session when run from inside a worktree. Pass --no-worktree (or -nw) to skip worktree mode for a single claude invocation. --resume, --continue, -r, and -c also bypass worktree injection automatically.

How it works

After llmux init, your shell has a thin claude() wrapper. When you run claude, it calls llmux resolve to find the project matching your current directory via longest-prefix path matching, then launches Claude Code with the right CLAUDE_CONFIG_DIR (from the project's profile), API key, and flags.

Claude subcommands (like claude mcp add) are detected and passed through directly — no profile resolution overhead. The subcommand list is cached locally with a 24-hour TTL.

Config is stored in ~/.config/llmux/ (override with LLMUX_CONFIG_DIR):

~/.config/llmux/
├── config.json              # profile + project definitions
└── sessions/
    ├── personal/            # CLAUDE_CONFIG_DIR for the "personal" profile
    │   ├── .credentials.json
    │   └── settings.json
    └── work/
        ├── .credentials.json
        └── settings.json

Shell support

Supports zsh, bash, and fish. The generated wrapper is intentionally minimal — all logic lives in the Go binary.

License

MIT

Reviews (0)

No results found