installation:
curl -fsSL https://raw.githubusercontent.com/imbue-ai/mngr/main/scripts/install.sh | bashmngr is very simple to use:
mngr create # launch claude locally (defaults: agent=claude, provider=local, project=current dir)
mngr create @.modal # launch claude on Modal (new host with auto-generated name)
mngr create my-task # launch claude with a name
mngr create my-task codex # launch codex instead of claude
mngr create -- --model opus # pass any arguments through to the underlying agent
# send an initial message so you don't have to wait around:
mngr create --no-connect --message "Speed up one of my tests and make a PR on github"
# or, be super explicit about all of the arguments:
mngr create my-task@.modal --type claude
# tons more arguments for anything you could want! Learn more via --help
mngr create --help
# or see the other commands--list, destroy, message, connect, push, pull, clone, and more!
mngr --helpmngr is fast:
> time mngr create local-hello --message "Just say hello" --no-connect
Done.
real 0m1.472s
user 0m1.181s
sys 0m0.227s
> time mngr list
NAME STATE HOST PROVIDER HOST STATE PROJECT
local-hello RUNNING @local local RUNNING mngr
real 0m1.773s
user 0m0.955s
sys 0m0.166smngr itself is free, and the cheapest way to run remote agents (they shut down when idle):
mngr create @.modal --no-connect --message "just say 'hello'" --idle-timeout 60 -- --model sonnet
# costs $0.0387443 for inference (using sonnet)
# costs $0.0013188 for compute because it shuts down 60 seconds after the agent completesmngr takes security and privacy seriously:
# by default, cannot be accessed by anyone except your modal account (uses a local unique SSH key)
mngr create example-task@.modal
# you (or your agent) can do whatever bad ideas you want in that container without fear
mngr exec example-task "rm -rf /"
# you can block all outgoing internet access
mngr create @.modal -b offline
# or restrict outgoing traffic to certain IPs
mngr create @.modal -b cidr-allowlist=203.0.113.0/24mngr is powerful and composable:
# start multiple agents on the same host to save money and share data
mngr create agent-1@shared-host.modal --new-host
mngr create agent-2@shared-host
# run commands directly on an agent's host
mngr exec agent-1 "git log --oneline -5"
# never lose any work: snapshot and fork the entire agent states
mngr create doomed-agent@.modal
SNAPSHOT=$(mngr snapshot create doomed-agent --format "{id}")
mngr message doomed-agent "try running 'rm -rf /' and see what happens"
mngr create new-agent --snapshot $SNAPSHOTmngr makes it easy to see what your agents are doing:
# programmatically send messages to your agents and see their chat histories
mngr message agent-1 "Tell me a joke"
mngr transcript agent-1mngr makes it easy to work with remote agents
mngr connect my-agent # directly connect to remote agents via SSH for debugging
mngr pull my-agent # pull changes from an agent to your local machine
mngr push my-agent # push your changes to an agent
mngr pair my-agent # or sync changes continuously!mngr is easy to learn:
> mngr ask "How do I create a container on modal with custom packages installed by default?"
Simply run:
mngr create @.modal -b "--file path/to/Dockerfile"
mngr makes it easy to create and use any AI agent (ex: Claude Code, Codex), whether you want to run locally or remotely.
mngr is built on open-source tools and standards (SSH, git, tmux, docker, etc.), and is extensible via plugins to enable the latest AI coding workflows.
Quick install (installs system dependencies + mngr automatically):
curl -fsSL https://raw.githubusercontent.com/imbue-ai/mngr/main/scripts/install.sh | bashManual install (requires uv and system deps: git, tmux, jq, rsync, unison):
uv tool install imbue-mngr
# or run without installing
uvx --from imbue-mngr mngrUpgrade:
uv tool upgrade imbue-mngrFor development:
git clone git@github.com:imbue-ai/mngr.git && cd mngr && uv sync --all-packages && uv tool install -e libs/mngrmngr supports tab completion for commands, options, and agent names in bash and zsh.
Shell completion is configured automatically by the install script (scripts/install.sh).
To set up manually, generate the completion script and append it to your shell rc file:
Zsh (run once):
uv tool run --from imbue-mngr python3 -m imbue.mngr.cli.complete --script zsh >> ~/.zshrcBash (run once):
uv tool run --from imbue-mngr python3 -m imbue.mngr.cli.complete --script bash >> ~/.bashrcNote: mngr must be installed on your PATH for completion to work (not invoked via uv run).
# without installing:
uvx --from imbue-mngr mngr <command> [options]
# if installed:
mngr <command> [options]create: Create and run an agent in a hostdestroy: Stop an agent (and clean up any associated resources)connect: Attach to an agent
list: List active agentsstop: Stop an agentstart: Start a stopped agentsnapshot[experimental]: Create a snapshot of a host's stateexec: Execute a shell command on an agent's hostrename: Rename an agentclone: Create a copy of an existing agentmigrate: Move an agent to a different hostlimit: Configure limits for agents and hosts
pull: Pull data from agentpush: Push data to agentpair: Continually sync data with an agentmessage: Send a message to an agenttranscript: View the message transcript for an agentprovision: Re-run provisioning on an agent (useful for syncing config and auth)
cleanup: Clean up stopped agents and unused resourcesevents: View agent and host event filesgc: Garbage collect unused resources
ask: Chat with mngr for helpplugin[experimental]: Manage mngr pluginsconfig: View and edit mngr configuration
You can interact with mngr via the terminal (run mngr --help to learn more).
mngr uses robust open source tools like SSH, git, and tmux to run and manage your agents:
- agents are simply processes that run in tmux sessions, each with their own
work_dir(working folder) and configuration (ex: secrets, environment variables, etc) - agents run on hosts--either locally (by default), or special environments like Modal Sandboxes (
--provider modal) or Docker containers (--provider docker). Use theagent@hostaddress syntax to target an existing host. - multiple agents can share a single host.
- hosts come from providers (ex: Modal, AWS, docker, etc)
- hosts help save money by automatically "pausing" when all of their agents are "idle". See idle detection for more details.
- hosts automatically "stop" when all of their agents are "stopped"
mngris extensible via plugins--you can add new agent types, provider backends, CLI commands, and lifecycle hooks
mngr stores very little state (beyond configuration and local caches for performance), and instead relies on conventions:
- any process running in window 0 of a
mngr-prefixed tmux sessions is considered an agent - agents store their status and logs in a standard location (default:
$MNGR_HOST_DIR/agents/<agent_id>/) - all hosts are accessed via SSH--if you can SSH into it, it can be a host
- ...and more
See architecture.md for an in-depth overview of the mngr architecture and design principles.
Best practices:
- Use providers with good isolation (like Docker or Modal) when working with agents, especially those that are untrusted.
- Follow the "principle of least privilege": only expose the minimal set of API tokens and secrets for each agent, and restrict their access (eg to the network) as much as possible.
- Avoid storing sensitive data in agents' filesystems (or encrypt it if necessary).
See our security model for more details.
This is a monorepo that contains the code for mngr here:
As well as the code for some plugins that we maintain, including:
The repo also contains code for some dependencies and related projects, including:
- libs/concurrency_group: a simple Python library for managing synchronous concurrent primitives (threads and processes) in a way that makes it easy to ensure that they are cleaned up.
- libs/imbue_common: core libraries that are shared across all of our projects
- apps/minds: an experimental project around scheduling runs of autonomous agents
Contributions are welcome!