agentworks-cli 0.5.0__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/CHANGELOG.md +114 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/PKG-INFO +214 -68
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/README.md +213 -66
- agentworks_cli-0.7.0/agentworks/agents/manager.py +1564 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/agents/templates.py +5 -9
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/_app.py +10 -11
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/_errors.py +8 -2
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/__init__.py +2 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/doctor.py +2 -0
- agentworks_cli-0.7.0/agentworks/cli/commands/env.py +79 -0
- agentworks_cli-0.7.0/agentworks/cli/commands/secret.py +30 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/vm.py +18 -2
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/completions/spec.py +6 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/config.py +410 -41
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/doctor.py +123 -12
- agentworks_cli-0.7.0/agentworks/env/__init__.py +34 -0
- agentworks_cli-0.7.0/agentworks/env/compose.py +63 -0
- agentworks_cli-0.7.0/agentworks/env/entry.py +32 -0
- agentworks_cli-0.7.0/agentworks/env/identity.py +129 -0
- agentworks_cli-0.7.0/agentworks/env/merge.py +49 -0
- agentworks_cli-0.7.0/agentworks/env/show.py +425 -0
- agentworks_cli-0.7.0/agentworks/env_compat.py +53 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/errors.py +32 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/git_credentials/base.py +15 -7
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/output.py +30 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/remote_exec.py +7 -7
- agentworks_cli-0.7.0/agentworks/sample-config.toml +396 -0
- agentworks_cli-0.7.0/agentworks/secrets/__init__.py +35 -0
- agentworks_cli-0.7.0/agentworks/secrets/base.py +197 -0
- agentworks_cli-0.7.0/agentworks/secrets/env_var.py +65 -0
- agentworks_cli-0.7.0/agentworks/secrets/inspect.py +142 -0
- agentworks_cli-0.7.0/agentworks/secrets/orchestration.py +172 -0
- agentworks_cli-0.7.0/agentworks/secrets/prompt.py +60 -0
- agentworks_cli-0.7.0/agentworks/secrets/resolver.py +214 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/sessions/console.py +17 -13
- agentworks_cli-0.7.0/agentworks/sessions/manager.py +2006 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/sessions/multi_console.py +697 -436
- agentworks_cli-0.7.0/agentworks/sessions/multi_console_layout.py +435 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/sessions/templates.py +4 -3
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/sessions/tmux.py +232 -98
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/sources.py +8 -7
- agentworks_cli-0.7.0/agentworks/ssh.py +360 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/ssh_config.py +49 -6
- agentworks_cli-0.7.0/agentworks/transports/__init__.py +255 -0
- agentworks_cli-0.7.0/agentworks/transports/_shared.py +24 -0
- agentworks_cli-0.7.0/agentworks/transports/base.py +219 -0
- agentworks_cli-0.7.0/agentworks/transports/lima.py +161 -0
- agentworks_cli-0.7.0/agentworks/transports/remote_lima.py +165 -0
- agentworks_cli-0.7.0/agentworks/transports/ssh.py +293 -0
- agentworks_cli-0.7.0/agentworks/transports/wsl2.py +177 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/backup.py +130 -117
- agentworks_cli-0.7.0/agentworks/vms/base.py +122 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/bootstrap_script.py +14 -7
- agentworks_cli-0.7.0/agentworks/vms/hardening.py +251 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/initializer.py +660 -303
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/manager.py +384 -202
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/provisioners/azure.py +60 -35
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/provisioners/lima.py +15 -11
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/provisioners/proxmox.py +10 -9
- agentworks_cli-0.7.0/agentworks/vms/provisioners/wsl2.py +629 -0
- agentworks_cli-0.7.0/agentworks/vms/tailscale_dns.py +271 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/templates.py +6 -24
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/workspaces/backends/vm.py +7 -11
- agentworks_cli-0.7.0/agentworks/workspaces/manager.py +1193 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/workspaces/templates.py +6 -1
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/pyproject.toml +1 -2
- agentworks_cli-0.7.0/tests/conftest.py +229 -0
- agentworks_cli-0.7.0/tests/test_agents.py +176 -0
- agentworks_cli-0.7.0/tests/test_authorized_keys.py +234 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_bootstrap_script.py +17 -17
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_completions.py +2 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_config.py +14 -4
- agentworks_cli-0.7.0/tests/test_config_env_and_secrets.py +545 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_consoles.py +80 -308
- agentworks_cli-0.7.0/tests/test_consoles_layout.py +338 -0
- agentworks_cli-0.7.0/tests/test_consoles_restore.py +275 -0
- agentworks_cli-0.7.0/tests/test_doctor_env_and_secrets.py +351 -0
- agentworks_cli-0.7.0/tests/test_env_compat.py +125 -0
- agentworks_cli-0.7.0/tests/test_env_compose.py +97 -0
- agentworks_cli-0.7.0/tests/test_env_entry.py +36 -0
- agentworks_cli-0.7.0/tests/test_env_identity.py +134 -0
- agentworks_cli-0.7.0/tests/test_env_merge.py +99 -0
- agentworks_cli-0.7.0/tests/test_env_show.py +307 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_error_wrapper.py +21 -34
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_initializer.py +391 -0
- agentworks_cli-0.7.0/tests/test_initializer_env_fragments.py +435 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_remote_exec.py +1 -1
- agentworks_cli-0.7.0/tests/test_sample_config.py +97 -0
- agentworks_cli-0.7.0/tests/test_secrets_base.py +114 -0
- agentworks_cli-0.7.0/tests/test_secrets_eager_resolve.py +1382 -0
- agentworks_cli-0.7.0/tests/test_secrets_env_var.py +145 -0
- agentworks_cli-0.7.0/tests/test_secrets_inspect.py +193 -0
- agentworks_cli-0.7.0/tests/test_secrets_orchestration.py +435 -0
- agentworks_cli-0.7.0/tests/test_secrets_prompt.py +120 -0
- agentworks_cli-0.7.0/tests/test_secrets_resolver.py +361 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_session_liveness.py +47 -6
- agentworks_cli-0.7.0/tests/test_session_transport.py +346 -0
- agentworks_cli-0.7.0/tests/test_sessions_tmux_create.py +268 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_ssh_config.py +132 -0
- agentworks_cli-0.7.0/tests/test_ssh_logger.py +72 -0
- agentworks_cli-0.7.0/tests/test_ssh_set_env.py +192 -0
- agentworks_cli-0.7.0/tests/test_tailscale_dns.py +446 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_tmuxinator.py +1 -1
- agentworks_cli-0.7.0/tests/test_vm_shell_provisioner.py +615 -0
- agentworks_cli-0.7.0/tests/test_wsl2_keepalive.py +341 -0
- agentworks_cli-0.7.0/tests/test_wsl2_paths.py +62 -0
- agentworks_cli-0.7.0/tests/transports/__init__.py +0 -0
- agentworks_cli-0.7.0/tests/transports/conftest.py +30 -0
- agentworks_cli-0.7.0/tests/transports/test_abc.py +88 -0
- agentworks_cli-0.7.0/tests/transports/test_factories.py +409 -0
- agentworks_cli-0.7.0/tests/transports/test_lima.py +136 -0
- agentworks_cli-0.7.0/tests/transports/test_remote_lima.py +168 -0
- agentworks_cli-0.7.0/tests/transports/test_ssh.py +262 -0
- agentworks_cli-0.7.0/tests/transports/test_wsl2.py +164 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/uv.lock +53 -114
- agentworks_cli-0.5.0/agentworks/agents/manager.py +0 -1230
- agentworks_cli-0.5.0/agentworks/nerf-config.yaml +0 -16
- agentworks_cli-0.5.0/agentworks/sample-config.toml +0 -311
- agentworks_cli-0.5.0/agentworks/sessions/manager.py +0 -1508
- agentworks_cli-0.5.0/agentworks/ssh.py +0 -769
- agentworks_cli-0.5.0/agentworks/vms/base.py +0 -56
- agentworks_cli-0.5.0/agentworks/vms/provisioners/wsl2.py +0 -340
- agentworks_cli-0.5.0/agentworks/workspaces/manager.py +0 -1168
- agentworks_cli-0.5.0/tests/conftest.py +0 -117
- agentworks_cli-0.5.0/tests/test_agents.py +0 -67
- agentworks_cli-0.5.0/tests/test_authorized_keys.py +0 -106
- agentworks_cli-0.5.0/tests/test_exec_target.py +0 -151
- agentworks_cli-0.5.0/tests/test_nerf_plugin.py +0 -196
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/.gitignore +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/.python-version +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/agents/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/catalog.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/catalog.toml +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/_entry.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/_helpers.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/_typer_output.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/agent.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/catalog.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/completion.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/config.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/console.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/session.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/vm_host.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/cli/commands/workspace.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/completions/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/completions/bash.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/completions/install.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/completions/powershell.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/completions/zsh.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/db.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/git_credentials/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/git_credentials/azdo.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/git_credentials/github.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/sessions/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vm_hosts/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vm_hosts/manager.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/cloud_init.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/provisioners/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/vms/provisioners/proxmox_api.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/workspaces/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/workspaces/backends/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/agentworks/workspaces/tmuxinator.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/pypi-dist/.gitignore +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/__init__.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_catalog.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_cli_helpers.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_cloud_init.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_db.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_doctor.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_name_validation.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_proxmox_api.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_templates.py +0 -0
- {agentworks_cli-0.5.0 → agentworks_cli-0.7.0}/tests/test_vm_hosts.py +0 -0
|
@@ -1,5 +1,119 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.7.0](https://github.com/WayfarerLabs/agentworks/compare/v0.6.0...v0.7.0) (2026-06-24)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **agents:** agent shell uses direct agent SSH ([edccd6f](https://github.com/WayfarerLabs/agentworks/commit/edccd6f4a66700afa372210b30eceb676cac16af))
|
|
9
|
+
* **agents:** authorized_keys + operator ssh config for agent users ([7991dc3](https://github.com/WayfarerLabs/agentworks/commit/7991dc37186c59542f8e18367831b7b9878ed13d))
|
|
10
|
+
* **agents:** typed error on pre-rollout agent SSH + reviewer cleanups ([edc5552](https://github.com/WayfarerLabs/agentworks/commit/edc555233acf30d10b8a98075db4f5c1c065cbc8))
|
|
11
|
+
* **cli:** AW_-prefixed env vars with legacy fallback ([ceb9e05](https://github.com/WayfarerLabs/agentworks/commit/ceb9e057f48eca5b230618d768aee0e777cb1636))
|
|
12
|
+
* **cli:** AW_-prefixed env vars with legacy fallback ([62617b9](https://github.com/WayfarerLabs/agentworks/commit/62617b97e5951fa91e89a718cad5babc8ea872d4))
|
|
13
|
+
* **doctor:** Secrets and Env health groups (Phase 5 - FRD R6) ([8a6dbf7](https://github.com/WayfarerLabs/agentworks/commit/8a6dbf750e8c628997a723168ab706d6eb668f45))
|
|
14
|
+
* **doctor:** summary row for configured secret backends ([0dd4fe9](https://github.com/WayfarerLabs/agentworks/commit/0dd4fe9fdb4faa5fde7ebfcd379ee3dda71f3ae8))
|
|
15
|
+
* **env:** `agw env show` command (Phase 5) ([06f25b6](https://github.com/WayfarerLabs/agentworks/commit/06f25b6505c96d30cdc7a2ec2cf7ef7ee4a97860))
|
|
16
|
+
* **env:** env package + secrets config loaders (Phase 2) ([9c61284](https://github.com/WayfarerLabs/agentworks/commit/9c61284a5efc89c2b751a1de9e4ea182ecc83a5b))
|
|
17
|
+
* **env:** env vars + pluggable secret backends (env-and-secrets SDD) ([fa67409](https://github.com/WayfarerLabs/agentworks/commit/fa67409b2ec7fa48807bffcfa9987dda057141a5))
|
|
18
|
+
* **env:** wire env+secrets prelude into session create/restart (Phase 3) ([91f32db](https://github.com/WayfarerLabs/agentworks/commit/91f32dbcf0e758f645e026da7cbb345e014b8614))
|
|
19
|
+
* **provisioning:** defensive 'ensure agentworks files sourced' step ([29128aa](https://github.com/WayfarerLabs/agentworks/commit/29128aa862bf88d1ac73ed63cccfd3737779eeb8))
|
|
20
|
+
* **secrets:** add agw secret list for backend mapping discovery ([048f189](https://github.com/WayfarerLabs/agentworks/commit/048f189e6474a7c9eaf2c4b51f0f6ba0f1779dce))
|
|
21
|
+
* **secrets:** add SecretMappingError for hard-miss backends ([29823e7](https://github.com/WayfarerLabs/agentworks/commit/29823e75234a05c548bcdd4a1cd14f9c3bf6c851))
|
|
22
|
+
* **secrets:** eager-prompting orchestration module (Phase 6.1) ([4d28390](https://github.com/WayfarerLabs/agentworks/commit/4d28390a94163083e483d073162554969cdb67c9))
|
|
23
|
+
* **secrets:** eager-resolve + env threading in vm/agent shell+exec (Phase 6.5) ([423512f](https://github.com/WayfarerLabs/agentworks/commit/423512f3c49634c723bb19473303426ded49aeb6))
|
|
24
|
+
* **secrets:** eager-resolve in agent create/reinit (Phase 6.4) ([691d7bd](https://github.com/WayfarerLabs/agentworks/commit/691d7bd24092ad44a48464e47f4e51865b500fce))
|
|
25
|
+
* **secrets:** eager-resolve in console build + restore_session (Phase 6.2b) ([e0690ca](https://github.com/WayfarerLabs/agentworks/commit/e0690ca6e65a904b8d953392a6d357fdb4b92580))
|
|
26
|
+
* **secrets:** eager-resolve in session + console paths (Phase 6.2) ([ae6e68d](https://github.com/WayfarerLabs/agentworks/commit/ae6e68d2e72f31293edd19317c4b1158a14b62f4))
|
|
27
|
+
* **secrets:** eager-resolve in vm create/reinit (Phase 6.3) ([41a9d43](https://github.com/WayfarerLabs/agentworks/commit/41a9d435e90b8c57048b485f00dd521ae98344a3))
|
|
28
|
+
* **secrets:** Phase 1 - secrets package foundations ([1a79952](https://github.com/WayfarerLabs/agentworks/commit/1a799521c75fc40b990f825381eec0cbc595ecf6))
|
|
29
|
+
* **secrets:** thread env through agent setup runners (Phase 6.4b) ([e92bb4b](https://github.com/WayfarerLabs/agentworks/commit/e92bb4bb76ac9161e3d59224377d68f4ad337fac))
|
|
30
|
+
* **secrets:** thread env through vm provisioning runners (Phase 6.3b) ([0e2ef33](https://github.com/WayfarerLabs/agentworks/commit/0e2ef334c4ca612c313a360ed830583b77c26fca))
|
|
31
|
+
* **sessions:** create agent-mode tmux sessions via direct agent SSH ([389141f](https://github.com/WayfarerLabs/agentworks/commit/389141f5f5a14549b7db8541a1f33144a0fe97ca))
|
|
32
|
+
* **ssh:** add agent_exec_target ExecTarget builder ([8452262](https://github.com/WayfarerLabs/agentworks/commit/8452262e0c985301a81dc12574cb165d2d3ba135))
|
|
33
|
+
* **vm:** expose provisioner shell via 'vm shell --provisioner' ([f2ee07f](https://github.com/WayfarerLabs/agentworks/commit/f2ee07f9b91fb2a2e3d18726f0ead6963552261e))
|
|
34
|
+
* **vms:** apply VM hardening at vm create + vm reinit ([81b6dcf](https://github.com/WayfarerLabs/agentworks/commit/81b6dcf235e382b6b6ce4ce2b91994d8c1ee28a5))
|
|
35
|
+
* **vms:** deploy VM-side env-and-secrets fragments (Phase 4) ([61238b0](https://github.com/WayfarerLabs/agentworks/commit/61238b01e2d6c32be205064e1c90d815d8335a1b))
|
|
36
|
+
* **vms:** detect tailscaled DNS latch and abort phase B with heal hint ([3b289c8](https://github.com/WayfarerLabs/agentworks/commit/3b289c8287a6782dafe083c2b77dc0457fb5ea8f))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Bug Fixes
|
|
40
|
+
|
|
41
|
+
* **agents:** always write the agent's ~/.agentworks-rc.sh ([4c8f602](https://github.com/WayfarerLabs/agentworks/commit/4c8f602c8b3d81f7bab0bb89489142928a54c01a))
|
|
42
|
+
* **agents:** always write the agent's ~/.agentworks-rc.sh ([0f10e9c](https://github.com/WayfarerLabs/agentworks/commit/0f10e9c6e2c938db5d2d6f838060f51e586e1a9b))
|
|
43
|
+
* **agents:** rename stale ExecTarget annotation to Transport ([cd78049](https://github.com/WayfarerLabs/agentworks/commit/cd78049ceabd808909f2c5c4fc73c77b84c31847))
|
|
44
|
+
* **agents:** rename stale ExecTarget annotation to Transport ([86b0e89](https://github.com/WayfarerLabs/agentworks/commit/86b0e89cbf9a7611b85e42c4d0098aa35f534be9))
|
|
45
|
+
* **agents:** stop overwriting ~/.zshrc with a hardcoded PS1 ([c79a916](https://github.com/WayfarerLabs/agentworks/commit/c79a91623ad9ff2efc42d9b3ddf26c78022d3e71))
|
|
46
|
+
* **agents:** wrap claude/dotfiles commands in login shell for agent PATH ([0fa1cd5](https://github.com/WayfarerLabs/agentworks/commit/0fa1cd55fc756a27aee7cb77edbceeaaf617a50f))
|
|
47
|
+
* **agents:** wrap mise install/prune in login shell too ([aace97d](https://github.com/WayfarerLabs/agentworks/commit/aace97d2775d12afb8dd1690e5f191be7d059f10))
|
|
48
|
+
* **doctor:** simplify secret preview, honor prompt opt-out ([ba1f583](https://github.com/WayfarerLabs/agentworks/commit/ba1f5837e76cd85113ba9acb61ab4ac2777dc5a6))
|
|
49
|
+
* **env:** doctor.py legacy-aware credential check + both-set note + removal-timeline doc ([101c645](https://github.com/WayfarerLabs/agentworks/commit/101c6450039e56f685bc5023163d03329dce5664))
|
|
50
|
+
* **initializer:** identity-profile zsh mirror on fresh VMs ([c0cbd27](https://github.com/WayfarerLabs/agentworks/commit/c0cbd278588538dfedec0deb1561a6325cca4b6e))
|
|
51
|
+
* **logging:** route operation tracebacks to the per-op log ([bb7ea7e](https://github.com/WayfarerLabs/agentworks/commit/bb7ea7e3f2472f6a268bc77cb0b7f1aaf5c0ce87))
|
|
52
|
+
* **logging:** route operation tracebacks to the per-op log ([ec1ab02](https://github.com/WayfarerLabs/agentworks/commit/ec1ab02467e4e459210bf1dafe4f1b464115c5ba))
|
|
53
|
+
* **secrets:** PromptSource must respect backend_mappings.prompt=false ([bedb2ee](https://github.com/WayfarerLabs/agentworks/commit/bedb2ee6eb1655c9b0fd4ec651177bcfbbcabae0))
|
|
54
|
+
* **ssh:** coalesce SetEnv pairs into one -o argument ([94f54f8](https://github.com/WayfarerLabs/agentworks/commit/94f54f87364fc9942979ea86f313f05ed77a615a))
|
|
55
|
+
* **ssh:** dispatch interactive() across non-SSH transports ([3aa48a8](https://github.com/WayfarerLabs/agentworks/commit/3aa48a8dccd33e1596b5fbd60a83858b8fbd02a6))
|
|
56
|
+
* **ssh:** wrap remote-lima interactive in login shell for PATH ([3e4b83c](https://github.com/WayfarerLabs/agentworks/commit/3e4b83ce2450a07eef826ef38580d32dcbc44251))
|
|
57
|
+
* **transports:** default mid-create identity_file to operator key ([3b84132](https://github.com/WayfarerLabs/agentworks/commit/3b8413291240904c2463aad87e9645982c7921d3))
|
|
58
|
+
* **vm:** auto-attach/detach Azure public IP for 'vm shell --provisioner' ([a1621f9](https://github.com/WayfarerLabs/agentworks/commit/a1621f92fe7370502bdb71da96e802c1a0d15fe0))
|
|
59
|
+
* **vm:** point Proxmox provisioner-shell users at web UI serial console ([31d9045](https://github.com/WayfarerLabs/agentworks/commit/31d90458848a6341ee4690b309d7b148e2ed36bc))
|
|
60
|
+
* **vms:** announce DNS check before the lookup pauses ([f358898](https://github.com/WayfarerLabs/agentworks/commit/f3588986c3b6cefca8e6dc0701b9e010b7e9ff85))
|
|
61
|
+
* **vms:** order tailscaled after systemd-resolved to fix DNS race ([905d00a](https://github.com/WayfarerLabs/agentworks/commit/905d00a73087a0aa0c6fee385801ab40a2e2666b))
|
|
62
|
+
* **vms:** restore tailscale_host guard on exec_vm + round-2 review nits ([59c7d9a](https://github.com/WayfarerLabs/agentworks/commit/59c7d9a9cd47a76781ec6c140fbd72d53ea16948))
|
|
63
|
+
* **vms:** tailscaled DNS race fix and vm-shell provisioner flag ([dc147f8](https://github.com/WayfarerLabs/agentworks/commit/dc147f8a8d383eb0487051539cd492b896ea6805))
|
|
64
|
+
* **vms:** warn that heal kills SSH session over Tailscale ([8fb56b4](https://github.com/WayfarerLabs/agentworks/commit/8fb56b438ffee2140c74706d4cb5b33e7a48a24c))
|
|
65
|
+
* **vm:** warn instead of block on failed-init for 'vm shell' ([c84adff](https://github.com/WayfarerLabs/agentworks/commit/c84adfffd0b53e6bd012f5c0fc41401376af4434))
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
### Documentation
|
|
69
|
+
|
|
70
|
+
* address Copilot feedback on PR [#107](https://github.com/WayfarerLabs/agentworks/issues/107) (proper noun, EDITOR/VISUAL, doctor scope, tmux detach hint) ([b4ed925](https://github.com/WayfarerLabs/agentworks/commit/b4ed925beb62cccbcb732dc4244d5358cdd4a3f3))
|
|
71
|
+
* **env:** document env + secrets in sample config and READMEs (Phase 5) ([adc32d7](https://github.com/WayfarerLabs/agentworks/commit/adc32d71b43499bebcb2328c6b73a3f9317607a0))
|
|
72
|
+
* move walkthrough to cli/, collapse top-level Tmux subsections ([34dbcc2](https://github.com/WayfarerLabs/agentworks/commit/34dbcc2edd52520941805256a695d8eaa9311a4d))
|
|
73
|
+
* rename remaining env_var references to env-var ([7ec1af8](https://github.com/WayfarerLabs/agentworks/commit/7ec1af86bb3ad528da2fa13772910cbbf4976542))
|
|
74
|
+
* rewrite tmux detach hint to not overpromise on prefix override ([343f729](https://github.com/WayfarerLabs/agentworks/commit/343f72959f4dd7c92c97d9e89486bf01900091ec))
|
|
75
|
+
* **sample-config:** #toml comment convention for uncomment-in-place ([04d6803](https://github.com/WayfarerLabs/agentworks/commit/04d6803478f7988929643bf297215809da943f1d))
|
|
76
|
+
* **sample-config:** inline env tables with resources, lift secrets up ([06c1c61](https://github.com/WayfarerLabs/agentworks/commit/06c1c61a50993904880141a14c5e330744db327e))
|
|
77
|
+
* **sdd:** address phase-7 review (tradeoffs, sync-ssh-config, SSH-alias placement) ([8e1c9bd](https://github.com/WayfarerLabs/agentworks/commit/8e1c9bd9d7da3e99fdd891a3b8e85d3ab09b29d8))
|
|
78
|
+
* **sdd:** direct-user-ssh-access SDD ([ef1281f](https://github.com/WayfarerLabs/agentworks/commit/ef1281fb3ed1df7bf37f0eeb7252d3a9515c76d4))
|
|
79
|
+
* **sdd:** drop stale nerftools references from env-and-secrets SDD ([c2b9fc4](https://github.com/WayfarerLabs/agentworks/commit/c2b9fc469bfc487c9ef90c0de961c3841590fd56))
|
|
80
|
+
* **sdd:** lock env-and-secrets SDD ([672b7fa](https://github.com/WayfarerLabs/agentworks/commit/672b7fa953f4815138c50da0f66654caaee5d17c))
|
|
81
|
+
* **sdd:** phase 7 deliverables (two ADR drafts + cli/README SSH alias surface) ([c984705](https://github.com/WayfarerLabs/agentworks/commit/c984705546e8a029d8cca916f0231562c0c1c21b))
|
|
82
|
+
* **secrets:** clarify when PromptSource opt-out adds value ([6bc31bf](https://github.com/WayfarerLabs/agentworks/commit/6bc31bf8a14c01026aa1904f5d8dd7111fc2b92c))
|
|
83
|
+
* **secrets:** tighten _agent_secret_targets docstring (Phase 6.4 polish) ([5d6b9e2](https://github.com/WayfarerLabs/agentworks/commit/5d6b9e27e3f35a4216cbebf350a2ee866d50b4ae))
|
|
84
|
+
* tighten READMEs to project-vs-CLI split ([2021699](https://github.com/WayfarerLabs/agentworks/commit/2021699f4f09ec7fab9cdd51eb829e960df0c851))
|
|
85
|
+
* tighten tmux detach hint to two lines ([4b549ce](https://github.com/WayfarerLabs/agentworks/commit/4b549ce2f810e7c1f13ef8ea58616b17e4e22aef))
|
|
86
|
+
|
|
87
|
+
## [0.6.0](https://github.com/WayfarerLabs/agentworks/compare/v0.5.0...v0.6.0) (2026-06-06)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### Features
|
|
91
|
+
|
|
92
|
+
* **console:** aw-session-vertical layout + focus session pane on build ([6932505](https://github.com/WayfarerLabs/agentworks/commit/6932505f78d821d1ec2ddd45cc37d74f1cedccb5))
|
|
93
|
+
* **console:** aw-session-vertical layout + focus session pane on build ([aa8270c](https://github.com/WayfarerLabs/agentworks/commit/aa8270cdf31df6512e95c450606056f48a91202d))
|
|
94
|
+
* **vms:** wrap every VM-touching command in keep_vm_active ([8fa8e46](https://github.com/WayfarerLabs/agentworks/commit/8fa8e4600abc125d6f3e1fefc36202336de9c306))
|
|
95
|
+
* **wsl2:** bind keepalive subprocess to Win32 Job Object for orphan-proof cleanup ([08a4833](https://github.com/WayfarerLabs/agentworks/commit/08a4833481ce2146bc784cdfd83baece39b62542))
|
|
96
|
+
* **wsl2:** surface idle-shutdown prevention enter/exit on the keepalive ([f41e926](https://github.com/WayfarerLabs/agentworks/commit/f41e9263976b0267f2cbe1b400177a6dbfe8d937))
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### Bug Fixes
|
|
100
|
+
|
|
101
|
+
* address Copilot review on PR [#95](https://github.com/WayfarerLabs/agentworks/issues/95) ([e45322d](https://github.com/WayfarerLabs/agentworks/commit/e45322db28b4ae9b0043699efcbbf84e4782dcc7))
|
|
102
|
+
* **ci:** make WSL2 keepalive code portable to the Linux CI runner ([9de3776](https://github.com/WayfarerLabs/agentworks/commit/9de377623c3207cc13330543394b3874dfeadf23))
|
|
103
|
+
* **ci:** satisfy lint-files and ruff on the WSL2 branch ([482646d](https://github.com/WayfarerLabs/agentworks/commit/482646dd42b7cd0d002ca2c4d836afe1bf2e90d4))
|
|
104
|
+
* **console:** focus session pane on restore-session no-op path too ([78dad70](https://github.com/WayfarerLabs/agentworks/commit/78dad70c7ea3905eb1ffe338011b9423c078a65e))
|
|
105
|
+
* **console:** hand-computed tmux layout string for exact aw-session-vertical geometry ([014613b](https://github.com/WayfarerLabs/agentworks/commit/014613ba058f4c30a8d48257eb7f00f7176209fc))
|
|
106
|
+
* **console:** pane-index sort + silent single-pane no-op + doc fixes ([b14ce2c](https://github.com/WayfarerLabs/agentworks/commit/b14ce2cd781733f72accf04c8e89d1e5eaf721aa))
|
|
107
|
+
* **wsl2:** address agentworks-reviewer feedback on PR [#95](https://github.com/WayfarerLabs/agentworks/issues/95) ([65c66cc](https://github.com/WayfarerLabs/agentworks/commit/65c66cc1b560ed660b56fa59b21fcf4c80003189))
|
|
108
|
+
* **wsl2:** close keepalive subprocess stderr PIPE on both exit paths ([4271772](https://github.com/WayfarerLabs/agentworks/commit/42717727e0940a043eb457383acfadf7a7c3613b))
|
|
109
|
+
* **wsl2:** rehabilitate broken provisioning and add platform-wide keepalive ([177edff](https://github.com/WayfarerLabs/agentworks/commit/177edffc56fa38ccb3c62b6f2e1379707dba966c))
|
|
110
|
+
* **wsl2:** tolerate already-dead keepalive subprocess + drop redundant local import ([67cc239](https://github.com/WayfarerLabs/agentworks/commit/67cc239ef3fbd2888ea498f6610d357f289837a3))
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
### Documentation
|
|
114
|
+
|
|
115
|
+
* **console:** clarify multi_console_layout module docstring re Config dep ([6031039](https://github.com/WayfarerLabs/agentworks/commit/6031039b95f08bb55bddab211a4a72cc33c8acb5))
|
|
116
|
+
|
|
3
117
|
## [0.5.0](https://github.com/WayfarerLabs/agentworks/compare/v0.4.0...v0.5.0) (2026-06-05)
|
|
4
118
|
|
|
5
119
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentworks-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: CLI for orchestrating workspace lifecycle across multiple compute targets
|
|
5
5
|
Project-URL: Homepage, https://github.com/WayfarerLabs/agentworks
|
|
6
6
|
Project-URL: Repository, https://github.com/WayfarerLabs/agentworks
|
|
@@ -11,7 +11,6 @@ Requires-Python: >=3.12
|
|
|
11
11
|
Requires-Dist: azure-identity>=1.25.1
|
|
12
12
|
Requires-Dist: azure-mgmt-compute>=37.0.1
|
|
13
13
|
Requires-Dist: azure-mgmt-network>=29.0.0
|
|
14
|
-
Requires-Dist: nerftools>=1.1.0
|
|
15
14
|
Requires-Dist: typer>=0.24.1
|
|
16
15
|
Description-Content-Type: text/markdown
|
|
17
16
|
|
|
@@ -36,11 +35,39 @@ The everyday command is `agw`. The longer form `agentworks` is also installed if
|
|
|
36
35
|
type it out; examples throughout this document use `agw`.
|
|
37
36
|
|
|
38
37
|
```bash
|
|
38
|
+
# Initial setup
|
|
39
39
|
agw config init # creates ~/.config/agentworks/config.toml
|
|
40
|
-
|
|
41
|
-
agw
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
agw config edit # opens the config in your $EDITOR (or $VISUAL) to fill in required fields
|
|
41
|
+
agw doctor # sanity-checks installed tools, Tailscale, config validity, and the local DB
|
|
42
|
+
|
|
43
|
+
# Create a VM, workspace, agent, and session to see how the pieces fit together
|
|
44
|
+
agw vm create my-vm
|
|
45
|
+
agw workspace create my-workspace --vm my-vm
|
|
46
|
+
agw agent create my-agent --vm my-vm
|
|
47
|
+
agw session create my-session --workspace my-workspace --agent my-agent
|
|
48
|
+
|
|
49
|
+
# Attach to the session's tmux session to drive it
|
|
50
|
+
agw session attach my-session
|
|
51
|
+
# Use tmux's 'detach' command (default Ctrl-b unless overridden by config) to disconnect while
|
|
52
|
+
# leaving everything running on the VM.
|
|
53
|
+
agw session attach my-session # You'll pick up right where you left off
|
|
54
|
+
agw session stop my-session # Sessions can be stopped (or can exit on their own)
|
|
55
|
+
agw session list
|
|
56
|
+
agw session restart my-session
|
|
57
|
+
agw session attach my-session
|
|
58
|
+
agw session delete my-session # When you're done with it. Agent and workspace are preserved.
|
|
59
|
+
|
|
60
|
+
# Alternatively, you can create ephemeral workspaces and agents along with your sessions
|
|
61
|
+
agw session create my-ephemeral-session --vm my-vm --new-workspace --new-agent
|
|
62
|
+
agw session attach my-ephemeral-session
|
|
63
|
+
agw session delete my-ephemeral-session # This will prompt you to delete the associated workspace and agent, too
|
|
64
|
+
|
|
65
|
+
# Finally, create two sessions and a named console
|
|
66
|
+
agw session create s1 --vm my-vm --new-workspace --new-agent
|
|
67
|
+
agw session create s2 --vm my-vm --new-workspace --new-agent
|
|
68
|
+
agw console create my-console s1 s2+1 # The + syntax gives you extra shells as that agent
|
|
69
|
+
agw console attach my-console
|
|
70
|
+
agw console delete my-console # Extra shells are lost but sessions are preserved
|
|
44
71
|
```
|
|
45
72
|
|
|
46
73
|
## Prerequisites
|
|
@@ -48,7 +75,8 @@ agw workspace shell my-workspace
|
|
|
48
75
|
- Python 3.12+ (uv will install one for you if needed)
|
|
49
76
|
- [uv](https://docs.astral.sh/uv/) or [pipx](https://pipx.pypa.io/) for installation
|
|
50
77
|
- [Tailscale](https://tailscale.com/) installed and connected (for VM workspaces)
|
|
51
|
-
- One of: [Lima](https://lima-vm.io/), Azure CLI (`az`),
|
|
78
|
+
- One of: [Lima](https://lima-vm.io/), Azure CLI (`az`), [Proxmox](https://www.proxmox.com/), or
|
|
79
|
+
WSL2 (for VM provisioning)
|
|
52
80
|
|
|
53
81
|
## Global Options
|
|
54
82
|
|
|
@@ -104,6 +132,14 @@ bypass the confirmation prompt.
|
|
|
104
132
|
|
|
105
133
|
Manage virtual machines across Lima (local or remote), Azure, and WSL2.
|
|
106
134
|
|
|
135
|
+
> **Note on WSL2:** WSL2 distros share the Windows workstation's lifecycle. They idle-shut after
|
|
136
|
+
> ~60s of no `wsl.exe` activity (`vmIdleTimeout` in `.wslconfig`) and do not survive workstation
|
|
137
|
+
> shutdown or sleep. agentworks holds a `wsl.exe` keepalive for the duration of each VM-touching
|
|
138
|
+
> command, so individual `agw` operations work cleanly, but agents and sessions on WSL2 are not
|
|
139
|
+
> suitable for unattended background workflows. Use a different provisioner that provides true
|
|
140
|
+
> long-lived VMs (e.g. Lima, Azure, Proxmox, etc.) if you need a VM that survives independent of
|
|
141
|
+
> your workstation.
|
|
142
|
+
|
|
107
143
|
| Command | Description |
|
|
108
144
|
| ----------------------------------------- | ------------------------------------------ |
|
|
109
145
|
| `agw vm create <name>` | Create a new VM (provision + initialize) |
|
|
@@ -129,6 +165,18 @@ Changes to config (new packages, different install commands, etc.) are picked up
|
|
|
129
165
|
`vm delete` requires `--force` if the VM has workspaces, agents, or sessions. The confirmation
|
|
130
166
|
message shows what will be deleted. Pass `--yes` to skip the prompt.
|
|
131
167
|
|
|
168
|
+
`agw vm shell` is the agentworks-wrapped entry point; for raw SSH (VS Code Remote-SSH, `scp`, etc.),
|
|
169
|
+
use the `awvm--<vm>` alias documented under [Direct SSH aliases](#direct-ssh-aliases).
|
|
170
|
+
|
|
171
|
+
`agw vm shell --provisioner` opens the same shell over the platform-native transport
|
|
172
|
+
(`limactl shell` for Lima, `wsl.exe` for WSL2, SSH via a temporarily-attached public IP for Azure)
|
|
173
|
+
instead of Tailscale. Useful when Tailscale itself is the thing you need to reach the VM to fix (the
|
|
174
|
+
issue #117 latched DNS state is the canonical case: its heal involves restarting tailscaled, which
|
|
175
|
+
would terminate a Tailscale-SSH session mid-sequence). On Azure, a public IP is attached for the
|
|
176
|
+
duration of the session and detached on exit. Proxmox isn't supported by this flag because the QEMU
|
|
177
|
+
guest agent's exec interface is one-shot and non-interactive; use the Proxmox web UI's serial
|
|
178
|
+
console (`VM > Console` in the Proxmox VE web UI) as the equivalent escape hatch.
|
|
179
|
+
|
|
132
180
|
### Workspaces
|
|
133
181
|
|
|
134
182
|
Manage workspaces on VMs.
|
|
@@ -162,25 +210,55 @@ during deletion. Pass `--yes` to skip the confirmation prompt.
|
|
|
162
210
|
|
|
163
211
|
Manage agents (isolated Linux users) on VMs. Agents are VM-scoped and access workspaces via grants.
|
|
164
212
|
|
|
165
|
-
| Command | Description
|
|
166
|
-
| -------------------------------------------- |
|
|
167
|
-
| `agw agent create <name> [--vm]` | Create an agent on a VM
|
|
168
|
-
| `agw agent list [--vm <vm>]` | List agents
|
|
169
|
-
| `agw agent describe <name>` | Show agent details and grants
|
|
170
|
-
| `agw agent reinit <name>` | Re-run agent setup
|
|
171
|
-
| `agw agent grant-workspaces <name> <ws>...` | Grant workspace access
|
|
172
|
-
| `agw agent grant-workspaces <name> --all` | Grant access to all workspaces
|
|
173
|
-
| `agw agent revoke-workspaces <name> <ws>...` | Revoke workspace access
|
|
174
|
-
| `agw agent revoke-workspaces <name> --all` | Revoke all explicit grants
|
|
175
|
-
| `agw agent shell <name> [--workspace <ws>]` |
|
|
176
|
-
| `agw agent
|
|
213
|
+
| Command | Description |
|
|
214
|
+
| -------------------------------------------- | ---------------------------------------- |
|
|
215
|
+
| `agw agent create <name> [--vm]` | Create an agent on a VM |
|
|
216
|
+
| `agw agent list [--vm <vm>]` | List agents |
|
|
217
|
+
| `agw agent describe <name>` | Show agent details and grants |
|
|
218
|
+
| `agw agent reinit <name>` | Re-run agent setup |
|
|
219
|
+
| `agw agent grant-workspaces <name> <ws>...` | Grant workspace access |
|
|
220
|
+
| `agw agent grant-workspaces <name> --all` | Grant access to all workspaces |
|
|
221
|
+
| `agw agent revoke-workspaces <name> <ws>...` | Revoke workspace access |
|
|
222
|
+
| `agw agent revoke-workspaces <name> --all` | Revoke all explicit grants |
|
|
223
|
+
| `agw agent shell <name> [--workspace <ws>]` | Open an interactive shell as the agent |
|
|
224
|
+
| `agw agent exec <name> -- <cmd...>` | Run a one-shot command non-interactively |
|
|
225
|
+
| `agw agent delete <name>` | Delete an agent |
|
|
177
226
|
|
|
178
227
|
`agent create <name>` takes the agent name as a required positional. Optional flags: `--vm`,
|
|
179
228
|
`--template`, and `--grant-all-workspaces`.
|
|
180
229
|
|
|
230
|
+
`agent shell` and `agent exec` both SSH directly as the agent's Linux user. `agent shell` opens an
|
|
231
|
+
interactive login shell (sources the agent's profile; pass `--workspace <ws>` to `cd` into a granted
|
|
232
|
+
workspace first). `agent exec` runs a single command non-interactively but still wraps it in the
|
|
233
|
+
agent's login shell so the agent's `PATH` (mise shims, `~/.local/bin`, etc.) is in scope. Useful for
|
|
234
|
+
scripted invocations like `agw agent exec myagent -- claude -p "..."`.
|
|
235
|
+
|
|
181
236
|
`agent delete` requires `--force` if the agent has running sessions. Pass `--yes` to skip the
|
|
182
237
|
confirmation prompt.
|
|
183
238
|
|
|
239
|
+
`agw agent shell` / `agw agent exec` are agentworks-wrapped entry points; for raw SSH access to an
|
|
240
|
+
agent (e.g. from VS Code Remote-SSH or `scp`), use the `awagent--<agent>` alias documented under
|
|
241
|
+
[Direct SSH aliases](#direct-ssh-aliases).
|
|
242
|
+
|
|
243
|
+
### Direct SSH aliases
|
|
244
|
+
|
|
245
|
+
Agentworks maintains operator-side SSH config entries for both VMs and agents under
|
|
246
|
+
`~/.ssh/config.d/agentworks.conf` (or inline in `~/.ssh/config` if `ssh_config_dir = false`):
|
|
247
|
+
|
|
248
|
+
| Alias shape | Lands you as | Use cases |
|
|
249
|
+
| ------------------ | ---------------------- | ------------------------------------------------- |
|
|
250
|
+
| `awvm--<vm>` | The VM's admin user | `ssh awvm--myvm`, `scp file awvm--myvm:~/` |
|
|
251
|
+
| `awagent--<agent>` | The agent's Linux user | `ssh awagent--claude`, VS Code Remote-SSH targets |
|
|
252
|
+
|
|
253
|
+
The agent alias is keyed on the agent's operator-facing name (the same name you use in
|
|
254
|
+
`agw agent ...` commands), not on the on-VM Linux user (which is an implementation detail). The
|
|
255
|
+
prefixes are configurable via `operator.ssh_host_prefix` (default `awvm--`) and
|
|
256
|
+
`operator.ssh_agent_host_prefix` (default `awagent--`).
|
|
257
|
+
|
|
258
|
+
Entries are rebuilt declaratively from the database on every agent / VM lifecycle operation, so a
|
|
259
|
+
fresh `agw agent create` or `agw vm delete` keeps the file in sync without manual intervention. Run
|
|
260
|
+
`agw config sync-ssh-config` to force a rebuild.
|
|
261
|
+
|
|
184
262
|
### Sessions
|
|
185
263
|
|
|
186
264
|
Manage sessions (persistent tmux sessions running in workspaces). Session names are globally unique
|
|
@@ -296,8 +374,8 @@ with sessions, at different scopes:
|
|
|
296
374
|
| Method | Scope | tmux session name | Entry point |
|
|
297
375
|
| ------------------------- | -------------------------------- | ------------------------ | --------------------------- |
|
|
298
376
|
| `session attach` | One session | `<session-name>` | Operator's machine |
|
|
299
|
-
| `workspace console` | One workspace | `ws-<workspace>-console` | On-VM or operator's machine |
|
|
300
377
|
| `console` | Curated subset across workspaces | `aw-console-<name>` | Operator's machine |
|
|
378
|
+
| `workspace console` | One workspace | `ws-<workspace>-console` | On-VM or operator's machine |
|
|
301
379
|
| `vm console` (deprecated) | All sessions on the VM | `vm-console` | Operator's machine |
|
|
302
380
|
|
|
303
381
|
#### Session tmux sessions
|
|
@@ -310,21 +388,6 @@ creation, session management, and the command prompt are selectively unbound.
|
|
|
310
388
|
Agent-mode sessions run on a per-agent tmux socket so the agent's shell connects directly to the
|
|
311
389
|
tmux pane PTY. The socket path is persisted in the database.
|
|
312
390
|
|
|
313
|
-
#### Workspace console
|
|
314
|
-
|
|
315
|
-
`workspace console` uses tmuxinator to create or attach to a `ws-<name>-console` session. The
|
|
316
|
-
tmuxinator config (`.tmuxinator.yml` in the workspace root) is regenerated whenever sessions change,
|
|
317
|
-
so the console always reflects the current set of sessions. Best for in-VM work scoped to a single
|
|
318
|
-
workspace (e.g. inside VS Code's integrated terminal). For curated views that span workspaces, use a
|
|
319
|
-
named console (`console attach <name>`).
|
|
320
|
-
|
|
321
|
-
```text
|
|
322
|
-
ws-myproject-console (tmuxinator, full tmux)
|
|
323
|
-
Window 1: admin-shell login shell for the admin user
|
|
324
|
-
Window 2: myproject-claude attached to session
|
|
325
|
-
Window 3: myproject-debug attached to session
|
|
326
|
-
```
|
|
327
|
-
|
|
328
391
|
#### Named console
|
|
329
392
|
|
|
330
393
|
`console attach <name>` creates or attaches to the `aw-console-<name>` tmux session. Membership and
|
|
@@ -347,6 +410,21 @@ the DB is touched and changes appear on next attach. The mutation commands (`add
|
|
|
347
410
|
attach/repair commands (`attach`, `restore-session`) do start a stopped VM, since their job is to
|
|
348
411
|
bring live state up.
|
|
349
412
|
|
|
413
|
+
#### Workspace console
|
|
414
|
+
|
|
415
|
+
`workspace console` uses tmuxinator to create or attach to a `ws-<name>-console` session. The
|
|
416
|
+
tmuxinator config (`.tmuxinator.yml` in the workspace root) is regenerated whenever sessions change,
|
|
417
|
+
so the console always reflects the current set of sessions. Best for in-VM work scoped to a single
|
|
418
|
+
workspace (e.g. inside VS Code's integrated terminal). For curated views that span workspaces, use a
|
|
419
|
+
named console (`console attach <name>`).
|
|
420
|
+
|
|
421
|
+
```text
|
|
422
|
+
ws-myproject-console (tmuxinator, full tmux)
|
|
423
|
+
Window 1: admin-shell login shell for the admin user
|
|
424
|
+
Window 2: myproject-claude attached to session
|
|
425
|
+
Window 3: myproject-debug attached to session
|
|
426
|
+
```
|
|
427
|
+
|
|
350
428
|
#### VM console (deprecated)
|
|
351
429
|
|
|
352
430
|
`vm console` creates or attaches to the `vm-console` session, which spans all sessions on the VM.
|
|
@@ -386,9 +464,9 @@ description = "Claude Code interactive session"
|
|
|
386
464
|
```
|
|
387
465
|
|
|
388
466
|
Template commands support `{{session_name}}` and `{{workspace_name}}` variable substitution
|
|
389
|
-
(double-brace syntax
|
|
390
|
-
|
|
391
|
-
|
|
467
|
+
(double-brace syntax). The optional `restart_command` is used by `session restart` -- useful for
|
|
468
|
+
tools like Claude Code where `--resume` picks up the previous conversation. If omitted, the regular
|
|
469
|
+
`command` is used.
|
|
392
470
|
|
|
393
471
|
### Catalog
|
|
394
472
|
|
|
@@ -409,7 +487,7 @@ Browse and inspect the built-in catalog of installable tools.
|
|
|
409
487
|
| `agw config init` | Create a sample config file |
|
|
410
488
|
| `agw config edit` | Open config in `$EDITOR` |
|
|
411
489
|
| `agw config sample` | Print the sample config to stdout |
|
|
412
|
-
| `agw config sync-ssh-config` | Rebuild SSH config entries for
|
|
490
|
+
| `agw config sync-ssh-config` | Rebuild SSH config entries for VMs + agents |
|
|
413
491
|
| `agw config sync-vscode-workspaces` | Regenerate .code-workspace files for all VMs |
|
|
414
492
|
|
|
415
493
|
## Configuration
|
|
@@ -429,8 +507,11 @@ Key sections:
|
|
|
429
507
|
- `[session.config]` -- session defaults (history limit)
|
|
430
508
|
- `[session_templates.*]` -- session templates with variable substitution
|
|
431
509
|
- `[workspace_templates.*]` -- workspace templates with inheritance
|
|
432
|
-
- `[named_console]` -- named-console layout (tmux preset
|
|
510
|
+
- `[named_console]` -- named-console layout (tmux preset names + `aw-session-vertical`)
|
|
433
511
|
- `[git_credentials.*]` -- git credential providers (GitHub, Azure DevOps)
|
|
512
|
+
- `[<scope>.env]` -- env vars at vm / workspace / admin / agent / session scope
|
|
513
|
+
- `[secrets.*]` -- secret declarations referenced by `{ secret = "name" }` env entries
|
|
514
|
+
- `[secret_backends.*]` / `[secret_config]` -- active secret backend chain
|
|
434
515
|
- `[apt_sources.*]` -- user-defined third-party apt repositories
|
|
435
516
|
- `[apt_packages.*]` -- user-defined named apt package sets
|
|
436
517
|
- `[system_install_commands.*]` -- user-defined system-level install commands
|
|
@@ -438,41 +519,103 @@ Key sections:
|
|
|
438
519
|
- `[azure]` -- Azure-specific settings
|
|
439
520
|
- `[proxmox]` -- Proxmox VE API settings
|
|
440
521
|
|
|
441
|
-
###
|
|
442
|
-
|
|
443
|
-
Agentworks installs [mise](https://mise.jdx.dev/) by default on all VMs for managing CLI tools
|
|
444
|
-
(terraform, adr-tools, node, etc.) with optional lockfile-based integrity verification. See
|
|
445
|
-
[Using mise](../docs/guides/mise.md) for the full guide.
|
|
522
|
+
### Environment Variables and Secrets
|
|
446
523
|
|
|
447
|
-
|
|
524
|
+
Env tables can be declared at five scopes; for any given session the merged value is computed in
|
|
525
|
+
this precedence order (highest scope wins; identity vars win over everything):
|
|
448
526
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
527
|
+
```text
|
|
528
|
+
session > (agent | admin) > workspace > vm (AGENTWORKS_* identity overrides all)
|
|
529
|
+
```
|
|
452
530
|
|
|
453
|
-
|
|
531
|
+
Admin and agent scopes are mutually exclusive: a shell opened as the admin user (e.g.
|
|
532
|
+
`agw vm shell`) sees admin scope; an agent-mode session sees agent scope. Each scope is a TOML table
|
|
533
|
+
mapping env-var name to either a plaintext string or `{ secret = "<name>" }`:
|
|
454
534
|
|
|
455
535
|
```toml
|
|
456
|
-
[vm_templates.default]
|
|
457
|
-
|
|
536
|
+
[vm_templates.default.env]
|
|
537
|
+
HTTP_PROXY = "http://proxy:3128"
|
|
538
|
+
NPM_TOKEN = { secret = "npm-token" }
|
|
539
|
+
|
|
540
|
+
[admin.env]
|
|
541
|
+
EDITOR = "nvim"
|
|
458
542
|
```
|
|
459
543
|
|
|
460
|
-
|
|
461
|
-
|
|
544
|
+
Every `{ secret = "<name>" }` reference must point to a `[secrets.<name>]` declaration. Active
|
|
545
|
+
backends (and their precedence order) are listed in `[secret_config].backends`. Today the
|
|
546
|
+
implemented backends are:
|
|
547
|
+
|
|
548
|
+
- `env-var` -- reads from the operator's process env. Default convention is
|
|
549
|
+
`AW_SECRET_<UPPER_SNAKE_CASE>`, overridable per secret via
|
|
550
|
+
`[secrets.<name>].backend_mappings.env-var = "CUSTOM_NAME"`.
|
|
551
|
+
- `prompt` -- interactive prompt; batched at the start of the CLI run.
|
|
552
|
+
|
|
553
|
+
**Eager prompting (FRD R4):** every command that opens new shells resolves all needed secrets up
|
|
554
|
+
front, before any state mutation. The set of secrets is computed from the command's static filters
|
|
555
|
+
(positional targets, `--vm`, `--workspace`, `--agent`, etc.) -- dynamic predicates like
|
|
556
|
+
`--all-stopped` apply later, so the prompted set may over-approximate. Non-interactive mode (no TTY
|
|
557
|
+
or `--non-interactive`) surfaces missing secrets as `SecretUnavailableError` with a per-secret hint
|
|
558
|
+
naming which backends were tried. Commands that join existing shells (`session attach`,
|
|
559
|
+
`session list`, `console attach` against a live tmux session, `console add-sessions`) consume no
|
|
560
|
+
secrets per FRD R4 / R5.
|
|
561
|
+
|
|
562
|
+
**Miss semantics:** what "not found" means depends on the backend. Conventional sources (`env-var`,
|
|
563
|
+
`prompt`) treat a missing value as a soft miss and fall through to the next backend in the chain --
|
|
564
|
+
a `GITHUB_TOKEN` env var that isn't set is just-not-set, not a config error. Persistent-store
|
|
565
|
+
backends (1Password, Vault when implemented) will treat an explicit mapping that doesn't resolve as
|
|
566
|
+
a hard miss: they raise `SecretMappingError` and the chain halts so a wrong `op://` URI doesn't
|
|
567
|
+
quietly fall through to a prompt that masks the real problem.
|
|
568
|
+
|
|
569
|
+
Inspect the merged result for any context with `agw env show`:
|
|
462
570
|
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
|
|
571
|
+
```bash
|
|
572
|
+
agw env show --session my-session # secrets redacted as <from secret: name>
|
|
573
|
+
agw env show --vm my-vm --reveal-secrets # resolves through the active backend chain
|
|
466
574
|
```
|
|
467
575
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
manifests can be added via `nerf_addl_manifests`.
|
|
576
|
+
Inspect how each active backend would resolve each declared secret (e.g. "which env var name does
|
|
577
|
+
this secret read from?") with `agw secret list`:
|
|
471
578
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
579
|
+
```bash
|
|
580
|
+
agw secret list
|
|
581
|
+
# NAME env-var prompt
|
|
582
|
+
# ---- ------- ------
|
|
583
|
+
# github-token AW_SECRET_GITHUB_TOKEN enabled
|
|
584
|
+
# force-prompt disabled enabled
|
|
585
|
+
# api-key OPENAI_API_KEY enabled
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
Columns are the active backends in `[secret_config].backends` precedence order. Cells show each
|
|
589
|
+
backend's static lookup identifier (env var name, vault path, `op://` URI) or `disabled` / `enabled`
|
|
590
|
+
for backends with an explicit opt-out or no static identifier (prompt). Values are never resolved.
|
|
591
|
+
|
|
592
|
+
`agw doctor`'s Secrets group leads with one row naming the active backend chain
|
|
593
|
+
(`Configured backends: env-var, prompt`). Then one row per declared secret showing whether the chain
|
|
594
|
+
would resolve it (`would resolve via env-var`, `would resolve via prompt`, or
|
|
595
|
+
`not available in any backend`). Per-secret config-validity findings round out the group: unused
|
|
596
|
+
secret declarations and `backend_mappings.<kind>` entries pointing at undeclared or inactive
|
|
597
|
+
backends. `AGENTWORKS_*` identity overrides surface in the Configuration group (they're a
|
|
598
|
+
config-load warning). Broken `{ secret = "..." }` references are caught earlier as a hard
|
|
599
|
+
config-load error before doctor runs.
|
|
600
|
+
|
|
601
|
+
### Mise (Polyglot Tool Manager)
|
|
602
|
+
|
|
603
|
+
Agentworks installs [mise](https://mise.jdx.dev/) by default on all VMs for managing CLI tools
|
|
604
|
+
(terraform, adr-tools, node, etc.) with optional lockfile-based integrity verification. See
|
|
605
|
+
[Using mise](../docs/guides/mise.md) for the full guide.
|
|
606
|
+
|
|
607
|
+
### Claude Code Plugins
|
|
608
|
+
|
|
609
|
+
Agentworks can register Claude Code marketplaces and install plugins automatically per user (admin
|
|
610
|
+
and per-agent). Configure via `claude_marketplaces` and `claude_plugins` in `admin.config` or any
|
|
611
|
+
`agent_templates.*`. Requires the `claude` CLI on PATH (typically installed via
|
|
612
|
+
`user_install_commands`). To install nerftools this way:
|
|
613
|
+
|
|
614
|
+
```toml
|
|
615
|
+
[admin.config]
|
|
616
|
+
claude_marketplaces = ["https://github.com/WayfarerLabs/nerftools#4.1.0"]
|
|
617
|
+
claude_plugins = ["nerftools-default@nerftools"]
|
|
618
|
+
```
|
|
476
619
|
|
|
477
620
|
### Built-in Catalog
|
|
478
621
|
|
|
@@ -528,7 +671,10 @@ forward-only and run automatically.
|
|
|
528
671
|
|
|
529
672
|
## Environment Variables
|
|
530
673
|
|
|
531
|
-
| Variable
|
|
532
|
-
|
|
|
533
|
-
| `
|
|
534
|
-
| `
|
|
674
|
+
| Variable | Description |
|
|
675
|
+
| -------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
676
|
+
| `AW_TAILSCALE_AUTH_KEY` | Tailscale auth key (skips prompt). Legacy `TAILSCALE_AUTH_KEY` still read; warns once. |
|
|
677
|
+
| `AW_GIT_CREDENTIALS_<CRED_NAME>` | Git credential for `<CRED_NAME>`. Legacy `GIT_CREDENTIALS_<CRED_NAME>` still read; warns. |
|
|
678
|
+
|
|
679
|
+
Legacy env-var names continue to work with a one-time deprecation warning per process per name, and
|
|
680
|
+
will be removed in a future release.
|