{"id":47133153,"url":"https://github.com/alansikora/llmux","last_synced_at":"2026-04-08T22:02:44.177Z","repository":{"id":342314991,"uuid":"1173563480","full_name":"alansikora/llmux","owner":"alansikora","description":"Workspace manager for AI coding assistants. Currently supports Claude Code, with more CLIs planned. Isolated sessions with separate auth, settings, and history per project. Git worktree support for parallel work.","archived":false,"fork":false,"pushed_at":"2026-04-01T22:25:46.000Z","size":131,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T09:29:04.472Z","etag":null,"topics":["claude","cli","go","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alansikora.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T14:04:11.000Z","updated_at":"2026-04-01T22:24:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alansikora/llmux","commit_stats":null,"previous_names":["alansikora/llmux"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/alansikora/llmux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansikora%2Fllmux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansikora%2Fllmux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansikora%2Fllmux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansikora%2Fllmux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alansikora","download_url":"https://codeload.github.com/alansikora/llmux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansikora%2Fllmux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31575755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","cli","go","tui"],"created_at":"2026-03-12T21:12:40.806Z","updated_at":"2026-04-08T22:02:44.172Z","avatar_url":"https://github.com/alansikora.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg width=\"150\" alt=\"llmux-icon\" src=\"https://github.com/user-attachments/assets/dc16721e-b884-48d3-851b-1d481cb8c159\" /\u003e llmux\n\n\nA workspace manager for AI coding assistants. Currently supports [Claude Code](https://docs.anthropic.com/en/docs/claude-code), with more CLIs planned. Run multiple isolated sessions — each workspace gets its own authentication, settings, and history.\n\n## Why\n\nClaude Code stores everything in `~/.claude`. If you work across multiple projects, they all share the same session. llmux gives each project its own `CLAUDE_CONFIG_DIR`, so you get:\n\n- **Isolated sessions** — separate auth, history, and settings per project\n- **Automatic routing** — `claude` just works based on your current directory\n- **Zero friction** — no manual env vars, no wrapper scripts\n\n## Features\n\n- **Workspaces \u0026 projects** — workspaces hold auth and default settings; projects map directories to workspaces with optional per-project overrides\n- **Automatic routing** — `claude` resolves the right workspace based on your current directory\n- **Auto-registration** — run `claude` in an unregistered directory and get prompted to pick a workspace\n- **Default workspace** — set a fallback workspace for directories without a match\n- **Per-workspace API keys** — use different Anthropic API keys per project\n- **Worktree mode** — auto-pass `--worktree` to Claude per workspace or project, bypass with `--no-worktree` / `-nw`\n- **Worktree session management** — list, apply, revert, and resume Claude worktree sessions\n- **Session resume** — resume a worktree session by name or branch with `llmux resume`\n- **Slash commands** — `/llmux apply` and `/llmux unapply` available inside Claude Code sessions\n- **Auto mode** — globally pass `--enable-auto-mode` to Claude Code\n- **Status line** — enable [ccstatusline](https://github.com/sirmalloc/ccstatusline) across all workspaces, showing model, context, and git info in Claude Code\n- **Disable attributions** — remove \"Made with Claude Code\" from commits and PRs per workspace\n- **Auto-update** — `llmux upgrade` checks GitHub releases and upgrades in place, with update notices in the TUI\n- **Short alias** — optionally define `c` as a shorthand for `claude`\n- **TUI manager** — add, configure, and manage workspaces, projects, and sessions interactively\n- **Shell integration** — supports zsh, bash, and fish\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/alansikora/llmux/main/install.sh | sh\n```\n\nThen set up shell integration:\n\n```bash\nllmux init zsh    # writes to ~/.zshrc\nllmux init bash   # writes to ~/.bashrc\nllmux init fish   # writes to ~/.config/fish/config.fish\n```\n\nRestart your shell, and you're done.\n\n\u003cdetails\u003e\n\u003csummary\u003eOther install methods\u003c/summary\u003e\n\n**With Go:**\n\n```bash\ngo install github.com/allskar/llmux@latest\n```\n\n**From source:**\n\n```bash\ngit clone https://github.com/alansikora/llmux.git\ncd llmux\ngo build -o llmux .\n```\n\n**Custom install directory** (default: `~/.local/bin`)**:**\n\n```bash\nINSTALL_DIR=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/alansikora/llmux/main/install.sh | sudo sh\n```\n\n**Canary (latest from `main`):**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/alansikora/llmux/main/install.sh | sh -s -- --canary\n```\n\n\u003c/details\u003e\n\n## Usage\n\n### TUI\n\n```bash\nllmux\n```\n\nOpens an interactive manager. The TUI has three levels: workspaces → projects → sessions.\n\n**Workspace list:**\n\n| Key | Action |\n|-----|--------|\n| `enter` | View projects |\n| `a` | Add workspace |\n| `e` | Edit workspace options |\n| `o` | General options |\n| `s` | Toggle default workspace (shown with ★) |\n| `d` / `x` | Delete workspace |\n| `esc` | Quit |\n\n**Project list** (inside a workspace):\n\n| Key | Action |\n|-----|--------|\n| `enter` | View worktree sessions |\n| `a` | Add project |\n| `e` | Edit project overrides |\n| `d` / `x` | Remove project |\n| `esc` | Back to workspaces |\n\n### Default workspace\n\nPress `s` to set a workspace as the default. When you run `claude` from a directory that doesn't match any workspace, the default is used instead of erroring.\n\n### Workspace options\n\nPress `e` on a workspace to configure defaults that apply to all its projects:\n\n- **Disable attributions** — removes \"Made with Claude Code\" from commits and PRs\n- **Always use worktree** — automatically passes `--worktree` to Claude. Bypass for a single session with `claude --no-worktree` (or `-nw`)\n\n### Project overrides\n\nPress `e` on a project to override workspace defaults for that directory. Settings can be set to **inherit** (use workspace default), **enabled**, or **disabled**.\n\n### Worktree sessions\n\nWhen Claude Code runs with `--worktree`, it creates a git worktree under `.claude/worktrees/` with changes on a separate branch. Use these commands to manage those sessions:\n\n```bash\nllmux sessions              # list worktree sessions for the current project\nllmux resume \u003cname\u003e         # resume a session by name or branch (launches claude --continue)\nllmux apply [session]       # apply session changes as uncommitted diffs on main\nllmux unapply               # revert applied changes (restores any auto-stashed state)\n```\n\n`llmux resume` finds the worktree, sets up the workspace environment, and launches Claude directly inside it — no need to manually `cd` or pass `--no-worktree`.\n\n`llmux apply` auto-detects the session name when run from inside a worktree. Changes are applied as uncommitted modifications — no merge commits. If your working tree is dirty, llmux auto-stashes first and restores on `unapply`.\n\nYou can also browse and manage sessions from the TUI (workspace → project → `enter`):\n\n| Key | Action |\n|-----|--------|\n| `a` / `enter` | Apply session |\n| `u` | Unapply current session |\n| `c` | Copy worktree path to clipboard |\n| `d` | Delete session |\n| `esc` | Back to project list |\n\n### Slash commands\n\nllmux installs Claude Code slash commands during `llmux init`:\n\n- `/llmux apply` — apply the current worktree session's changes to the main workspace\n- `/llmux unapply` — revert previously applied changes\n\nThese work inside any Claude Code session, including worktree sessions. The shell wrapper automatically skips adding `--worktree` when you use `--resume` or `--continue`, so resuming existing sessions works without needing `--no-worktree`.\n\n### General options\n\nPress `o` to configure global settings:\n\n- **Short alias** — defines `c` as a shorthand for `claude` (requires shell restart to take effect)\n- **Apply marker** — creates a `.llmux-applied` file in the workspace root when a session is applied (makes it visible in `git status`)\n- **Auto mode** — passes `--enable-auto-mode` to Claude Code, allowing it to run without confirmation prompts\n- **Status line** — enables [ccstatusline](https://github.com/sirmalloc/ccstatusline) across all workspaces. When enabled, the status line config is automatically added to every workspace's `settings.json` (including newly created workspaces). Disable to remove from all workspaces.\n\n### CLI commands\n\n```bash\nllmux                   # open the TUI manager\nllmux list              # list all workspaces and projects with auth status\nllmux sessions          # list worktree sessions for the current project\nllmux resume \u003cname\u003e     # resume a worktree session by name or branch\nllmux apply [session]   # apply worktree session changes to main\nllmux unapply           # revert applied changes\nllmux upgrade           # upgrade to the latest version\nllmux init zsh --print  # print the shell function without installing\n```\n\n### How it works\n\nAfter running `llmux init zsh`, your shell has a thin `claude()` wrapper that calls `llmux resolve` when you run `claude` in any directory. The resolve command finds the matching workspace using longest-prefix path matching against registered projects, and returns the session directory, API key, worktree flag, and auto-mode flag.\n\nIf the directory isn't registered to any workspace, the wrapper triggers `llmux register` to let you interactively pick a workspace.\n\nIf the resolved project has **Always use worktree** enabled, the wrapper also runs `git fetch origin \u003cdefault-branch\u003e` before launching Claude — so the worktree is always based on an up-to-date branch. The fetch is a best-effort no-op if there's no remote, no network, or `origin/HEAD` isn't set. Pass `--no-worktree` (or `-nw`) to skip both the fetch and the worktree for a single session.\n\nWorkspaces and sessions are stored in `~/.config/llmux/` (overridable via `LLMUX_CONFIG_DIR`):\n\n```\n~/.config/llmux/\n├── config.json              # workspace + project definitions\n└── sessions/\n    ├── myapp/               # CLAUDE_CONFIG_DIR for \"myapp\" workspace\n    │   ├── .credentials.json\n    │   └── settings.json\n    └── backend/\n        ├── .credentials.json\n        └── settings.json\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falansikora%2Fllmux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falansikora%2Fllmux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falansikora%2Fllmux/lists"}