kanibako-cli 1.7.2rc5__tar.gz → 1.8.0.dev95__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.
- {kanibako_cli-1.7.2rc5/src/kanibako_cli.egg-info → kanibako_cli-1.8.0.dev95}/PKG-INFO +4 -4
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/README.md +196 -167
- kanibako_cli-1.8.0.dev95/pyproject.toml +106 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/__init__.py +11 -3
- kanibako_cli-1.8.0.dev95/src/kanibako/agent_config.py +86 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/agent_defaults.py +56 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/agent_ref.py +94 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/auth_browser.py +10 -20
- kanibako_cli-1.8.0.dev95/src/kanibako/box_supervisor.py +1091 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/browser_sidecar.py +1 -1
- kanibako_cli-1.8.0.dev95/src/kanibako/channels/__init__.py +34 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/channels}/channels.py +27 -18
- kanibako_cli-1.8.0.dev95/src/kanibako/channels/helper_client.py +261 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/channels}/helper_listener.py +66 -47
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/channels}/helpers.py +1 -1
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/cli.py +71 -56
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/agent_cmd.py +201 -121
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/archive.py +5 -5
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/baseline_cmd.py +5 -5
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/_duplicate.py +99 -46
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/_lifecycle.py +222 -554
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/_parser.py +441 -664
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/clean.py +37 -14
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/code_cmd.py +23 -35
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/diagnose.py +23 -23
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/flags.py +243 -3
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/fork_cmd.py +7 -5
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/helper_cmd.py +22 -18
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/image.py +11 -11
- kanibako_cli-1.8.0.dev95/src/kanibako/commands/install.py +33 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/restore.py +162 -10
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/setup_cmd.py +191 -79
- kanibako_cli-1.8.0.dev95/src/kanibako/commands/start.py +9567 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/stop.py +10 -4
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/system_cmd.py +114 -92
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/vault_cmd.py +2 -2
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/workset_cmd.py +252 -252
- kanibako_cli-1.8.0.dev95/src/kanibako/data/core-defaults.yaml +497 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/KICKOFF.md +2 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/COLLECTION.md +26 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/ROM_CONTENTS.md +23 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/box/directives/ROM_BOX.md +9 -0
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/rom/playbook/kanibako/directives/KANIBAKO.md → kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/general/directives/ROM_GENERAL.md +35 -21
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/workset/directives/ROM_WORKSET.md +9 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/agent_default/canon/handbook/directives/SYS_AGENT.md +15 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/canon/handbook/directives/SYS_BOX.md +11 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/notebook/MY_CONTENTS.md +21 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/notebook/directives/CONVENTIONS.md +91 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/workbook/devnotes.md +14 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/workbook/tasks.md +51 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/SYS_CONTENTS.md +26 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/SYS_GENERAL.md +37 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/rules/CANON.md +91 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/rules/DATAPOLICY.md +51 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/rules/INTERACTION.md +59 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/workset/canon/handbook/directives/SYS_WORKSET.md +49 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/data/keyspace-manifest.yaml +3110 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/errors.py +118 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/launch/__init__.py +48 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/box_resolve.py +41 -29
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/creds_watcher.py +22 -9
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/journal.py +2 -2
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/shells.py +1 -1
- kanibako_cli-1.8.0.dev95/src/kanibako/launch/templates.py +1252 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/persona_store.py +411 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/project/__init__.py +44 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/import_reconcile.py +11 -10
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/names.py +67 -21
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/registry_store.py +7 -5
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/workset.py +213 -24
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/workset_registry.py +1 -1
- kanibako_cli-1.8.0.dev95/src/kanibako/runtime/__init__.py +47 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/baseline.py +3 -3
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/container.py +253 -292
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/freshness.py +2 -2
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/image_sharing.py +15 -23
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_bundle.py +2 -2
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_registry.py +2 -2
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_resolve.py +6 -6
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_source.py +1 -1
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/templates_image.py +1 -1
- kanibako_cli-1.8.0.dev95/src/kanibako/scripts/helper-init.sh +72 -0
- {kanibako_cli-1.7.2rc5/src/kanibako/data/global/rom/playbook → kanibako_cli-1.8.0.dev95/src}/kanibako/scripts/import-directives.py +74 -4
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/__init__.py +137 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_config.py +235 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_defaults.py +820 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_file.py +711 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_representation.py +342 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_select.py +281 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/config.py +658 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_dest.py +547 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_display.py +392 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_interface.py +1241 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_io.py +238 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_keys.py +1053 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/core_defaults.py +943 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/defaults_inventory.py +470 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/kb_store.py +74 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/keyspace_manifest.py +63 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/keystore.py +170 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/keystore_strings.py +10 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/paths.py +1452 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/paths_defaults.py +137 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_assemble.py +645 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_categories.py +1179 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_cli_level.py +274 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_configset.py +281 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_expand.py +177 -25
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_keyspace.py +817 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_launch.py +2712 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_merge.py +69 -30
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_prefs.py +824 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_resolve.py +262 -45
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_views.py +205 -97
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/store_collapse.py +444 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings/store_shape.py +207 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/settings_resolve.py +109 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/snapshots.py +70 -5
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/targets/__init__.py +2 -2
- kanibako_cli-1.8.0.dev95/src/kanibako/targets/assembly.py +545 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/targets/base.py +1102 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/targets/credsync.py +2 -2
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/targets/no_agent.py +2 -2
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/tweakcc.py +4 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/utils.py +1 -1
- kanibako_cli-1.8.0.dev95/src/kanibako/vscode/__init__.py +26 -0
- kanibako_cli-1.8.0.dev95/src/kanibako/vscode/vscode_config.py +807 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/vscode}/vscode_remote.py +15 -7
- kanibako_cli-1.8.0.dev95/src/kanibako/vscode_config.py +140 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95/src/kanibako_cli.egg-info}/PKG-INFO +4 -4
- kanibako_cli-1.8.0.dev95/src/kanibako_cli.egg-info/SOURCES.txt +219 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/requires.txt +3 -3
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_agent_ref.py +135 -4
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_agent_resolution.py +75 -139
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_archive_restore_integration.py +33 -23
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_box_supervisor.py +518 -79
- kanibako_cli-1.8.0.dev95/tests/test_canon_delivery.py +1150 -0
- kanibako_cli-1.8.0.dev95/tests/test_canon_lifecycle_deletion.py +260 -0
- kanibako_cli-1.8.0.dev95/tests/test_categories_live.py +1486 -0
- kanibako_cli-1.8.0.dev95/tests/test_category_collisions.py +1720 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_cli.py +270 -142
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_cli_exitcodes.py +18 -54
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_comms.py +30 -34
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_create_recovery.py +209 -57
- kanibako_cli-1.8.0.dev95/tests/test_delivery_manifest.py +642 -0
- kanibako_cli-1.8.0.dev95/tests/test_env_cmd.py +226 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_error_messages.py +13 -13
- kanibako_cli-1.8.0.dev95/tests/test_explicit_create.py +558 -0
- kanibako_cli-1.8.0.dev95/tests/test_flawed_oracle.py +1211 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_fork.py +9 -9
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_helper_cmd.py +24 -24
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_import.py +11 -10
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_import_directives.py +125 -5
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_import_recovery.py +34 -29
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_init_cmd.py +249 -25
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_install_integration.py +8 -8
- kanibako_cli-1.8.0.dev95/tests/test_instructions_bind.py +533 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_lifecycle_integration.py +91 -10
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_meta_pin.py +3 -4
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_persona_config_set.py +31 -29
- kanibako_cli-1.8.0.dev95/tests/test_persona_store.py +628 -0
- kanibako_cli-1.8.0.dev95/tests/test_plugin_import_compat.py +314 -0
- kanibako_cli-1.8.0.dev95/tests/test_protected_tree_cleanup.py +143 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_resource_scoping.py +100 -51
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_safety_invariants.py +56 -13
- kanibako_cli-1.8.0.dev95/tests/test_seed_hostdest.py +613 -0
- kanibako_cli-1.8.0.dev95/tests/test_setup_cmd.py +553 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_snapshots.py +67 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_start_integration.py +10 -10
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_status.py +5 -5
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_tweakcc.py +65 -4
- kanibako_cli-1.7.2rc5/pyproject.toml +0 -72
- kanibako_cli-1.7.2rc5/src/kanibako/agent_config.py +0 -213
- kanibako_cli-1.7.2rc5/src/kanibako/agent_defaults.py +0 -262
- kanibako_cli-1.7.2rc5/src/kanibako/agent_ref.py +0 -185
- kanibako_cli-1.7.2rc5/src/kanibako/agent_representation.py +0 -229
- kanibako_cli-1.7.2rc5/src/kanibako/box_supervisor.py +0 -1709
- kanibako_cli-1.7.2rc5/src/kanibako/commands/install.py +0 -165
- kanibako_cli-1.7.2rc5/src/kanibako/commands/start.py +0 -5930
- kanibako_cli-1.7.2rc5/src/kanibako/config.py +0 -800
- kanibako_cli-1.7.2rc5/src/kanibako/config_interface.py +0 -2922
- kanibako_cli-1.7.2rc5/src/kanibako/config_io.py +0 -40
- kanibako_cli-1.7.2rc5/src/kanibako/core_defaults.py +0 -495
- kanibako_cli-1.7.2rc5/src/kanibako/data/core-defaults.yaml +0 -291
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/rom/playbook/kanibako/scripts/clear.py +0 -20
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/rom/playbook/kanibako/scripts/start.py +0 -50
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/CONTENTS.md +0 -11
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/agents/directives/AGENTS.md +0 -4
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/box/directives/BOX.md +0 -16
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/general/directives/GENERAL.md +0 -12
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/general/directives/rules/INTERACTION.md +0 -20
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/general/directives/rules/WORKPOLICY.md +0 -17
- kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/workset/directives/WORKSET.md +0 -4
- kanibako_cli-1.7.2rc5/src/kanibako/deprecation.py +0 -193
- kanibako_cli-1.7.2rc5/src/kanibako/errors.py +0 -57
- kanibako_cli-1.7.2rc5/src/kanibako/helper_client.py +0 -133
- kanibako_cli-1.7.2rc5/src/kanibako/paths.py +0 -2672
- kanibako_cli-1.7.2rc5/src/kanibako/persona_store.py +0 -357
- kanibako_cli-1.7.2rc5/src/kanibako/scripts/helper-init.sh +0 -45
- kanibako_cli-1.7.2rc5/src/kanibako/settings_assemble.py +0 -463
- kanibako_cli-1.7.2rc5/src/kanibako/settings_categories.py +0 -393
- kanibako_cli-1.7.2rc5/src/kanibako/settings_configset.py +0 -447
- kanibako_cli-1.7.2rc5/src/kanibako/settings_launch.py +0 -1706
- kanibako_cli-1.7.2rc5/src/kanibako/settings_store.py +0 -334
- kanibako_cli-1.7.2rc5/src/kanibako/shellenv.py +0 -75
- kanibako_cli-1.7.2rc5/src/kanibako/targets/assembly.py +0 -356
- kanibako_cli-1.7.2rc5/src/kanibako/targets/base.py +0 -807
- kanibako_cli-1.7.2rc5/src/kanibako/templates.py +0 -436
- kanibako_cli-1.7.2rc5/src/kanibako/vscode_config.py +0 -1335
- kanibako_cli-1.7.2rc5/src/kanibako_cli.egg-info/SOURCES.txt +0 -234
- kanibako_cli-1.7.2rc5/tests/test_agent_config.py +0 -412
- kanibako_cli-1.7.2rc5/tests/test_agent_representation.py +0 -511
- kanibako_cli-1.7.2rc5/tests/test_baseline.py +0 -137
- kanibako_cli-1.7.2rc5/tests/test_box_identity.py +0 -393
- kanibako_cli-1.7.2rc5/tests/test_box_resolve.py +0 -286
- kanibako_cli-1.7.2rc5/tests/test_channels.py +0 -261
- kanibako_cli-1.7.2rc5/tests/test_config.py +0 -828
- kanibako_cli-1.7.2rc5/tests/test_config_interface.py +0 -3611
- kanibako_cli-1.7.2rc5/tests/test_container.py +0 -1566
- kanibako_cli-1.7.2rc5/tests/test_container_extended.py +0 -444
- kanibako_cli-1.7.2rc5/tests/test_container_integration.py +0 -160
- kanibako_cli-1.7.2rc5/tests/test_containerfiles.py +0 -55
- kanibako_cli-1.7.2rc5/tests/test_creds_watcher.py +0 -281
- kanibako_cli-1.7.2rc5/tests/test_defaults_golden.py +0 -389
- kanibako_cli-1.7.2rc5/tests/test_delivery_manifest.py +0 -343
- kanibako_cli-1.7.2rc5/tests/test_deprecations.py +0 -203
- kanibako_cli-1.7.2rc5/tests/test_env_cmd.py +0 -96
- kanibako_cli-1.7.2rc5/tests/test_explicit_create.py +0 -204
- kanibako_cli-1.7.2rc5/tests/test_freshness.py +0 -542
- kanibako_cli-1.7.2rc5/tests/test_helper_client.py +0 -127
- kanibako_cli-1.7.2rc5/tests/test_helper_listener.py +0 -770
- kanibako_cli-1.7.2rc5/tests/test_helpers.py +0 -463
- kanibako_cli-1.7.2rc5/tests/test_hygiene.py +0 -753
- kanibako_cli-1.7.2rc5/tests/test_image_sharing.py +0 -573
- kanibako_cli-1.7.2rc5/tests/test_instructions_bind.py +0 -183
- kanibako_cli-1.7.2rc5/tests/test_journal.py +0 -212
- kanibako_cli-1.7.2rc5/tests/test_names.py +0 -1116
- kanibako_cli-1.7.2rc5/tests/test_paths.py +0 -1881
- kanibako_cli-1.7.2rc5/tests/test_paths_extended.py +0 -183
- kanibako_cli-1.7.2rc5/tests/test_persona_store.py +0 -539
- kanibako_cli-1.7.2rc5/tests/test_playbook_delivery.py +0 -211
- kanibako_cli-1.7.2rc5/tests/test_registry.py +0 -342
- kanibako_cli-1.7.2rc5/tests/test_registry_store.py +0 -423
- kanibako_cli-1.7.2rc5/tests/test_resolve_box_target.py +0 -231
- kanibako_cli-1.7.2rc5/tests/test_rig_bundle.py +0 -176
- kanibako_cli-1.7.2rc5/tests/test_rig_meta.py +0 -136
- kanibako_cli-1.7.2rc5/tests/test_rig_registry.py +0 -223
- kanibako_cli-1.7.2rc5/tests/test_rig_resolve.py +0 -281
- kanibako_cli-1.7.2rc5/tests/test_rig_source.py +0 -211
- kanibako_cli-1.7.2rc5/tests/test_settings_assemble.py +0 -846
- kanibako_cli-1.7.2rc5/tests/test_settings_categories.py +0 -1198
- kanibako_cli-1.7.2rc5/tests/test_settings_configset.py +0 -656
- kanibako_cli-1.7.2rc5/tests/test_settings_expand.py +0 -632
- kanibako_cli-1.7.2rc5/tests/test_settings_launch.py +0 -1715
- kanibako_cli-1.7.2rc5/tests/test_settings_launch_equivalence.py +0 -548
- kanibako_cli-1.7.2rc5/tests/test_settings_merge.py +0 -418
- kanibako_cli-1.7.2rc5/tests/test_settings_resolve.py +0 -391
- kanibako_cli-1.7.2rc5/tests/test_settings_store.py +0 -463
- kanibako_cli-1.7.2rc5/tests/test_settings_views.py +0 -372
- kanibako_cli-1.7.2rc5/tests/test_setup_cmd.py +0 -383
- kanibako_cli-1.7.2rc5/tests/test_shellenv.py +0 -169
- kanibako_cli-1.7.2rc5/tests/test_shells.py +0 -275
- kanibako_cli-1.7.2rc5/tests/test_standalone_paths.py +0 -568
- kanibako_cli-1.7.2rc5/tests/test_system_paths.py +0 -689
- kanibako_cli-1.7.2rc5/tests/test_templates.py +0 -611
- kanibako_cli-1.7.2rc5/tests/test_templates_image.py +0 -311
- kanibako_cli-1.7.2rc5/tests/test_vscode_remote.py +0 -470
- kanibako_cli-1.7.2rc5/tests/test_vscode_remote_dispatch.py +0 -205
- kanibako_cli-1.7.2rc5/tests/test_workset.py +0 -928
- kanibako_cli-1.7.2rc5/tests/test_workset_paths.py +0 -289
- kanibako_cli-1.7.2rc5/tests/test_workset_registry.py +0 -277
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/LICENSE.md +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/setup.cfg +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/__main__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/_atomic.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/auth_parser.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/box_lifecycle.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/browser_state.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/bun_sea.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/__init__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/__init__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/upgrade.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-android +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-dotnet +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-js +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-jvm +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-systems +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/__init__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/tmux.conf +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/data/__init__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/data/image-baseline.yaml +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/git.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/install_method.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/kuid.py +0 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/box_identity.py +0 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/hygiene.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/log.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/plugins/__init__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/py.typed +0 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/containerfiles.py +0 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/registry.py +0 -0
- {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_meta.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/scripts/__init__.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/scripts/kanibako-entry +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/scripts/kanibako-secrets.sh +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/tweakcc_cache.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/dependency_links.txt +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/entry_points.txt +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/top_level.txt +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_atomic.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_auth_browser.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_auth_parser.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_box_lifecycle.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_browser_sidecar.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_browser_state.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_bun_sea.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_credentials.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_git.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_kuid.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_log.py +0 -0
- {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kanibako-cli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0.dev95
|
|
4
4
|
Summary: Run AI coding agents in rootless containers with per-project isolation
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
License-File: LICENSE.md
|
|
@@ -8,10 +8,10 @@ Requires-Dist: argcomplete>=3.0
|
|
|
8
8
|
Requires-Dist: PyYAML>=6.0
|
|
9
9
|
Requires-Dist: packaging>=20.0
|
|
10
10
|
Provides-Extra: dev
|
|
11
|
-
Requires-Dist: pytest
|
|
11
|
+
Requires-Dist: pytest==9.0.2; extra == "dev"
|
|
12
12
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
13
|
-
Requires-Dist: mypy; extra == "dev"
|
|
14
|
-
Requires-Dist: ruff; extra == "dev"
|
|
13
|
+
Requires-Dist: mypy==1.19.1; extra == "dev"
|
|
14
|
+
Requires-Dist: ruff==0.15.5; extra == "dev"
|
|
15
15
|
Requires-Dist: bump2version; extra == "dev"
|
|
16
16
|
Requires-Dist: pexpect>=4.8; extra == "dev"
|
|
17
17
|
Dynamic: license-file
|
|
@@ -21,174 +21,119 @@ No Docker or Podman experience required. Just `cd` into a project and run
|
|
|
21
21
|
Claude Code, Codex, and Goose ship as first-class agent plugins (all installed
|
|
22
22
|
by the `kanibako` meta-package); other agents can be added as plugins.
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Quick Start
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- **Session continuity** -- `kanibako start` defaults to `--continue`, picking
|
|
31
|
-
up where you left off; persistent tmux sessions survive SSH disconnects
|
|
32
|
-
- **Per-box isolation** -- each box gets its own home, config, and
|
|
33
|
-
credentials (three modes: primary, workset/named, standalone)
|
|
34
|
-
- **Credential forwarding** -- host credentials are synced into the box
|
|
35
|
-
and written back after each session
|
|
36
|
-
- **Setup wizard** -- `kanibako setup` detects installed agents, checks your
|
|
37
|
-
container runtime, and lets you pick a default agent (the only interactive
|
|
38
|
-
prompt in the CLI); no manual configuration needed
|
|
39
|
-
- **Diagnostics** -- `kanibako system diagnose` checks runtime, images,
|
|
40
|
-
agents, and storage; `box diagnose` and `rig diagnose` drill into specific
|
|
41
|
-
scopes
|
|
42
|
-
- **Vault snapshots** -- per-box read-only and read-write shared
|
|
43
|
-
directories with smart snapshot strategy detection (reflink, hardlink,
|
|
44
|
-
or tar.xz depending on filesystem)
|
|
45
|
-
- **Shell customization** -- per-box environment variables (`box set
|
|
46
|
-
env.*`), drop-in init scripts (`shell.d/`), and layered seed-once home
|
|
47
|
-
templates
|
|
48
|
-
- **Agent configuration** -- per-agent YAML config with default args, state
|
|
49
|
-
knobs, env vars, and shared caches; per-box setting overrides via
|
|
50
|
-
`box set`
|
|
51
|
-
- **Shared caches** -- global download caches (pip, cargo, npm, etc.)
|
|
52
|
-
shared across boxes; agent-level caches via the agent config
|
|
53
|
-
- **Plugin system** -- agent-agnostic core (`kanibako-cli`); Claude/Codex/Goose
|
|
54
|
-
plugins (`kanibako-agent-*`) ship with the meta-package; descriptor-only
|
|
55
|
-
three-tier discovery (entry points, user directory, project directory)
|
|
56
|
-
- **Rig freshness checks** -- non-blocking digest comparison against GHCR
|
|
57
|
-
on startup (24h cache)
|
|
58
|
-
- **Helper spawning** -- spawn child agent instances for parallel workloads
|
|
59
|
-
with budget-controlled depth and breadth
|
|
60
|
-
- **Concurrency lock** -- prevents two sessions from running in the same
|
|
61
|
-
project simultaneously
|
|
62
|
-
|
|
63
|
-
## Prerequisites
|
|
26
|
+
```bash
|
|
27
|
+
# Install & Setup
|
|
28
|
+
pipx install kanibako # uv and pip also work!
|
|
29
|
+
kanibako setup
|
|
64
30
|
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
installed; Kanibako manages all container operations automatically
|
|
68
|
-
- An AI coding agent installed on the host (e.g.
|
|
69
|
-
[Claude Code](https://docs.anthropic.com/en/docs/claude-code))
|
|
31
|
+
# Create a box for your project - a one-time step per project 'box':
|
|
32
|
+
cd ~/my-project && kanibako create
|
|
70
33
|
|
|
71
|
-
|
|
34
|
+
# Launch the agent session -- that's it!
|
|
35
|
+
kanibako
|
|
72
36
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
> ships, drop the flag.
|
|
37
|
+
# Optional - launch in VS Code (new, experimental):
|
|
38
|
+
kanibako code
|
|
39
|
+
```
|
|
77
40
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
41
|
+
## Features
|
|
42
|
+
|
|
43
|
+
- **Seamless Isolation** -- rootless containers with no host access, so its safe to give agents autonomy
|
|
44
|
+
- **Automatic Sandboxing** -- no Docker or Podman experience required - it's all automated
|
|
45
|
+
- **Session Continuity** -- `kanibako start` by default to picks up where you left off
|
|
46
|
+
- **Painless Persistence** -- boxes launch in tmux by default - so you can detach and leave agents running
|
|
47
|
+
- **Credential Forwarding** -- host credentials optionally synced into the box from host
|
|
48
|
+
- **Customized, Per-Box** -- each box gets its own home, config, & credentials (multiple sharing modes)
|
|
49
|
+
- **Layered Customizations** -- per box/workset/agent and global customizations (settings, scripts, etc.)
|
|
50
|
+
- **Nuanced Custrols** --per box/workset/agent and global environment, mount, and share controls
|
|
51
|
+
- **Helper / Subagents** -- subagent spawning system for distributed workloads
|
|
52
|
+
- **Diagnostics** -- `kanibako system diagnose` (runtime, images, agents, & storage)
|
|
53
|
+
- **Plugins** -- agent-agnostic core (`kanibako-cli`) with custom plguin system for others harnesses
|
|
54
|
+
|
|
55
|
+
## Using Kanibako
|
|
56
|
+
See the [Quick Start](#quick-start) Guide for get started right away; below are the nitty-gritty details.
|
|
83
57
|
|
|
84
|
-
|
|
85
|
-
pip install --pre kanibako-cli
|
|
58
|
+
### Prerequisites
|
|
86
59
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
60
|
+
- Python 3.11+
|
|
61
|
+
- [Podman](https://podman.io/) 4.3+ (recommended) or Docker (Containers managed automatically)
|
|
62
|
+
- An agent harness or full agent system (e.g., Claude Code, Codex, or Goose)
|
|
63
|
+
|
|
64
|
+
### Install from Source
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
git clone https://github.com/doctorjei/kanibako-cli.git
|
|
68
|
+
cd kanibako-cli
|
|
90
69
|
pip install -e '.[dev]' -e packages/agent-claude/ -e packages/agent-codex/ -e packages/agent-goose/
|
|
91
70
|
```
|
|
92
71
|
|
|
93
72
|
On first use, Kanibako automatically creates its config and data directories.
|
|
94
73
|
Run `kanibako setup` to verify your environment and pick a default agent. If you
|
|
95
|
-
have **more than one** agent installed (the meta-package ships all three),
|
|
96
|
-
**must** choose one — either with `setup` or per-run with `--agent <name>` —
|
|
74
|
+
have **more than one** agent harness installed (the meta-package ships all three),
|
|
75
|
+
you **must** choose one — either with `setup` or per-run with `--agent <name>` —
|
|
97
76
|
otherwise `kanibako` will error rather than guess. With a single agent installed
|
|
98
77
|
it is used automatically. See [Agent Selection](#agent-selection).
|
|
99
78
|
|
|
100
|
-
|
|
79
|
+
No `docker run`, no volume flags, no Containerfile. The first launch pulls the
|
|
80
|
+
container rig and copies in your agent credentials; after that, `kanibako` in the
|
|
81
|
+
same directory picks up right where you left off.
|
|
101
82
|
|
|
102
|
-
|
|
103
|
-
# Create a box for the current directory (a deliberate, one-time step)
|
|
104
|
-
cd ~/my-project
|
|
105
|
-
kanibako create
|
|
83
|
+
More ways to launch:
|
|
106
84
|
|
|
107
|
-
|
|
108
|
-
kanibako
|
|
109
|
-
|
|
110
|
-
#
|
|
111
|
-
kanibako --
|
|
112
|
-
|
|
113
|
-
# Open a plain bash shell (no agent)
|
|
114
|
-
kanibako shell
|
|
115
|
-
|
|
116
|
-
# Run a one-shot command in the container
|
|
117
|
-
kanibako shell -- echo hello
|
|
118
|
-
|
|
119
|
-
# Start a new conversation
|
|
120
|
-
kanibako -N
|
|
85
|
+
```bash
|
|
86
|
+
kanibako -N # start a fresh conversation
|
|
87
|
+
kanibako shell # plain bash shell, no agent
|
|
88
|
+
kanibako shell -- echo hello # run a one-shot command in the box
|
|
89
|
+
kanibako --agent codex # choose the agent for this run
|
|
90
|
+
kanibako --image kanibako-min:latest # launch on a specific rig
|
|
121
91
|
```
|
|
122
92
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
`shell`) never invents a box, so a typo'd project or wrong directory can't
|
|
126
|
-
silently make one. On the first launch of a box, Kanibako pulls the container
|
|
127
|
-
rig and syncs your credentials; subsequent runs pick up where you left off.
|
|
93
|
+
Creating a box is deliberate: a launch (`kanibako` / `start` / `code` / `shell`)
|
|
94
|
+
never invents one, so a typo'd path or wrong directory can't silently make a box.
|
|
128
95
|
|
|
129
|
-
|
|
96
|
+
### Example: Python Project
|
|
130
97
|
|
|
131
98
|
The default `kanibako-oci` rig (based on droste-fiber) includes Python, git,
|
|
132
99
|
gh, nano, jq, ripgrep, tmux, Podman, and common dev tools. This is enough for
|
|
133
100
|
most Python, JavaScript, and general scripting work.
|
|
134
101
|
|
|
135
102
|
```bash
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
#
|
|
140
|
-
|
|
141
|
-
git init
|
|
142
|
-
# (or: git clone https://github.com/you/my-flask-app.git && cd my-flask-app)
|
|
143
|
-
|
|
144
|
-
# 3. Create the box for this project (explicit, one-time)
|
|
145
|
-
kanibako create
|
|
146
|
-
|
|
147
|
-
# 4. Launch -- that's it
|
|
148
|
-
kanibako
|
|
103
|
+
pipx install kanibako # installation
|
|
104
|
+
mkdir ~/my-flask-app && cd ~/my-flask-app # Create project
|
|
105
|
+
git init # New git repo (alt: clone a project)
|
|
106
|
+
kanibako create # Create new box for project (one-time)
|
|
107
|
+
kanibako # launch (app done!)
|
|
149
108
|
```
|
|
150
109
|
|
|
151
|
-
`kanibako create`
|
|
152
|
-
first launch, Kanibako will:
|
|
110
|
+
`kanibako create` builds an isolated environment. On first launch, Kanibako will automatically...
|
|
153
111
|
- Pull the base container rig (once, cached afterwards)
|
|
154
112
|
- Copy your agent credentials into the sandbox
|
|
155
113
|
- Drop you into an agent session inside the container
|
|
156
114
|
|
|
157
|
-
The agent sees your project files in `~/workspace/` and has full access to
|
|
158
|
-
|
|
159
|
-
and agent state are preserved -- next time you run `kanibako` in the same
|
|
160
|
-
directory, it picks up where you left off.
|
|
115
|
+
The agent sees your project files in `~/workspace/` and has full access to standard tools. On exit,
|
|
116
|
+
project files and agent state are preserved; on next run, `kanibako` will pick up where you left off.
|
|
161
117
|
|
|
162
118
|
```bash
|
|
163
|
-
#
|
|
119
|
+
# Come back to the same project latyer...
|
|
164
120
|
cd ~/my-flask-app
|
|
165
121
|
kanibako # resumes your previous session
|
|
166
122
|
kanibako -N # or start a fresh conversation
|
|
167
123
|
```
|
|
168
124
|
|
|
169
|
-
|
|
125
|
+
### Example: C/Rust Project (custom rig)
|
|
170
126
|
|
|
171
|
-
For projects that need compiled languages, create a custom rig with
|
|
172
|
-
toolchains you need:
|
|
127
|
+
For projects that need compiled languages, create a custom rig with needed tools:
|
|
173
128
|
|
|
174
129
|
```bash
|
|
175
|
-
#
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
# 2. Create the box for your project, pinned to that rig (explicit, one-time)
|
|
180
|
-
cd ~/my-rust-project
|
|
181
|
-
kanibako create --image kanibako-template-systems
|
|
182
|
-
|
|
183
|
-
# 3. Launch
|
|
184
|
-
kanibako
|
|
130
|
+
kanibako rig prep systems # Build bundled C/C++ + Rust toolchain template
|
|
131
|
+
cd ~/my-rust-project # Enter the project directory
|
|
132
|
+
kanibako create --image kanibako-template-systems # Create a box using the systems template
|
|
133
|
+
kanibako # Start & enter the box
|
|
185
134
|
```
|
|
186
135
|
|
|
187
|
-
|
|
188
|
-
`kanibako` next time.
|
|
189
|
-
|
|
190
|
-
See [Container Rigs](#container-rigs) for the base rigs and custom rig
|
|
191
|
-
creation.
|
|
136
|
+
See [Container Rigs](#container-rigs) for the base rigs and custom rig creation.
|
|
192
137
|
|
|
193
138
|
## Commands
|
|
194
139
|
|
|
@@ -235,7 +180,7 @@ shortcuts for common operations:
|
|
|
235
180
|
|
|
236
181
|
| Subcommand | Description |
|
|
237
182
|
|------------|-------------|
|
|
238
|
-
| `box create [path]` | Create project (`--name`, `--standalone`, `--image`, `--no-vault`, `--
|
|
183
|
+
| `box create [path]` | Create project (`--name`, `--standalone`, `--register`, `--image`/`--rig`, `--no-vault`, `--private`, `--allow-home`, `--agent`) |
|
|
239
184
|
| `box list` / `box ls` | List projects (`--all`, `--orphan`, `-q`) |
|
|
240
185
|
| `box info` / `box inspect` | Project details (mode, paths, lock, rig) |
|
|
241
186
|
| `box rm` / `box delete` | Remove project (`--purge` deletes metadata, `--force` skips confirm) |
|
|
@@ -320,9 +265,16 @@ The runtime helper and fork verbs (formerly under `crab`) now live under `box`:
|
|
|
320
265
|
|------------|-------------|
|
|
321
266
|
| `system info` / `system inspect` | System details (version, runtime, paths) |
|
|
322
267
|
| `system set` / `system get` / `system show` / `system reset` | View or modify global configuration |
|
|
268
|
+
| `system defaults` | List every default kanibako ships, with its scope and source |
|
|
323
269
|
| `system upgrade` | Self-update (`--check` for dry run) |
|
|
324
270
|
| `system diagnose` | Check system health (runtime, images, agents, storage) |
|
|
325
271
|
|
|
272
|
+
## Preview / Experimental Features
|
|
273
|
+
- **Vault snapshots** -- per-box read-only and read-write shared
|
|
274
|
+
directories with smart snapshot strategy detection (reflink, hardlink,
|
|
275
|
+
or tar.xz depending on filesystem)
|
|
276
|
+
- Build rigs interactively with: kanibako rig extend my-systems --from kanibako-oci)
|
|
277
|
+
|
|
326
278
|
## VS Code Integration
|
|
327
279
|
|
|
328
280
|
> **⚠ Experimental.** VS Code integration is **experimental** in this release.
|
|
@@ -416,7 +368,7 @@ context.
|
|
|
416
368
|
|
|
417
369
|
| Flag | Description |
|
|
418
370
|
|------|-------------|
|
|
419
|
-
| `-e, --env
|
|
371
|
+
| `-e, --env VAR=VALUE` | Set a per-run environment variable, overriding the key that owns it (repeatable; a malformed item refuses the launch) |
|
|
420
372
|
| `--image IMAGE` | Container rig override |
|
|
421
373
|
| `--entrypoint CMD` | Override container entrypoint |
|
|
422
374
|
| `--persistent` | Use tmux session wrapper (default) |
|
|
@@ -424,6 +376,18 @@ context.
|
|
|
424
376
|
| `--no-helpers` | Disable helper spawning |
|
|
425
377
|
| `--no-auto-auth` | Disable automated browser-based OAuth refresh |
|
|
426
378
|
| `--browser` | Launch a headless browser sidecar (`BROWSER_WS_ENDPOINT` injected) |
|
|
379
|
+
| `--restart` | Stop the box first, then start it fresh (`start` only) — the way to apply flags to a box that is already running |
|
|
380
|
+
|
|
381
|
+
⚑ **Against a box that is already RUNNING, most of these are refused, not applied.** A running
|
|
382
|
+
container keeps the creation-time settings and the agent session it was launched with, so
|
|
383
|
+
`--image`, `-e` (except where something in the box will actually apply it, below), `--no-helpers`,
|
|
384
|
+
`--no-auto-auth`, `--browser`, `--share-images`, an explicit `--persistent`/`--ephemeral`, and the
|
|
385
|
+
agent flags `-N -C -R -M -A -S` produce an error naming the cure rather than being silently
|
|
386
|
+
dropped. Use `kanibako --restart [box]` to stop and relaunch with them in force. Two exceptions:
|
|
387
|
+
`--detach`/`--print-container`/`--warm-only` are honoured; and anything that starts a **second
|
|
388
|
+
process inside the running box** — `--entrypoint CMD`, or `kanibako shell --persistent` at a box
|
|
389
|
+
that is running an agent — runs with `-e` applied, so `-e` is refused only where nothing would
|
|
390
|
+
apply it.
|
|
427
391
|
|
|
428
392
|
### Global Flags
|
|
429
393
|
|
|
@@ -465,9 +429,14 @@ Which agent a command uses is resolved by a single cascade (highest precedence
|
|
|
465
429
|
first):
|
|
466
430
|
|
|
467
431
|
```
|
|
468
|
-
--agent > box
|
|
432
|
+
--agent > box pref > workset pref > system.agent
|
|
469
433
|
```
|
|
470
434
|
|
|
435
|
+
A box or workset REQUESTS an agent with `pref.system.agent` (a request to set a key
|
|
436
|
+
that resolves earlier than the file making it); `system.agent` is the host-global
|
|
437
|
+
default and `--agent` is the ephemeral per-launch override. `kanibako create --agent
|
|
438
|
+
<name>` persists the request into the new box, so a plain `kanibako start` runs it.
|
|
439
|
+
|
|
471
440
|
If a name resolves, it is used (and an error is raised if that agent's plugin
|
|
472
441
|
isn't installed). If **nothing** resolves, the **installed-agent count** decides --
|
|
473
442
|
with no ordering and no tie-break:
|
|
@@ -491,7 +460,7 @@ when no agent is configured.
|
|
|
491
460
|
|
|
492
461
|
### Choosing a default agent
|
|
493
462
|
|
|
494
|
-
`kanibako setup` is where you pick the host-global default (`system.
|
|
463
|
+
`kanibako setup` is where you pick the host-global default (`system.agent`).
|
|
495
464
|
On a TTY it shows a numbered menu of detected agents (the only interactive prompt in
|
|
496
465
|
the CLI); `setup --agent <name>` sets it non-interactively. A "skip" option is
|
|
497
466
|
offered -- with 2+ agents it warns that a bare launch will then fail and asks you to
|
|
@@ -577,6 +546,17 @@ kanibako create --standalone # in the current directory
|
|
|
577
546
|
kanibako create --standalone ~/myproj # create and initialize a new directory
|
|
578
547
|
```
|
|
579
548
|
|
|
549
|
+
A standalone box is **unregistered by default** -- it carries its own identity
|
|
550
|
+
in-tree, so it needs no registry entry and can be moved or copied anywhere.
|
|
551
|
+
The registry entry is only a shortcut for addressing the box **by name from
|
|
552
|
+
another directory**; add it at create time with `--register` (which is also
|
|
553
|
+
what makes `--name` meaningful), or later with `kanibako box register <path>`.
|
|
554
|
+
|
|
555
|
+
```bash
|
|
556
|
+
kanibako create --standalone --register --name myproj ~/myproj
|
|
557
|
+
kanibako box register ~/myproj # or opt in afterwards
|
|
558
|
+
```
|
|
559
|
+
|
|
580
560
|
```
|
|
581
561
|
{project}/ ← project root
|
|
582
562
|
├── settings.yaml ← box metadata (at the root)
|
|
@@ -721,23 +701,27 @@ Set per-project or global environment variables that are passed to the
|
|
|
721
701
|
container:
|
|
722
702
|
|
|
723
703
|
```bash
|
|
724
|
-
# Persistent (stored in
|
|
725
|
-
kanibako box set env.EDITOR=vim
|
|
726
|
-
kanibako
|
|
727
|
-
kanibako
|
|
704
|
+
# Persistent (stored in the scope's settings file)
|
|
705
|
+
kanibako box set box.env.EDITOR=vim # box-level
|
|
706
|
+
kanibako workset set workset.env.EDITOR=vim # workset-level
|
|
707
|
+
kanibako system set system.env.EDITOR=nano # global (all boxes)
|
|
708
|
+
kanibako box get box.env.EDITOR # show one value
|
|
728
709
|
|
|
729
710
|
# Per-run (not persisted)
|
|
730
711
|
kanibako start -e EDITOR=vim -e DEBUG=1
|
|
731
712
|
```
|
|
732
713
|
|
|
733
|
-
|
|
714
|
+
The scope is part of the key: `<scope>.env.<VAR>`, where `<scope>` is
|
|
715
|
+
`system`, `workset` or `box` (an agent's own vars are
|
|
716
|
+
`agent.<agent>.env.<VAR>`). The most specific scope wins, so a box var
|
|
717
|
+
overrides a workset one, which overrides the global one.
|
|
734
718
|
|
|
735
719
|
### Custom prompt
|
|
736
720
|
|
|
737
721
|
The shell prompt is controlled by the `KANIBAKO_PS1` environment variable:
|
|
738
722
|
|
|
739
723
|
```bash
|
|
740
|
-
kanibako box set env.KANIBAKO_PS1="(myproject) \u:\w\$ "
|
|
724
|
+
kanibako box set box.env.KANIBAKO_PS1="(myproject) \u:\w\$ "
|
|
741
725
|
```
|
|
742
726
|
|
|
743
727
|
### Init scripts
|
|
@@ -787,9 +771,9 @@ tweakcc:
|
|
|
787
771
|
- `tweakcc:` -- optional tweakcc integration for binary patching
|
|
788
772
|
(see [docs/tweakcc.md](docs/tweakcc.md))
|
|
789
773
|
|
|
790
|
-
Per-agent
|
|
791
|
-
`agent.<agent>.caches
|
|
792
|
-
(`agents/<agent>/{
|
|
774
|
+
Per-agent common dirs/caches are declared by the plugin (`agent.<agent>.common` /
|
|
775
|
+
`agent.<agent>.caches` — one key per category, holding a map keyed by box destination) and
|
|
776
|
+
served from the per-agent store dir (`agents/<agent>/{common,caches}/<name>`).
|
|
793
777
|
|
|
794
778
|
Manage agent settings via the CLI:
|
|
795
779
|
|
|
@@ -799,39 +783,56 @@ kanibako agent get claude model # show the agent's model
|
|
|
799
783
|
kanibako agent set claude model=sonnet # set agent-level default
|
|
800
784
|
```
|
|
801
785
|
|
|
802
|
-
##
|
|
786
|
+
## Box Templates
|
|
787
|
+
|
|
788
|
+
Box templates provide **layered seed-once** initialization for a new box.
|
|
789
|
+
Three layers are copied into the box STORE in order (later overlays earlier;
|
|
790
|
+
absent layers are skipped), **once** -- edits you make inside a box afterward
|
|
791
|
+
are never overwritten.
|
|
803
792
|
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
earlier; absent layers are skipped), **once** -- edits you make inside a box
|
|
807
|
-
afterward are never overwritten:
|
|
793
|
+
Each layer has a `box/` subtree with the same two entries, and each entry has
|
|
794
|
+
its own destination:
|
|
808
795
|
|
|
809
796
|
```
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
797
|
+
-> <box_dir>/home (delivered at ~/)
|
|
798
|
+
1. system @system.template/box/... -> <box_dir>/canon/handbook
|
|
799
|
+
2. agent @agent.<agent>.template/box/... (= agents/<agent>/template/box; if an agent is set)
|
|
800
|
+
3. workset @workset.template/box/... (= <wsroot>/template/box; optional, primary/named)
|
|
813
801
|
```
|
|
814
802
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
803
|
+
- `box/home/**` seeds the box HOME -- what you see at `~/` inside the box,
|
|
804
|
+
including `~/canon/notebook` and `~/canon/workbook`, the two books the box
|
|
805
|
+
owns and can write.
|
|
806
|
+
- `box/canon/handbook/**` seeds the box's HANDBOOK CHAPTER at `@box.canon`,
|
|
807
|
+
which is a **sibling** of the home, not inside it. It is bound back into the
|
|
808
|
+
box read-only at `~/canon/handbook/box`.
|
|
809
|
+
|
|
810
|
+
⚑ `@box.canon` is not `~/canon`: the first is the box's contribution to the
|
|
811
|
+
canon (on the host), the second is the assembled canon (in the box).
|
|
812
|
+
|
|
813
|
+
Per-file rule: plain ordered copy, **last layer wins**, seed-once. There is no
|
|
814
|
+
per-file merge of any file.
|
|
819
815
|
|
|
820
816
|
The old shell-variant selector (`crab.shell` / `template_name`) is gone -- there
|
|
821
817
|
is one fixed `template/` dir per agent, with no variant subdirectory. `box.shell`
|
|
822
818
|
now means only the login shell (see [Configuration](#configuration)).
|
|
823
819
|
|
|
824
|
-
**Example agent
|
|
820
|
+
**Example agent store layout** (for agent `claude`):
|
|
825
821
|
|
|
826
822
|
```
|
|
827
|
-
agents/claude/
|
|
828
|
-
|-
|
|
829
|
-
|
|
|
830
|
-
'-
|
|
823
|
+
agents/claude/
|
|
824
|
+
|- template/box/home/
|
|
825
|
+
| |- .claude/
|
|
826
|
+
| | '- settings.json
|
|
827
|
+
| '- .claude.json
|
|
828
|
+
'- canon/handbook/
|
|
829
|
+
'- directives/
|
|
830
|
+
'- SYS_AGENT.md # this agent's handbook chapter
|
|
831
831
|
```
|
|
832
832
|
|
|
833
|
-
To ship custom per-agent config into boxes, put it
|
|
834
|
-
|
|
833
|
+
To ship custom per-agent config into boxes, put it under that agent's
|
|
834
|
+
`template/box/home/`; it seeds via layer 2. To give the agent its own standing
|
|
835
|
+
directives, put them under `canon/handbook/`.
|
|
835
836
|
|
|
836
837
|
## Vault
|
|
837
838
|
|
|
@@ -843,9 +844,21 @@ inside the box at `~/vault/ro` and `~/vault/rw`:
|
|
|
843
844
|
- **vault/rw/** -- files that persist across sessions and can be modified
|
|
844
845
|
(databases, build caches, generated artifacts)
|
|
845
846
|
|
|
846
|
-
The host-side vault lives under the workset (`vault/{ro,rw}/<box>`)
|
|
847
|
-
|
|
848
|
-
|
|
847
|
+
The host-side vault lives under the workset (`vault/{ro,rw}/<box>`).
|
|
848
|
+
|
|
849
|
+
A box can hide any guest path it likes with a **mask** — an empty tmpfs mounted
|
|
850
|
+
over that path, so whatever the box home holds there is not visible inside the
|
|
851
|
+
box at all:
|
|
852
|
+
|
|
853
|
+
```yaml
|
|
854
|
+
box:
|
|
855
|
+
masks:
|
|
856
|
+
"~/private": true
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
No mask is applied by default. (Before 1.6.0 the vault lived inside the
|
|
860
|
+
workspace and `~/workspace/vault` was masked automatically; the vault moved out,
|
|
861
|
+
so there is nothing in `~/workspace` left to hide.)
|
|
849
862
|
|
|
850
863
|
### Snapshots
|
|
851
864
|
|
|
@@ -962,10 +975,11 @@ kanibako system set model=opus
|
|
|
962
975
|
kanibako system reset --all # reset all global settings
|
|
963
976
|
```
|
|
964
977
|
|
|
965
|
-
`
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
978
|
+
`system.*` LAYOUT-PATH keys are **file-only**: the CLI shows them but refuses to
|
|
979
|
+
set/reset them, pointing you at the config file. `system.agent` is NOT one of those —
|
|
980
|
+
it is an ordinary system-scope setting, so `kanibako system set
|
|
981
|
+
system.agent=<name>` works (as does `kanibako setup`). Edit structural paths in
|
|
982
|
+
`~/.config/kanibako_config.yaml` directly.
|
|
969
983
|
|
|
970
984
|
### Files
|
|
971
985
|
|
|
@@ -976,7 +990,10 @@ All kanibako config/settings files are YAML.
|
|
|
976
990
|
- **Workset settings**: `<workset_root>/settings.yaml`
|
|
977
991
|
- **Per-agent settings**: `$XDG_DATA_HOME/kanibako/agents/{agent}/settings.yaml`
|
|
978
992
|
- **Per-box settings**: `boxes/{name}/settings.yaml` (standalone: `<root>/settings.yaml`)
|
|
979
|
-
- **
|
|
993
|
+
- **Template root**: `$XDG_DATA_HOME/kanibako/global/template/` (the `box`,
|
|
994
|
+
`workset` and `agent` moulds new stores are stamped from)
|
|
995
|
+
- **System handbook**: `$XDG_DATA_HOME/kanibako/global/canon/handbook/` -- your
|
|
996
|
+
own system-wide directives, delivered read-only into every box
|
|
980
997
|
|
|
981
998
|
### Common settings keys
|
|
982
999
|
|
|
@@ -992,9 +1009,11 @@ All kanibako config/settings files are YAML.
|
|
|
992
1009
|
| `group_auth` | `true` | Shared credentials across the group (`true`) vs. per-box (`false`) |
|
|
993
1010
|
| `enable_vault` | `true` | Enable vault directories |
|
|
994
1011
|
| `env.*` | | Persistent environment variables (`<scope>.env.<VAR>`) |
|
|
995
|
-
| `<scope>.bindings.ro
|
|
996
|
-
| `<scope>.caches
|
|
997
|
-
| `<scope>.
|
|
1012
|
+
| `<scope>.bindings.ro` / `.rw` | | Scoped bind-mounts. ⚑ **Settings-file only** — one key per arm, holding a map keyed by box destination. There is no `.<name>` sub-key and no `config set` route; `config get` reads it |
|
|
1013
|
+
| `<scope>.caches` | | Scoped cache mounts — same shape: one key, `{box_dest: [host_src[, options]]}`, settings-file only |
|
|
1014
|
+
| `<scope>.common` | | Shared dirs mounted rw — same shape |
|
|
1015
|
+
| `<scope>.seeded` | | Copy-once seeds applied at box init — same shape; a COPY, not a mount |
|
|
1016
|
+
| `<scope>.synced` | | Per-launch mtime-gated copies — same shape; a COPY, not a mount |
|
|
998
1017
|
|
|
999
1018
|
### Global config file
|
|
1000
1019
|
|
|
@@ -1114,6 +1133,16 @@ kanibako start myproject
|
|
|
1114
1133
|
# Reattach later:
|
|
1115
1134
|
kanibako start myproject
|
|
1116
1135
|
|
|
1136
|
+
# A reattach does ONLY what reattaching needs: it does not rebuild or pull an
|
|
1137
|
+
# image, probe the launch baseline, or verify a persona endpoint over the
|
|
1138
|
+
# network -- none of which could affect the session it is attaching to.
|
|
1139
|
+
# Flags that the running container cannot adopt are refused rather than
|
|
1140
|
+
# ignored; restart the box to apply them:
|
|
1141
|
+
kanibako --restart -N myproject # stop, then start a NEW conversation
|
|
1142
|
+
|
|
1143
|
+
# Run a command as a second process inside the running box:
|
|
1144
|
+
kanibako start --entrypoint htop myproject
|
|
1145
|
+
|
|
1117
1146
|
# Start without tmux (session dies when terminal closes)
|
|
1118
1147
|
kanibako start --ephemeral myproject
|
|
1119
1148
|
|