Lima VM provider backend plugin for mngr
Project description
mngr Lima Provider
Lima VM provider backend plugin for mngr. Runs agents in Lima VMs (QEMU/VZ) with SSH access.
Prerequisites
- Lima (
limactlon PATH)
Usage
# Install the plugin
uv tool install imbue-mngr-lima
# Create a VM host
mngr create @.lima
# Create with a custom Lima YAML config
mngr create @.lima -b "--file path/to/config.yaml"
# Pass flags to limactl start
mngr create @.lima -- --cpus=8 --memory=16GiB
host_dir layout: bind mount vs btrfs additional disk
The provider has two layouts for backing host_dir (the in-VM directory
mngr stores agent data under, default /mngr):
-
Bind mount (default,
is_host_data_volume_exposed=True).host_diris a 9p bind mount of~/.mngr/providers/lima/<name>/volumes/<host_id>/on the host machine. The host process can readhost_dircontents directly even while the VM is stopped, andget_volume_for_host()returns aHostVolumeusable bymngr event,mngr transcript, and destroy-time session-preservation hooks (mngr_claude'son_before_host_destroy). This is the right choice for most users. -
Btrfs additional disk (
is_host_data_volume_exposed=False). mngr attaches a Lima-managed btrfs-formatted additional disk (mngr-<host_id_hex>-data, qcow2 sparse under~/.lima/_disks/, default logical size100GiB) and symlinkshost_dirto Lima's auto-mount path for that disk (/mnt/lima-<disk_name>). No 9p bind mount is created. The trade-off:host_diris now a single consistent btrfs filesystem that can be snapshotted as one unit, but the host machine has no direct read path soget_volume_for_host()returnsNone. Offline reads (mngr event/mngr transcriptagainst a stopped Lima host) stop working until the host is started. This mode is intended for users who back up host_dir via btrfs snapshots; it is opt-in to avoid changing default behavior.
The chosen layout is locked in on the per-host record at create_host
time. Subsequent start_host / stop_host calls always replay the
same layout, so flipping the provider config later does not migrate
existing hosts. Hosts created before this option existed (records
without the field) default to bind-mount mode and keep today's
behavior forever.
To enable btrfs mode for new hosts:
# in ~/.mngr/config.toml (or via setting__extend in a create template)
[providers.lima]
is_host_data_volume_exposed = false
# Optional: override the default 100GiB logical disk size.
host_data_disk_size = "200GiB"
Running the agent as root in the VM (is_run_as_root)
By default the agent runs as the Lima default user (passwordless sudo
available). With is_run_as_root=true mngr instead runs the agent as root
inside the VM (uid 0), matching the docker / vps_docker providers where the
agent is root inside its container: the agent can apt install and write
anywhere with no sudo. The VM itself is the isolation boundary.
How it works:
- The provisioning script enables key-based root login (
PermitRootLogin prohibit-password) and authorizes a mngr-managed root client key; mngr then connects to the VM as root over Lima's normal SSH port. The agent still runs directly in the VM -- there is no nested container. - This mode requires the btrfs additional-disk layout, so it must be paired
with
is_host_data_volume_exposed=false. Root cannot traverse the 9p/reverse-sshfs bind mount the exposed layout uses, so the combination is rejected at config construction. - Consistent backups keep working: with
host_diron btrfs and the agent running as root, a backup service in the workspace (e.g. forever-claude-template'shost-backup) takesbtrfs subvolume snapshotdirectly -- no snapshot helper or trigger volume is needed.
[providers.lima]
is_run_as_root = true
is_host_data_volume_exposed = false # required by is_run_as_root
This is how a workspace gets the same dependency setup as a Dockerfile-built
host: the project ships idempotent setup scripts that its Dockerfile runs (for
the docker / vps_docker / ovh providers) and that the Lima host runs
directly after the project is synced in (via the create template's agent
provisioning command). One definition, run the same way everywhere, with the
agent as root so it never needs sudo.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file imbue_mngr_lima-0.1.7.tar.gz.
File metadata
- Download URL: imbue_mngr_lima-0.1.7.tar.gz
- Upload date:
- Size: 55.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2003c6b8329868c57e811a10762164d33377d60c0278726eab97005763d753c
|
|
| MD5 |
9911b42d0cb68fb84ea118f499049ab2
|
|
| BLAKE2b-256 |
8819d90f968df3db06c617b21d6cc03ef04bb6769246a3f14b88008eb592ad95
|
Provenance
The following attestation bundles were made for imbue_mngr_lima-0.1.7.tar.gz:
Publisher:
publish.yml on imbue-ai/mngr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
imbue_mngr_lima-0.1.7.tar.gz -
Subject digest:
b2003c6b8329868c57e811a10762164d33377d60c0278726eab97005763d753c - Sigstore transparency entry: 1822643389
- Sigstore integration time:
-
Permalink:
imbue-ai/mngr@23dc987ee408eb8d8b0c6aef0f5a44f8c8079276 -
Branch / Tag:
refs/tags/v0.2.14 - Owner: https://github.com/imbue-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@23dc987ee408eb8d8b0c6aef0f5a44f8c8079276 -
Trigger Event:
push
-
Statement type:
File details
Details for the file imbue_mngr_lima-0.1.7-py3-none-any.whl.
File metadata
- Download URL: imbue_mngr_lima-0.1.7-py3-none-any.whl
- Upload date:
- Size: 37.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9567fb2e566d7ce6ed3483861f8b837fdb23b7a58d2397490784452b541ab96
|
|
| MD5 |
01d7a3d0698cf4defed185615a38c988
|
|
| BLAKE2b-256 |
cb0476051aef23bb81b06650ac65929a7de91162769d71f0026a30ec827b2717
|
Provenance
The following attestation bundles were made for imbue_mngr_lima-0.1.7-py3-none-any.whl:
Publisher:
publish.yml on imbue-ai/mngr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
imbue_mngr_lima-0.1.7-py3-none-any.whl -
Subject digest:
d9567fb2e566d7ce6ed3483861f8b837fdb23b7a58d2397490784452b541ab96 - Sigstore transparency entry: 1822645719
- Sigstore integration time:
-
Permalink:
imbue-ai/mngr@23dc987ee408eb8d8b0c6aef0f5a44f8c8079276 -
Branch / Tag:
refs/tags/v0.2.14 - Owner: https://github.com/imbue-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@23dc987ee408eb8d8b0c6aef0f5a44f8c8079276 -
Trigger Event:
push
-
Statement type: