ใ๐ใTerminal-agnostic AI agent workflow manager with parallel isolated sessions.
Powered by git worktrees under the hood, but you don't need to know that.
Warning
Working on multiple things at once with AI agents in a single repository is a non-trivial problem.
ใ๐ใclaude --worktree solves it. Kind of... Creates an isolated worktree, launches a session, offers to clean up when you're done. Until you decide not to clean up, because you want to come back to it later. Then it's just a directory somewhere that you need to track down, cd into, and relaunch the agent manually.
ใ๐ใcodemob manages the full lifecycle - create, resume, list, switch, clean up.
โจ Supported agents
Claude (primary focus) and Codex supported out of the box.
Other terminal-based agents work too - codemob cd drops you into the workspace.
Codex integration works but has rough edges around in-session slash commands (
/mob-new,/mob-switch, etc.). Workspace creation, switching, and lifecycle management from the terminal all work fine. Improving this is a high priority.
TBD
Start a new session - codemob creates an isolated workspace and drops you into your agent:
โฏ claude --new-codemob
ใโใcodemob Created mob 'wild-kumquat' on branch mob/wild-kumquat
โโโโโโโ Claude Code
โโโโโโโโโ
โโ โโ ~/my-project/.codemob/mobs/wild-kumquat
โฏ help me refactor the auth moduleNeed another session? Create one without leaving Claude:
โโโโโโโ Claude Code
โโโโโโโโโ
โโ โโ ~/my-project/.codemob/mobs/wild-kumquat
โฏ /codemob-new
โบ Name or auto-generate?
โฏ auto
โบ This will end our current conversation. codemob will automatically
close this session and launch the new one. Are you sure?
โฏ yes
ใโใcodemob Session ended - mob 'wild-kumquat'
ใโใcodemob Created mob 'epic-apricot' on branch mob/epic-apricot
โโโโโโโ Claude Code
โโโโโโโโโ
โโ โโ ~/my-project/.codemob/mobs/epic-apricotSwitch between sessions - /mob-switch, pick one, done:
โโโโโโโ Claude Code
โโโโโโโโโ
โโ โโ ~/my-project/.codemob/mobs/epic-apricot
โฏ /mob-switch
โบ # NAME LAST AGENT CREATED
1 wild-kumquat claude 2h ago
2 angry-eggplant claude 12h ago
Which mob?
โฏ 1
โบ This will end our current conversation. codemob will automatically
close this session and launch the new one. Are you sure?
โฏ yes
ใโใcodemob Session ended - mob 'epic-apricot'
ใโใcodemob Switching to mob 'wild-kumquat'
โโโโโโโ Claude Code
โโโโโโโโโ
โโ โโ ~/my-project/.codemob/mobs/wild-kumquatSwap the agent on the fly - go from Claude to Codex (or back) on the same workspace:
โโโโโโโ Claude Code
โโโโโโโโโ
โโ โโ ~/my-project/.codemob/mobs/wild-kumquat
โฏ /mob-change-agent
โบ codemob supports claude and codex. You're currently on claude.
Switch to codex?
โฏ yes
โบ This will end our current conversation. codemob will automatically
close this session and launch the new one. Are you sure?
โฏ yes
ใโใcodemob Session ended - mob 'wild-kumquat'
ใโใcodemob Switching mob 'wild-kumquat' to agent 'codex'
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ >_ OpenAI Codex โ
โ โ
โ directory: ~/my-project/.codemob/mobs/wild-kumquat โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏbrew tap codemob-ai/codemob
brew install codemob
codemob initgit clone https://github.com/codemob-ai/codemob.git
cd codemob
make install # builds and copies to /opt/homebrew
codemob initImportant
codemob and mob are interchangeable everywhere - commands, flags, slash commands.
codemob new = mob new, claude --new-codemob = claude --new-mob, /codemob-new = /mob-new
# create
codemob new # auto-generated name, default agent
codemob new brave-mango # named mob
codemob new --agent codex # pick agent
# resume / open
codemob resume brave-mango # continue previous session
codemob open brave-mango # fresh agent session
# navigate
codemob cd brave-mango # cd into a mob's worktree
codemob cd root # cd back to the main repo
# manage
codemob list # list mobs (with indices)
codemob resume 2 # resume by index
codemob remove brave-mango # remove one
codemob purge # remove allClaude and Codex shorthands:
| Claude | Codex | |
|---|---|---|
| Create | claude --new-codemob [name] |
codex --new-codemob [name] |
| Resume | claude --resume-codemob [name] |
codex --resume-codemob [name] |
| Open | claude --open-codemob [name] |
codex --open-codemob [name] |
[name] is optional - omit it and codemob will show an interactive picker.
| Command | |
|---|---|
/codemob-list |
List mobs |
/codemob-new |
Create mob (launches after exit) |
/codemob-switch |
Switch mob (launches after exit) |
/codemob-change-agent |
Swap agent (claude <-> codex) |
/codemob-remove |
Remove mob |
โฏ claude --new-codemob--new-codemob, --resume-codemob, and friends aren't real Claude or Codex flags. They never reach the agent.
ใ๐ใcodemob init sources a small shell script into your shell RC file (.zshrc, .bashrc, or .bash_profile) that wraps the claude and codex commands. When you type claude --new-codemob, the wrapper intercepts the flag before Claude ever sees it and routes it to codemob new --agent claude instead. Any flag it doesn't recognize? Passed straight through to the real claude binary, untouched.
No patches, no plugins, no monkey-patching. Just a shell function pretending to be claude and skimming a few arguments off the top.
Run a shell script automatically after every codemob new. The script runs with cwd set to the new worktree - before the agent launches.
Set it in .codemob/config.json (absolute or relative to repo root):
{
"post_create_script": "./scripts/mob-setup.sh"
}Example - install dependencies so the agent starts in a working environment:
#!/bin/sh
npm install --silent
bundle install --quietIf the script exits non-zero, the mob is cleaned up and the agent is not launched.
ใ๐ใEach mob is a git worktree under .codemob/mobs/. Agents are launched as child processes. When you queue an action from inside an agent (via slash command), codemob detects it, terminates the agent, and launches the next session automatically.
Git is the source of truth. Stale metadata gets cleaned up automatically.
make build
make install # dev install to /opt/homebrew
make testGPL-3.0
