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.
Files changed (321) hide show
  1. {kanibako_cli-1.7.2rc5/src/kanibako_cli.egg-info → kanibako_cli-1.8.0.dev95}/PKG-INFO +4 -4
  2. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/README.md +196 -167
  3. kanibako_cli-1.8.0.dev95/pyproject.toml +106 -0
  4. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/__init__.py +11 -3
  5. kanibako_cli-1.8.0.dev95/src/kanibako/agent_config.py +86 -0
  6. kanibako_cli-1.8.0.dev95/src/kanibako/agent_defaults.py +56 -0
  7. kanibako_cli-1.8.0.dev95/src/kanibako/agent_ref.py +94 -0
  8. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/auth_browser.py +10 -20
  9. kanibako_cli-1.8.0.dev95/src/kanibako/box_supervisor.py +1091 -0
  10. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/browser_sidecar.py +1 -1
  11. kanibako_cli-1.8.0.dev95/src/kanibako/channels/__init__.py +34 -0
  12. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/channels}/channels.py +27 -18
  13. kanibako_cli-1.8.0.dev95/src/kanibako/channels/helper_client.py +261 -0
  14. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/channels}/helper_listener.py +66 -47
  15. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/channels}/helpers.py +1 -1
  16. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/cli.py +71 -56
  17. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/agent_cmd.py +201 -121
  18. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/archive.py +5 -5
  19. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/baseline_cmd.py +5 -5
  20. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/_duplicate.py +99 -46
  21. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/_lifecycle.py +222 -554
  22. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/_parser.py +441 -664
  23. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/clean.py +37 -14
  24. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/code_cmd.py +23 -35
  25. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/diagnose.py +23 -23
  26. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/flags.py +243 -3
  27. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/fork_cmd.py +7 -5
  28. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/helper_cmd.py +22 -18
  29. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/image.py +11 -11
  30. kanibako_cli-1.8.0.dev95/src/kanibako/commands/install.py +33 -0
  31. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/restore.py +162 -10
  32. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/setup_cmd.py +191 -79
  33. kanibako_cli-1.8.0.dev95/src/kanibako/commands/start.py +9567 -0
  34. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/stop.py +10 -4
  35. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/system_cmd.py +114 -92
  36. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/vault_cmd.py +2 -2
  37. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/workset_cmd.py +252 -252
  38. kanibako_cli-1.8.0.dev95/src/kanibako/data/core-defaults.yaml +497 -0
  39. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/KICKOFF.md +2 -0
  40. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/COLLECTION.md +26 -0
  41. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/ROM_CONTENTS.md +23 -0
  42. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/box/directives/ROM_BOX.md +9 -0
  43. 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
  44. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/rom/bible/workset/directives/ROM_WORKSET.md +9 -0
  45. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/agent_default/canon/handbook/directives/SYS_AGENT.md +15 -0
  46. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/canon/handbook/directives/SYS_BOX.md +11 -0
  47. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/notebook/MY_CONTENTS.md +21 -0
  48. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/notebook/directives/CONVENTIONS.md +91 -0
  49. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/workbook/devnotes.md +14 -0
  50. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/box/home/canon/workbook/tasks.md +51 -0
  51. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/SYS_CONTENTS.md +26 -0
  52. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/SYS_GENERAL.md +37 -0
  53. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/rules/CANON.md +91 -0
  54. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/rules/DATAPOLICY.md +51 -0
  55. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/handbook/general/directives/rules/INTERACTION.md +59 -0
  56. kanibako_cli-1.8.0.dev95/src/kanibako/data/global/template/workset/canon/handbook/directives/SYS_WORKSET.md +49 -0
  57. kanibako_cli-1.8.0.dev95/src/kanibako/data/keyspace-manifest.yaml +3110 -0
  58. kanibako_cli-1.8.0.dev95/src/kanibako/errors.py +118 -0
  59. kanibako_cli-1.8.0.dev95/src/kanibako/launch/__init__.py +48 -0
  60. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/box_resolve.py +41 -29
  61. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/creds_watcher.py +22 -9
  62. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/journal.py +2 -2
  63. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/shells.py +1 -1
  64. kanibako_cli-1.8.0.dev95/src/kanibako/launch/templates.py +1252 -0
  65. kanibako_cli-1.8.0.dev95/src/kanibako/persona_store.py +411 -0
  66. kanibako_cli-1.8.0.dev95/src/kanibako/project/__init__.py +44 -0
  67. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/import_reconcile.py +11 -10
  68. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/names.py +67 -21
  69. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/registry_store.py +7 -5
  70. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/workset.py +213 -24
  71. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/project}/workset_registry.py +1 -1
  72. kanibako_cli-1.8.0.dev95/src/kanibako/runtime/__init__.py +47 -0
  73. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/baseline.py +3 -3
  74. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/container.py +253 -292
  75. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/freshness.py +2 -2
  76. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/image_sharing.py +15 -23
  77. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_bundle.py +2 -2
  78. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_registry.py +2 -2
  79. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_resolve.py +6 -6
  80. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_source.py +1 -1
  81. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/templates_image.py +1 -1
  82. kanibako_cli-1.8.0.dev95/src/kanibako/scripts/helper-init.sh +72 -0
  83. {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
  84. kanibako_cli-1.8.0.dev95/src/kanibako/settings/__init__.py +137 -0
  85. kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_config.py +235 -0
  86. kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_defaults.py +820 -0
  87. kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_file.py +711 -0
  88. kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_representation.py +342 -0
  89. kanibako_cli-1.8.0.dev95/src/kanibako/settings/agent_select.py +281 -0
  90. kanibako_cli-1.8.0.dev95/src/kanibako/settings/config.py +658 -0
  91. kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_dest.py +547 -0
  92. kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_display.py +392 -0
  93. kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_interface.py +1241 -0
  94. kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_io.py +238 -0
  95. kanibako_cli-1.8.0.dev95/src/kanibako/settings/config_keys.py +1053 -0
  96. kanibako_cli-1.8.0.dev95/src/kanibako/settings/core_defaults.py +943 -0
  97. kanibako_cli-1.8.0.dev95/src/kanibako/settings/defaults_inventory.py +470 -0
  98. kanibako_cli-1.8.0.dev95/src/kanibako/settings/kb_store.py +74 -0
  99. kanibako_cli-1.8.0.dev95/src/kanibako/settings/keyspace_manifest.py +63 -0
  100. kanibako_cli-1.8.0.dev95/src/kanibako/settings/keystore.py +170 -0
  101. kanibako_cli-1.8.0.dev95/src/kanibako/settings/keystore_strings.py +10 -0
  102. kanibako_cli-1.8.0.dev95/src/kanibako/settings/paths.py +1452 -0
  103. kanibako_cli-1.8.0.dev95/src/kanibako/settings/paths_defaults.py +137 -0
  104. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_assemble.py +645 -0
  105. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_categories.py +1179 -0
  106. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_cli_level.py +274 -0
  107. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_configset.py +281 -0
  108. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_expand.py +177 -25
  109. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_keyspace.py +817 -0
  110. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_launch.py +2712 -0
  111. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_merge.py +69 -30
  112. kanibako_cli-1.8.0.dev95/src/kanibako/settings/settings_prefs.py +824 -0
  113. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_resolve.py +262 -45
  114. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/settings}/settings_views.py +205 -97
  115. kanibako_cli-1.8.0.dev95/src/kanibako/settings/store_collapse.py +444 -0
  116. kanibako_cli-1.8.0.dev95/src/kanibako/settings/store_shape.py +207 -0
  117. kanibako_cli-1.8.0.dev95/src/kanibako/settings_resolve.py +109 -0
  118. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/snapshots.py +70 -5
  119. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/targets/__init__.py +2 -2
  120. kanibako_cli-1.8.0.dev95/src/kanibako/targets/assembly.py +545 -0
  121. kanibako_cli-1.8.0.dev95/src/kanibako/targets/base.py +1102 -0
  122. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/targets/credsync.py +2 -2
  123. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/targets/no_agent.py +2 -2
  124. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/tweakcc.py +4 -0
  125. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/utils.py +1 -1
  126. kanibako_cli-1.8.0.dev95/src/kanibako/vscode/__init__.py +26 -0
  127. kanibako_cli-1.8.0.dev95/src/kanibako/vscode/vscode_config.py +807 -0
  128. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/vscode}/vscode_remote.py +15 -7
  129. kanibako_cli-1.8.0.dev95/src/kanibako/vscode_config.py +140 -0
  130. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95/src/kanibako_cli.egg-info}/PKG-INFO +4 -4
  131. kanibako_cli-1.8.0.dev95/src/kanibako_cli.egg-info/SOURCES.txt +219 -0
  132. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/requires.txt +3 -3
  133. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_agent_ref.py +135 -4
  134. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_agent_resolution.py +75 -139
  135. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_archive_restore_integration.py +33 -23
  136. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_box_supervisor.py +518 -79
  137. kanibako_cli-1.8.0.dev95/tests/test_canon_delivery.py +1150 -0
  138. kanibako_cli-1.8.0.dev95/tests/test_canon_lifecycle_deletion.py +260 -0
  139. kanibako_cli-1.8.0.dev95/tests/test_categories_live.py +1486 -0
  140. kanibako_cli-1.8.0.dev95/tests/test_category_collisions.py +1720 -0
  141. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_cli.py +270 -142
  142. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_cli_exitcodes.py +18 -54
  143. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_comms.py +30 -34
  144. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_create_recovery.py +209 -57
  145. kanibako_cli-1.8.0.dev95/tests/test_delivery_manifest.py +642 -0
  146. kanibako_cli-1.8.0.dev95/tests/test_env_cmd.py +226 -0
  147. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_error_messages.py +13 -13
  148. kanibako_cli-1.8.0.dev95/tests/test_explicit_create.py +558 -0
  149. kanibako_cli-1.8.0.dev95/tests/test_flawed_oracle.py +1211 -0
  150. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_fork.py +9 -9
  151. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_helper_cmd.py +24 -24
  152. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_import.py +11 -10
  153. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_import_directives.py +125 -5
  154. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_import_recovery.py +34 -29
  155. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_init_cmd.py +249 -25
  156. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_install_integration.py +8 -8
  157. kanibako_cli-1.8.0.dev95/tests/test_instructions_bind.py +533 -0
  158. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_lifecycle_integration.py +91 -10
  159. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_meta_pin.py +3 -4
  160. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_persona_config_set.py +31 -29
  161. kanibako_cli-1.8.0.dev95/tests/test_persona_store.py +628 -0
  162. kanibako_cli-1.8.0.dev95/tests/test_plugin_import_compat.py +314 -0
  163. kanibako_cli-1.8.0.dev95/tests/test_protected_tree_cleanup.py +143 -0
  164. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_resource_scoping.py +100 -51
  165. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_safety_invariants.py +56 -13
  166. kanibako_cli-1.8.0.dev95/tests/test_seed_hostdest.py +613 -0
  167. kanibako_cli-1.8.0.dev95/tests/test_setup_cmd.py +553 -0
  168. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_snapshots.py +67 -0
  169. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_start_integration.py +10 -10
  170. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_status.py +5 -5
  171. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_tweakcc.py +65 -4
  172. kanibako_cli-1.7.2rc5/pyproject.toml +0 -72
  173. kanibako_cli-1.7.2rc5/src/kanibako/agent_config.py +0 -213
  174. kanibako_cli-1.7.2rc5/src/kanibako/agent_defaults.py +0 -262
  175. kanibako_cli-1.7.2rc5/src/kanibako/agent_ref.py +0 -185
  176. kanibako_cli-1.7.2rc5/src/kanibako/agent_representation.py +0 -229
  177. kanibako_cli-1.7.2rc5/src/kanibako/box_supervisor.py +0 -1709
  178. kanibako_cli-1.7.2rc5/src/kanibako/commands/install.py +0 -165
  179. kanibako_cli-1.7.2rc5/src/kanibako/commands/start.py +0 -5930
  180. kanibako_cli-1.7.2rc5/src/kanibako/config.py +0 -800
  181. kanibako_cli-1.7.2rc5/src/kanibako/config_interface.py +0 -2922
  182. kanibako_cli-1.7.2rc5/src/kanibako/config_io.py +0 -40
  183. kanibako_cli-1.7.2rc5/src/kanibako/core_defaults.py +0 -495
  184. kanibako_cli-1.7.2rc5/src/kanibako/data/core-defaults.yaml +0 -291
  185. kanibako_cli-1.7.2rc5/src/kanibako/data/global/rom/playbook/kanibako/scripts/clear.py +0 -20
  186. kanibako_cli-1.7.2rc5/src/kanibako/data/global/rom/playbook/kanibako/scripts/start.py +0 -50
  187. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/CONTENTS.md +0 -11
  188. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/agents/directives/AGENTS.md +0 -4
  189. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/box/directives/BOX.md +0 -16
  190. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/general/directives/GENERAL.md +0 -12
  191. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/general/directives/rules/INTERACTION.md +0 -20
  192. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/general/directives/rules/WORKPOLICY.md +0 -17
  193. kanibako_cli-1.7.2rc5/src/kanibako/data/global/template/playbook/workset/directives/WORKSET.md +0 -4
  194. kanibako_cli-1.7.2rc5/src/kanibako/deprecation.py +0 -193
  195. kanibako_cli-1.7.2rc5/src/kanibako/errors.py +0 -57
  196. kanibako_cli-1.7.2rc5/src/kanibako/helper_client.py +0 -133
  197. kanibako_cli-1.7.2rc5/src/kanibako/paths.py +0 -2672
  198. kanibako_cli-1.7.2rc5/src/kanibako/persona_store.py +0 -357
  199. kanibako_cli-1.7.2rc5/src/kanibako/scripts/helper-init.sh +0 -45
  200. kanibako_cli-1.7.2rc5/src/kanibako/settings_assemble.py +0 -463
  201. kanibako_cli-1.7.2rc5/src/kanibako/settings_categories.py +0 -393
  202. kanibako_cli-1.7.2rc5/src/kanibako/settings_configset.py +0 -447
  203. kanibako_cli-1.7.2rc5/src/kanibako/settings_launch.py +0 -1706
  204. kanibako_cli-1.7.2rc5/src/kanibako/settings_store.py +0 -334
  205. kanibako_cli-1.7.2rc5/src/kanibako/shellenv.py +0 -75
  206. kanibako_cli-1.7.2rc5/src/kanibako/targets/assembly.py +0 -356
  207. kanibako_cli-1.7.2rc5/src/kanibako/targets/base.py +0 -807
  208. kanibako_cli-1.7.2rc5/src/kanibako/templates.py +0 -436
  209. kanibako_cli-1.7.2rc5/src/kanibako/vscode_config.py +0 -1335
  210. kanibako_cli-1.7.2rc5/src/kanibako_cli.egg-info/SOURCES.txt +0 -234
  211. kanibako_cli-1.7.2rc5/tests/test_agent_config.py +0 -412
  212. kanibako_cli-1.7.2rc5/tests/test_agent_representation.py +0 -511
  213. kanibako_cli-1.7.2rc5/tests/test_baseline.py +0 -137
  214. kanibako_cli-1.7.2rc5/tests/test_box_identity.py +0 -393
  215. kanibako_cli-1.7.2rc5/tests/test_box_resolve.py +0 -286
  216. kanibako_cli-1.7.2rc5/tests/test_channels.py +0 -261
  217. kanibako_cli-1.7.2rc5/tests/test_config.py +0 -828
  218. kanibako_cli-1.7.2rc5/tests/test_config_interface.py +0 -3611
  219. kanibako_cli-1.7.2rc5/tests/test_container.py +0 -1566
  220. kanibako_cli-1.7.2rc5/tests/test_container_extended.py +0 -444
  221. kanibako_cli-1.7.2rc5/tests/test_container_integration.py +0 -160
  222. kanibako_cli-1.7.2rc5/tests/test_containerfiles.py +0 -55
  223. kanibako_cli-1.7.2rc5/tests/test_creds_watcher.py +0 -281
  224. kanibako_cli-1.7.2rc5/tests/test_defaults_golden.py +0 -389
  225. kanibako_cli-1.7.2rc5/tests/test_delivery_manifest.py +0 -343
  226. kanibako_cli-1.7.2rc5/tests/test_deprecations.py +0 -203
  227. kanibako_cli-1.7.2rc5/tests/test_env_cmd.py +0 -96
  228. kanibako_cli-1.7.2rc5/tests/test_explicit_create.py +0 -204
  229. kanibako_cli-1.7.2rc5/tests/test_freshness.py +0 -542
  230. kanibako_cli-1.7.2rc5/tests/test_helper_client.py +0 -127
  231. kanibako_cli-1.7.2rc5/tests/test_helper_listener.py +0 -770
  232. kanibako_cli-1.7.2rc5/tests/test_helpers.py +0 -463
  233. kanibako_cli-1.7.2rc5/tests/test_hygiene.py +0 -753
  234. kanibako_cli-1.7.2rc5/tests/test_image_sharing.py +0 -573
  235. kanibako_cli-1.7.2rc5/tests/test_instructions_bind.py +0 -183
  236. kanibako_cli-1.7.2rc5/tests/test_journal.py +0 -212
  237. kanibako_cli-1.7.2rc5/tests/test_names.py +0 -1116
  238. kanibako_cli-1.7.2rc5/tests/test_paths.py +0 -1881
  239. kanibako_cli-1.7.2rc5/tests/test_paths_extended.py +0 -183
  240. kanibako_cli-1.7.2rc5/tests/test_persona_store.py +0 -539
  241. kanibako_cli-1.7.2rc5/tests/test_playbook_delivery.py +0 -211
  242. kanibako_cli-1.7.2rc5/tests/test_registry.py +0 -342
  243. kanibako_cli-1.7.2rc5/tests/test_registry_store.py +0 -423
  244. kanibako_cli-1.7.2rc5/tests/test_resolve_box_target.py +0 -231
  245. kanibako_cli-1.7.2rc5/tests/test_rig_bundle.py +0 -176
  246. kanibako_cli-1.7.2rc5/tests/test_rig_meta.py +0 -136
  247. kanibako_cli-1.7.2rc5/tests/test_rig_registry.py +0 -223
  248. kanibako_cli-1.7.2rc5/tests/test_rig_resolve.py +0 -281
  249. kanibako_cli-1.7.2rc5/tests/test_rig_source.py +0 -211
  250. kanibako_cli-1.7.2rc5/tests/test_settings_assemble.py +0 -846
  251. kanibako_cli-1.7.2rc5/tests/test_settings_categories.py +0 -1198
  252. kanibako_cli-1.7.2rc5/tests/test_settings_configset.py +0 -656
  253. kanibako_cli-1.7.2rc5/tests/test_settings_expand.py +0 -632
  254. kanibako_cli-1.7.2rc5/tests/test_settings_launch.py +0 -1715
  255. kanibako_cli-1.7.2rc5/tests/test_settings_launch_equivalence.py +0 -548
  256. kanibako_cli-1.7.2rc5/tests/test_settings_merge.py +0 -418
  257. kanibako_cli-1.7.2rc5/tests/test_settings_resolve.py +0 -391
  258. kanibako_cli-1.7.2rc5/tests/test_settings_store.py +0 -463
  259. kanibako_cli-1.7.2rc5/tests/test_settings_views.py +0 -372
  260. kanibako_cli-1.7.2rc5/tests/test_setup_cmd.py +0 -383
  261. kanibako_cli-1.7.2rc5/tests/test_shellenv.py +0 -169
  262. kanibako_cli-1.7.2rc5/tests/test_shells.py +0 -275
  263. kanibako_cli-1.7.2rc5/tests/test_standalone_paths.py +0 -568
  264. kanibako_cli-1.7.2rc5/tests/test_system_paths.py +0 -689
  265. kanibako_cli-1.7.2rc5/tests/test_templates.py +0 -611
  266. kanibako_cli-1.7.2rc5/tests/test_templates_image.py +0 -311
  267. kanibako_cli-1.7.2rc5/tests/test_vscode_remote.py +0 -470
  268. kanibako_cli-1.7.2rc5/tests/test_vscode_remote_dispatch.py +0 -205
  269. kanibako_cli-1.7.2rc5/tests/test_workset.py +0 -928
  270. kanibako_cli-1.7.2rc5/tests/test_workset_paths.py +0 -289
  271. kanibako_cli-1.7.2rc5/tests/test_workset_registry.py +0 -277
  272. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/LICENSE.md +0 -0
  273. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/setup.cfg +0 -0
  274. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/__main__.py +0 -0
  275. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/_atomic.py +0 -0
  276. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/auth_parser.py +0 -0
  277. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/box_lifecycle.py +0 -0
  278. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/browser_state.py +0 -0
  279. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/bun_sea.py +0 -0
  280. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/__init__.py +0 -0
  281. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/box/__init__.py +0 -0
  282. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/commands/upgrade.py +0 -0
  283. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-android +0 -0
  284. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-dotnet +0 -0
  285. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-js +0 -0
  286. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-jvm +0 -0
  287. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/Containerfile.template-systems +0 -0
  288. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/__init__.py +0 -0
  289. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/containers/tmux.conf +0 -0
  290. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/data/__init__.py +0 -0
  291. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/data/image-baseline.yaml +0 -0
  292. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/git.py +0 -0
  293. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/install_method.py +0 -0
  294. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/kuid.py +0 -0
  295. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/box_identity.py +0 -0
  296. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/launch}/hygiene.py +0 -0
  297. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/log.py +0 -0
  298. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/plugins/__init__.py +0 -0
  299. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/py.typed +0 -0
  300. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/containerfiles.py +0 -0
  301. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/registry.py +0 -0
  302. {kanibako_cli-1.7.2rc5/src/kanibako → kanibako_cli-1.8.0.dev95/src/kanibako/runtime}/rig_meta.py +0 -0
  303. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/scripts/__init__.py +0 -0
  304. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/scripts/kanibako-entry +0 -0
  305. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/scripts/kanibako-secrets.sh +0 -0
  306. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako/tweakcc_cache.py +0 -0
  307. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/dependency_links.txt +0 -0
  308. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/entry_points.txt +0 -0
  309. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/src/kanibako_cli.egg-info/top_level.txt +0 -0
  310. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_atomic.py +0 -0
  311. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_auth_browser.py +0 -0
  312. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_auth_parser.py +0 -0
  313. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_box_lifecycle.py +0 -0
  314. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_browser_sidecar.py +0 -0
  315. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_browser_state.py +0 -0
  316. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_bun_sea.py +0 -0
  317. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_credentials.py +0 -0
  318. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_git.py +0 -0
  319. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_kuid.py +0 -0
  320. {kanibako_cli-1.7.2rc5 → kanibako_cli-1.8.0.dev95}/tests/test_log.py +0 -0
  321. {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.7.2rc5
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>=7.0; extra == "dev"
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
- ## Features
24
+ ## Quick Start
25
25
 
26
- - **Safe by default** -- rootless containers with no host access; the sandbox
27
- is what makes it safe to give agents real autonomy
28
- - **Automatic sandboxing** -- no Docker or Podman experience required;
29
- Kanibako manages all container operations for you
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
- - Python 3.11+
66
- - [Podman](https://podman.io/) 4.3+ (recommended) or Docker -- just needs to be
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
- ## Installation
34
+ # Launch the agent session -- that's it!
35
+ kanibako
72
36
 
73
- > **Pre-release:** the current line (`1.7.0`) is still in release candidates, so
74
- > add `--pre` (pip/pipx) or `--prerelease allow` (uv) to get the newest rc. Plain
75
- > `pip install kanibako` gets the last *stable* release (`1.6.0`). Once `1.7.0`
76
- > ships, drop the flag.
37
+ # Optional - launch in VS Code (new, experimental):
38
+ kanibako code
39
+ ```
77
40
 
78
- ```bash
79
- # Standard install (cli + Claude, Codex, and Goose plugins) -- current rc
80
- uv tool install --prerelease allow kanibako
81
- # -- or --
82
- pip install --pre kanibako
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
- # Base only (no agent plugins -- agent-agnostic shell mode)
85
- pip install --pre kanibako-cli
58
+ ### Prerequisites
86
59
 
87
- # Development install
88
- git clone https://github.com/doctorjei/kanibako.git
89
- cd kanibako
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), you
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
- ## Quick Start
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
- ```bash
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
- # Start an agent session (shortcut for `kanibako start`)
108
- kanibako
109
-
110
- # Start with a specific rig
111
- kanibako --image kanibako-min:latest
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
- That's it -- no `docker run`, no volume flags, no Containerfile. Creating a box
124
- is an explicit step (`kanibako create`); a launch (`kanibako` / `start` / `code` /
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
- ## Example: Python Project
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
- # 1. Install kanibako (--pre while 1.7.0 is in rc; see Installation)
137
- pip install --pre kanibako
138
-
139
- # 2. Create or clone a project
140
- mkdir ~/my-flask-app && cd ~/my-flask-app
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` sets up an isolated environment for this project. On the
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
- Python, git, and the other base tools. When you exit, your project files
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
- # Later: come back to the same project
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
- ## Example: C/Rust Project (custom rig)
125
+ ### Example: C/Rust Project (custom rig)
170
126
 
171
- For projects that need compiled languages, create a custom rig with the
172
- toolchains you need:
127
+ For projects that need compiled languages, create a custom rig with needed tools:
173
128
 
174
129
  ```bash
175
- # 1. Build the bundled C/C++ + Rust toolchain template
176
- kanibako rig prep systems
177
- # (or build one interactively with: kanibako rig extend my-systems --from kanibako-oci)
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
- `kanibako create` pins the rig choice for this project, so you can just run
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`, `--distinct-auth`, `--allow-home`) |
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 KEY=VALUE` | Per-run environment variable (repeatable) |
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.agent > workset default > system.default_agent
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.default_agent`).
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 project config)
725
- kanibako box set env.EDITOR=vim # project-level
726
- kanibako system set env.EDITOR=nano # global (all projects)
727
- kanibako box get env.EDITOR # show one value
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
- Project env vars override global ones.
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 shares/caches are declared by the plugin (`agent.<agent>.shared.*` /
791
- `agent.<agent>.caches.*`) and served from the per-agent store dir
792
- (`agents/<agent>/{plugins,cache}`).
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
- ## Home Templates
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
- Home templates provide **layered seed-once** initialization for a new box.
805
- Three layers are copied into the box home `~/` in order (later overlays
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
- 1. base @system.base_template → ~/ (always; the flat base skeleton)
811
- 2. agent @agent.<agent>.template → ~/ (= agents/<agent>/template; if box.agent set)
812
- 3. workset @workset.template → ~/ (= <wsroot>/template; optional, primary/named)
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
- Per-file rule: plain ordered copy, **last layer wins**, seed-once. There is no
816
- per-file merge of any file -- `CLAUDE.md` is an ordinary template file, and the
817
- base layer's guidance lives in a separate non-colliding `INSTRUCTIONS.md` so it
818
- never clobbers an agent template's `CLAUDE.md`.
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 template layout** (for agent `claude`):
820
+ **Example agent store layout** (for agent `claude`):
825
821
 
826
822
  ```
827
- agents/claude/template/
828
- |- .claude/
829
- | '- settings.json
830
- '- CLAUDE.md
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 in that agent's `template/`
834
- dir; it seeds via layer 2.
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>`); inside the
847
- box the local `~/workspace/vault` path is masked by a read-only tmpfs, so the
848
- agent cannot see or modify host vault metadata.
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
- `kanibako system set` sets **non-`system.`** settings only. `system.*`-prefixed
966
- keys (layout paths AND `system.default_agent`) are **file-only**: the CLI shows them
967
- but refuses to set/reset them, pointing you at the config file. Set the default agent
968
- with `kanibako setup`; edit structural paths in `~/.config/kanibako.yaml` directly.
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
- - **Base template**: `$XDG_DATA_HOME/kanibako/global/base_template/`
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.*` / `.rw.*` | | Scoped bind-mounts (`host_src:box_dest`) |
996
- | `<scope>.caches.*` | | Scoped cache mounts (`host_src:box_dest`) |
997
- | `<scope>.seeded.*` | | Copy-once seeds applied at box init |
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