agent-box-tool 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. agent_box_tool-1.0.0/AGENTS.md +174 -0
  2. agent_box_tool-1.0.0/CHANGELOG.md +25 -0
  3. agent_box_tool-1.0.0/LICENSE +21 -0
  4. agent_box_tool-1.0.0/MANIFEST.in +4 -0
  5. agent_box_tool-1.0.0/PKG-INFO +166 -0
  6. agent_box_tool-1.0.0/README.md +142 -0
  7. agent_box_tool-1.0.0/agent_box/.containerignore +2 -0
  8. agent_box_tool-1.0.0/agent_box/Containerfile +798 -0
  9. agent_box_tool-1.0.0/agent_box/__init__.py +1 -0
  10. agent_box_tool-1.0.0/agent_box/__main__.py +8 -0
  11. agent_box_tool-1.0.0/agent_box/agent_profiles.py +152 -0
  12. agent_box_tool-1.0.0/agent_box/api_models.py +151 -0
  13. agent_box_tool-1.0.0/agent_box/atomicio.py +38 -0
  14. agent_box_tool-1.0.0/agent_box/branch_cleanup.py +267 -0
  15. agent_box_tool-1.0.0/agent_box/channel.py +271 -0
  16. agent_box_tool-1.0.0/agent_box/claude_settings.py +234 -0
  17. agent_box_tool-1.0.0/agent_box/cli.py +1066 -0
  18. agent_box_tool-1.0.0/agent_box/cloud.py +248 -0
  19. agent_box_tool-1.0.0/agent_box/codex_settings.py +57 -0
  20. agent_box_tool-1.0.0/agent_box/completion.bash +68 -0
  21. agent_box_tool-1.0.0/agent_box/completion.py +251 -0
  22. agent_box_tool-1.0.0/agent_box/completion.zsh +55 -0
  23. agent_box_tool-1.0.0/agent_box/config.py +1516 -0
  24. agent_box_tool-1.0.0/agent_box/config_menu.py +1426 -0
  25. agent_box_tool-1.0.0/agent_box/config_proposal.py +82 -0
  26. agent_box_tool-1.0.0/agent_box/container-launcher +9 -0
  27. agent_box_tool-1.0.0/agent_box/delegation.py +115 -0
  28. agent_box_tool-1.0.0/agent_box/errors.py +2 -0
  29. agent_box_tool-1.0.0/agent_box/external_config.py +382 -0
  30. agent_box_tool-1.0.0/agent_box/external_launch.py +385 -0
  31. agent_box_tool-1.0.0/agent_box/git_workflow.py +544 -0
  32. agent_box_tool-1.0.0/agent_box/github_review.py +529 -0
  33. agent_box_tool-1.0.0/agent_box/github_workflow.py +343 -0
  34. agent_box_tool-1.0.0/agent_box/host_podman.py +229 -0
  35. agent_box_tool-1.0.0/agent_box/host_session.py +22 -0
  36. agent_box_tool-1.0.0/agent_box/identity.py +72 -0
  37. agent_box_tool-1.0.0/agent_box/k3s.py +417 -0
  38. agent_box_tool-1.0.0/agent_box/keeper.sh +47 -0
  39. agent_box_tool-1.0.0/agent_box/kubeconfigs.py +268 -0
  40. agent_box_tool-1.0.0/agent_box/launch_options.py +299 -0
  41. agent_box_tool-1.0.0/agent_box/links.py +612 -0
  42. agent_box_tool-1.0.0/agent_box/local_workflow.py +94 -0
  43. agent_box_tool-1.0.0/agent_box/migrations.py +164 -0
  44. agent_box_tool-1.0.0/agent_box/model_catalog.py +116 -0
  45. agent_box_tool-1.0.0/agent_box/mounts.py +120 -0
  46. agent_box_tool-1.0.0/agent_box/nested_podman.py +127 -0
  47. agent_box_tool-1.0.0/agent_box/notify.py +690 -0
  48. agent_box_tool-1.0.0/agent_box/paths.py +210 -0
  49. agent_box_tool-1.0.0/agent_box/plan_sync.py +205 -0
  50. agent_box_tool-1.0.0/agent_box/podman_doctor.py +87 -0
  51. agent_box_tool-1.0.0/agent_box/project_config.py +185 -0
  52. agent_box_tool-1.0.0/agent_box/provider_runner.py +435 -0
  53. agent_box_tool-1.0.0/agent_box/registries.py +456 -0
  54. agent_box_tool-1.0.0/agent_box/remote_control.py +446 -0
  55. agent_box_tool-1.0.0/agent_box/repo_binding.py +247 -0
  56. agent_box_tool-1.0.0/agent_box/review_results.py +217 -0
  57. agent_box_tool-1.0.0/agent_box/routing.py +58 -0
  58. agent_box_tool-1.0.0/agent_box/runtime.py +3706 -0
  59. agent_box_tool-1.0.0/agent_box/runtime_bundle.py +50 -0
  60. agent_box_tool-1.0.0/agent_box/selftest.py +170 -0
  61. agent_box_tool-1.0.0/agent_box/sessions.py +83 -0
  62. agent_box_tool-1.0.0/agent_box/skills/ab-adopt/SKILL.md +17 -0
  63. agent_box_tool-1.0.0/agent_box/skills/ab-config/SKILL.md +19 -0
  64. agent_box_tool-1.0.0/agent_box/skills/ab-interview/SKILL.md +14 -0
  65. agent_box_tool-1.0.0/agent_box/skills/ab-land/SKILL.md +17 -0
  66. agent_box_tool-1.0.0/agent_box/skills/ab-normalize/SKILL.md +12 -0
  67. agent_box_tool-1.0.0/agent_box/skills/ab-plan/SKILL.md +13 -0
  68. agent_box_tool-1.0.0/agent_box/skills/ab-pr/SKILL.md +18 -0
  69. agent_box_tool-1.0.0/agent_box/skills/ab-review/SKILL.md +17 -0
  70. agent_box_tool-1.0.0/agent_box/skills/ab-setup/SKILL.md +13 -0
  71. agent_box_tool-1.0.0/agent_box/skills/ab-sync/SKILL.md +19 -0
  72. agent_box_tool-1.0.0/agent_box/skills/ab-tracker/SKILL.md +31 -0
  73. agent_box_tool-1.0.0/agent_box/skills/ab-work/SKILL.md +17 -0
  74. agent_box_tool-1.0.0/agent_box/speed.py +29 -0
  75. agent_box_tool-1.0.0/agent_box/statusline.py +142 -0
  76. agent_box_tool-1.0.0/agent_box/tmux.conf +34 -0
  77. agent_box_tool-1.0.0/agent_box/tracker/__init__.py +1 -0
  78. agent_box_tool-1.0.0/agent_box/tracker/adoption.py +314 -0
  79. agent_box_tool-1.0.0/agent_box/tracker/audit.py +133 -0
  80. agent_box_tool-1.0.0/agent_box/tracker/cli.py +502 -0
  81. agent_box_tool-1.0.0/agent_box/tracker/core.py +250 -0
  82. agent_box_tool-1.0.0/agent_box/tracker/extensions.py +162 -0
  83. agent_box_tool-1.0.0/agent_box/tracker/github.py +721 -0
  84. agent_box_tool-1.0.0/agent_box/tracker/github_api.py +388 -0
  85. agent_box_tool-1.0.0/agent_box/tracker/github_extensions.py +35 -0
  86. agent_box_tool-1.0.0/agent_box/tracker/registry.py +46 -0
  87. agent_box_tool-1.0.0/agent_box/tracker/vikunja.py +624 -0
  88. agent_box_tool-1.0.0/agent_box/tracker/vikunja_api.py +1370 -0
  89. agent_box_tool-1.0.0/agent_box/tracker/vikunja_clone.py +212 -0
  90. agent_box_tool-1.0.0/agent_box/tracker/vikunja_relations.py +100 -0
  91. agent_box_tool-1.0.0/agent_box/upgrades.py +70 -0
  92. agent_box_tool-1.0.0/agent_box/usage.py +528 -0
  93. agent_box_tool-1.0.0/agent_box/usage_auth.py +125 -0
  94. agent_box_tool-1.0.0/agent_box/workflow.py +1851 -0
  95. agent_box_tool-1.0.0/agent_box/workflow_state.py +43 -0
  96. agent_box_tool-1.0.0/agent_box/workspace.py +77 -0
  97. agent_box_tool-1.0.0/agent_box/workspaces.py +262 -0
  98. agent_box_tool-1.0.0/agent_box_tool.egg-info/PKG-INFO +166 -0
  99. agent_box_tool-1.0.0/agent_box_tool.egg-info/SOURCES.txt +257 -0
  100. agent_box_tool-1.0.0/agent_box_tool.egg-info/dependency_links.txt +1 -0
  101. agent_box_tool-1.0.0/agent_box_tool.egg-info/entry_points.txt +2 -0
  102. agent_box_tool-1.0.0/agent_box_tool.egg-info/top_level.txt +1 -0
  103. agent_box_tool-1.0.0/docs/README.md +34 -0
  104. agent_box_tool-1.0.0/docs/compatibility.md +98 -0
  105. agent_box_tool-1.0.0/docs/configuration.md +214 -0
  106. agent_box_tool-1.0.0/docs/design/integrations.md +183 -0
  107. agent_box_tool-1.0.0/docs/design/native-launch.md +87 -0
  108. agent_box_tool-1.0.0/docs/design/third-party-notices.md +81 -0
  109. agent_box_tool-1.0.0/docs/design/tracker.md +184 -0
  110. agent_box_tool-1.0.0/docs/design/workflow-references.md +141 -0
  111. agent_box_tool-1.0.0/docs/design/workflow.md +342 -0
  112. agent_box_tool-1.0.0/docs/image.md +59 -0
  113. agent_box_tool-1.0.0/docs/installation.md +153 -0
  114. agent_box_tool-1.0.0/docs/integrations/README.md +31 -0
  115. agent_box_tool-1.0.0/docs/integrations/audio.md +42 -0
  116. agent_box_tool-1.0.0/docs/integrations/browser.md +164 -0
  117. agent_box_tool-1.0.0/docs/integrations/cloud-profiles.md +103 -0
  118. agent_box_tool-1.0.0/docs/integrations/external-providers.md +314 -0
  119. agent_box_tool-1.0.0/docs/integrations/git.md +57 -0
  120. agent_box_tool-1.0.0/docs/integrations/k3s.md +200 -0
  121. agent_box_tool-1.0.0/docs/integrations/kubeconfigs.md +108 -0
  122. agent_box_tool-1.0.0/docs/integrations/links.md +136 -0
  123. agent_box_tool-1.0.0/docs/integrations/registries.md +65 -0
  124. agent_box_tool-1.0.0/docs/integrations/remote-control.md +52 -0
  125. agent_box_tool-1.0.0/docs/integrations/skills.md +27 -0
  126. agent_box_tool-1.0.0/docs/integrations/telegram.md +74 -0
  127. agent_box_tool-1.0.0/docs/integrations/tracker.md +240 -0
  128. agent_box_tool-1.0.0/docs/integrations/workflow.md +306 -0
  129. agent_box_tool-1.0.0/docs/nested-podman.md +118 -0
  130. agent_box_tool-1.0.0/docs/releasing.md +101 -0
  131. agent_box_tool-1.0.0/docs/security.md +50 -0
  132. agent_box_tool-1.0.0/docs/troubleshooting.md +58 -0
  133. agent_box_tool-1.0.0/docs/usage.md +218 -0
  134. agent_box_tool-1.0.0/pyproject.toml +41 -0
  135. agent_box_tool-1.0.0/setup.cfg +4 -0
  136. agent_box_tool-1.0.0/tests/__init__.py +0 -0
  137. agent_box_tool-1.0.0/tests/api_model_samples/anthropic-page1.json +56 -0
  138. agent_box_tool-1.0.0/tests/api_model_samples/anthropic-page2.json +56 -0
  139. agent_box_tool-1.0.0/tests/api_model_samples/deepseek.json +60 -0
  140. agent_box_tool-1.0.0/tests/api_model_samples/openai.json +17 -0
  141. agent_box_tool-1.0.0/tests/api_model_samples/openrouter.json +215 -0
  142. agent_box_tool-1.0.0/tests/fixtures/compatibility/1.0.0/config.json +7 -0
  143. agent_box_tool-1.0.0/tests/fixtures/compatibility/1.0.0/import-state.json +7 -0
  144. agent_box_tool-1.0.0/tests/fixtures/compatibility/1.0.0/project.json +5 -0
  145. agent_box_tool-1.0.0/tests/fixtures/compatibility/1.0.0/review-budget.json +10 -0
  146. agent_box_tool-1.0.0/tests/github_fixtures.py +357 -0
  147. agent_box_tool-1.0.0/tests/live_github_tracker.py +107 -0
  148. agent_box_tool-1.0.0/tests/live_vikunja_adoption.py +177 -0
  149. agent_box_tool-1.0.0/tests/run_suite.py +72 -0
  150. agent_box_tool-1.0.0/tests/smoke_browser.py +141 -0
  151. agent_box_tool-1.0.0/tests/smoke_codex_sandbox.py +72 -0
  152. agent_box_tool-1.0.0/tests/test_agent_profiles.py +224 -0
  153. agent_box_tool-1.0.0/tests/test_agent_tree_mounts.py +230 -0
  154. agent_box_tool-1.0.0/tests/test_api_models.py +177 -0
  155. agent_box_tool-1.0.0/tests/test_apply.py +326 -0
  156. agent_box_tool-1.0.0/tests/test_audio.py +100 -0
  157. agent_box_tool-1.0.0/tests/test_branch_cleanup.py +1069 -0
  158. agent_box_tool-1.0.0/tests/test_browser.py +495 -0
  159. agent_box_tool-1.0.0/tests/test_claude_channel.py +646 -0
  160. agent_box_tool-1.0.0/tests/test_claude_settings.py +330 -0
  161. agent_box_tool-1.0.0/tests/test_cli.py +306 -0
  162. agent_box_tool-1.0.0/tests/test_cloud.py +246 -0
  163. agent_box_tool-1.0.0/tests/test_codex_settings.py +88 -0
  164. agent_box_tool-1.0.0/tests/test_completion.py +363 -0
  165. agent_box_tool-1.0.0/tests/test_config.py +352 -0
  166. agent_box_tool-1.0.0/tests/test_config_ai.py +124 -0
  167. agent_box_tool-1.0.0/tests/test_config_describe.py +212 -0
  168. agent_box_tool-1.0.0/tests/test_config_menu.py +990 -0
  169. agent_box_tool-1.0.0/tests/test_config_proposal.py +190 -0
  170. agent_box_tool-1.0.0/tests/test_config_set.py +113 -0
  171. agent_box_tool-1.0.0/tests/test_containerfile.py +417 -0
  172. agent_box_tool-1.0.0/tests/test_docs_links.py +294 -0
  173. agent_box_tool-1.0.0/tests/test_expand_user_paths.py +92 -0
  174. agent_box_tool-1.0.0/tests/test_external_config.py +277 -0
  175. agent_box_tool-1.0.0/tests/test_external_launch.py +376 -0
  176. agent_box_tool-1.0.0/tests/test_external_models.py +474 -0
  177. agent_box_tool-1.0.0/tests/test_external_workflow.py +156 -0
  178. agent_box_tool-1.0.0/tests/test_git_credentials.py +208 -0
  179. agent_box_tool-1.0.0/tests/test_github_review.py +726 -0
  180. agent_box_tool-1.0.0/tests/test_github_workflow.py +643 -0
  181. agent_box_tool-1.0.0/tests/test_host_exposure.py +307 -0
  182. agent_box_tool-1.0.0/tests/test_host_home.py +174 -0
  183. agent_box_tool-1.0.0/tests/test_host_podman.py +187 -0
  184. agent_box_tool-1.0.0/tests/test_host_sessions.py +421 -0
  185. agent_box_tool-1.0.0/tests/test_identity.py +55 -0
  186. agent_box_tool-1.0.0/tests/test_image_tools.py +136 -0
  187. agent_box_tool-1.0.0/tests/test_k3s.py +480 -0
  188. agent_box_tool-1.0.0/tests/test_k3s_runtime.py +289 -0
  189. agent_box_tool-1.0.0/tests/test_kubeconfigs.py +352 -0
  190. agent_box_tool-1.0.0/tests/test_launch_options.py +245 -0
  191. agent_box_tool-1.0.0/tests/test_links.py +462 -0
  192. agent_box_tool-1.0.0/tests/test_local_workflow.py +906 -0
  193. agent_box_tool-1.0.0/tests/test_managed_skills.py +311 -0
  194. agent_box_tool-1.0.0/tests/test_migrations.py +243 -0
  195. agent_box_tool-1.0.0/tests/test_model_catalog.py +187 -0
  196. agent_box_tool-1.0.0/tests/test_mounts.py +116 -0
  197. agent_box_tool-1.0.0/tests/test_nested_launch.py +177 -0
  198. agent_box_tool-1.0.0/tests/test_nested_podman.py +345 -0
  199. agent_box_tool-1.0.0/tests/test_nested_podman_data.py +263 -0
  200. agent_box_tool-1.0.0/tests/test_notify.py +765 -0
  201. agent_box_tool-1.0.0/tests/test_paths.py +146 -0
  202. agent_box_tool-1.0.0/tests/test_plan_sync.py +464 -0
  203. agent_box_tool-1.0.0/tests/test_podman_doctor.py +92 -0
  204. agent_box_tool-1.0.0/tests/test_project_config.py +443 -0
  205. agent_box_tool-1.0.0/tests/test_provider_runner.py +491 -0
  206. agent_box_tool-1.0.0/tests/test_registries.py +391 -0
  207. agent_box_tool-1.0.0/tests/test_release.py +64 -0
  208. agent_box_tool-1.0.0/tests/test_remote_control.py +405 -0
  209. agent_box_tool-1.0.0/tests/test_review_results.py +489 -0
  210. agent_box_tool-1.0.0/tests/test_review_routing.py +195 -0
  211. agent_box_tool-1.0.0/tests/test_reviewer_routes.py +90 -0
  212. agent_box_tool-1.0.0/tests/test_routing.py +141 -0
  213. agent_box_tool-1.0.0/tests/test_runtime.py +1065 -0
  214. agent_box_tool-1.0.0/tests/test_runtime_bundle.py +76 -0
  215. agent_box_tool-1.0.0/tests/test_runtime_isolation.py +64 -0
  216. agent_box_tool-1.0.0/tests/test_selftest.py +40 -0
  217. agent_box_tool-1.0.0/tests/test_speed.py +179 -0
  218. agent_box_tool-1.0.0/tests/test_statusline.py +294 -0
  219. agent_box_tool-1.0.0/tests/test_suite_runner.py +56 -0
  220. agent_box_tool-1.0.0/tests/test_tmux_sessions.py +270 -0
  221. agent_box_tool-1.0.0/tests/test_tracker_access.py +118 -0
  222. agent_box_tool-1.0.0/tests/test_tracker_adapter.py +97 -0
  223. agent_box_tool-1.0.0/tests/test_tracker_adoption.py +262 -0
  224. agent_box_tool-1.0.0/tests/test_tracker_config.py +66 -0
  225. agent_box_tool-1.0.0/tests/test_tracker_github.py +294 -0
  226. agent_box_tool-1.0.0/tests/test_tracker_github_setup.py +157 -0
  227. agent_box_tool-1.0.0/tests/test_tracker_github_workflow.py +112 -0
  228. agent_box_tool-1.0.0/tests/test_tracker_github_write.py +239 -0
  229. agent_box_tool-1.0.0/tests/test_tracker_imports.py +849 -0
  230. agent_box_tool-1.0.0/tests/test_tracker_lifecycle.py +117 -0
  231. agent_box_tool-1.0.0/tests/test_tracker_maintenance.py +556 -0
  232. agent_box_tool-1.0.0/tests/test_tracker_normalization.py +140 -0
  233. agent_box_tool-1.0.0/tests/test_tracker_priority.py +42 -0
  234. agent_box_tool-1.0.0/tests/test_tracker_resolution.py +235 -0
  235. agent_box_tool-1.0.0/tests/test_tracker_setup.py +154 -0
  236. agent_box_tool-1.0.0/tests/test_tracker_staging.py +749 -0
  237. agent_box_tool-1.0.0/tests/test_tracker_transport.py +187 -0
  238. agent_box_tool-1.0.0/tests/test_tracker_workflow.py +130 -0
  239. agent_box_tool-1.0.0/tests/test_uninstall.py +265 -0
  240. agent_box_tool-1.0.0/tests/test_upgrades.py +139 -0
  241. agent_box_tool-1.0.0/tests/test_usage.py +258 -0
  242. agent_box_tool-1.0.0/tests/test_usage_auth.py +386 -0
  243. agent_box_tool-1.0.0/tests/test_usage_blocks.py +101 -0
  244. agent_box_tool-1.0.0/tests/test_user_env.py +206 -0
  245. agent_box_tool-1.0.0/tests/test_workflow_branches.py +272 -0
  246. agent_box_tool-1.0.0/tests/test_workflow_config.py +264 -0
  247. agent_box_tool-1.0.0/tests/test_workflow_delegate.py +352 -0
  248. agent_box_tool-1.0.0/tests/test_workflow_delta_review.py +140 -0
  249. agent_box_tool-1.0.0/tests/test_workflow_finish.py +941 -0
  250. agent_box_tool-1.0.0/tests/test_workflow_git.py +201 -0
  251. agent_box_tool-1.0.0/tests/test_workflow_inspect.py +274 -0
  252. agent_box_tool-1.0.0/tests/test_workflow_review.py +776 -0
  253. agent_box_tool-1.0.0/tests/test_working_language.py +238 -0
  254. agent_box_tool-1.0.0/tests/test_workspace.py +135 -0
  255. agent_box_tool-1.0.0/tests/test_workspace_container.py +801 -0
  256. agent_box_tool-1.0.0/tests/test_workspaces.py +261 -0
  257. agent_box_tool-1.0.0/tests/tracker_fixtures.py +273 -0
  258. agent_box_tool-1.0.0/tests/workflow_fixtures.py +220 -0
  259. agent_box_tool-1.0.0/tools/release.py +166 -0
@@ -0,0 +1,174 @@
1
+ <!-- BEGIN AGENT-BOX workflow sha256=92395bc8ed359eb4df1606ec6a97757e1ee9c2ef82532f1c2614f912651942a4 -->
2
+ Read the tracked task before work; .agent-box.json binds this repository to its tracker project.
3
+ Use agent-box tracker for task state, progress and dependencies; read related history when context is missing.
4
+ Use ab-interview, ab-plan, ab-work, ab-sync, ab-review, ab-pr, and ab-land as needed. ab-setup maintains this binding and ab-adopt brings an existing project in line with the workflow; ab-normalize processes unmarked tasks in a bound project.
5
+ The coordinator owns branches, commits, lifecycle, dependencies, and GitHub actions. Delegate implementation sequentially and research to scouts, which may run in parallel, when their model lists are configured; with an empty list the coordinator does that work itself.
6
+ A worker changes project files and answers; scouts and a fresh reviewer only read. Plan sync reads the repository and updates tracker descriptions and comments through agent-box tracker; it never changes project files, Git or lifecycle. The coordinator verifies answers and findings and commits what it accepts.
7
+ Tracker comments are a human journal. Branch, base branch, and pull request come from Git and GitHub; lifecycle comes from the tracker's own fields, never from comment text.
8
+ Use the user's language for all coordinator messages to them: progress updates, questions, option explanations and final answers. Literal project labels may stay quoted in the project language. Write tracker text, GitHub text, commit messages, code comments and documentation in the `language` that `agent-box tracker status` and `workflow inspect` report; when it is null, use the task's language in the tracker and English for implementation. Agent-to-agent handoffs and reports stay English; agent-box CLI output, errors and help stay English.
9
+ Complete subtasks only after validation and integration into the parent branch; complete parents only after merge into the base branch.
10
+ <!-- END AGENT-BOX workflow -->
11
+
12
+ # agent-box — notes for agents working on this repository
13
+
14
+ ## What this is
15
+
16
+ A launcher. `agent-box` runs Claude Code and Codex CLI inside rootless Podman
17
+ workspace boxes. Python standard library at runtime, packaged as `agent-box-tool` with no
18
+ runtime dependencies. Install editable for development; uv/pipx own the public
19
+ `agent-box` command and package updates.
20
+
21
+ ```text
22
+ pyproject.toml package metadata and agent-box -> agent_box.cli:main
23
+ agent_box/cli.py argument parsing and command dispatch
24
+ agent_box/config_menu.py stdlib curses configuration menu
25
+ agent_box/tracker/ portable task contract and product adapters
26
+ agent_box/workflow.py deterministic workflow boundaries; skills orchestrate
27
+ agent_box/runtime.py container lifecycle, mounts, launches, doctor
28
+ agent_box/config.py the whole config schema; flat dataclasses, no framework
29
+ agent_box/paths.py every host-side path; nothing else may hardcode a home layout
30
+ agent_box/runtime_bundle.py immutable package copies for running boxes
31
+ agent_box/skills/ skills agent-box ships and installs (owned, checked in)
32
+ agent_box/Containerfile the workspace image, with optional tool groups
33
+ tests/ unittest, no plugins
34
+ ```
35
+
36
+ ## Rules that are not negotiable
37
+
38
+ **Semantic Versioning from 1.0.0.** Use SemVer: PATCH fixes bugs compatibly,
39
+ MINOR adds backward-compatible functionality, and breaking changes to the
40
+ documented public contract require MAJOR. Describe breaking changes and their
41
+ upgrade path in release notes. Package versions and persisted schema versions
42
+ are separate; see `docs/compatibility.md` for the public surface and formats.
43
+
44
+ **Every public version upgrades directly to every later version.** Keep forward
45
+ migrations, including across major releases; users never install intermediate
46
+ packages. Before changing a persisted format or owned integration layout, assess
47
+ migration impact, retain published fixtures, add the required conversion and
48
+ test skipped versions, failure/retry and data preservation. Reject future schemas
49
+ before parsing or writing; preserve the original before migration commits. Do
50
+ not invent migrations for unpublished layouts. Running workspace runtimes stay
51
+ immutable; adopting a new runtime may require an explicit stop/relaunch.
52
+
53
+ **Paths come from `paths.py`.** Use `HOST_HOME` (passwd-derived), never
54
+ `Path.home()`, `os.path.expanduser`, or `$HOME`. A poisoned environment must not
55
+ be able to move a bind mount, a state directory or the container's home.
56
+
57
+ **Off by default.** Anything that exposes a credential or widens what an agent
58
+ can reach starts disabled. The exceptions are documented in the dataclass that
59
+ defines them, with the reason.
60
+
61
+ **Apply once after a package update.** `runtime.apply_config` is the single
62
+ integration writer. Configuration commands apply explicit changes; the first
63
+ host launch after a package update automatically migrates data and refreshes
64
+ already configured integrations under a lock, recording the package identity
65
+ only after success. Unchanged launches and read-only commands do not reapply.
66
+ Rendered sessions never infer or rewrite unavailable host settings. Preserve
67
+ user-owned content and opt-ins; keep `config apply` for manual edits and retry,
68
+ and `uninstall` for removing owned integrations.
69
+
70
+ On-demand Claude usage may renew and atomically save its OAuth credentials;
71
+ this is authentication maintenance, not integration application. Status-line
72
+ reads never renew tokens. Coordinate credential writes with Claude's locks.
73
+
74
+ **Installation belongs to the installer.** uv/pipx own the command and shell
75
+ PATH setup. agent-box never edits shell startup files or installer entry points.
76
+ After upgrading the package, the next host launch refreshes integrations;
77
+ run `agent-box uninstall` before removing the package through its installer.
78
+
79
+ **agent-box owns its integrations.** An integration configured somewhere else,
80
+ that the user has to assemble first, is not an integration. Settings live in
81
+ `config.json`; skills are shipped in `agent_box/skills/` and installed by
82
+ agent-box; the container gets a rendered, minimal artifact, never `config.json`
83
+ itself.
84
+
85
+ **Derived, not stored.** A fact that Git, GitHub or the tracker already owns is
86
+ read back from there. Branch names come from the task's `ab/<id>-` namespace,
87
+ the base branch from origin's default, the pull request from a head/base lookup,
88
+ the lifecycle from the board's own columns. `.agent-box.json` names the tracker
89
+ project and holds the allowed project configuration overrides. Nothing machine-readable is written into a tracker
90
+ comment: a comment is a human journal, and lifecycle is read from the tracker's
91
+ own fields.
92
+
93
+ **Role ownership.** Plan sync may update tracker descriptions and comments through
94
+ `agent-box tracker`, reading project files without changing them. The coordinator
95
+ owns Git, lifecycle, dependencies and GitHub. Other roles keep their existing limits.
96
+
97
+ **The coordinator accepts implementation.** A delegated worker reads its brief and
98
+ the code, changes project files in the working tree, and answers in Markdown;
99
+ a reviewer or scout reads and reports, changing nothing at all. The
100
+ coordinator decides from that answer what to commit and what to record in the
101
+ tracker and on GitHub. This is a contract, not credential isolation: a
102
+ delegation runs either as a native subagent of the coordinator's own session or
103
+ as a managed `codex exec` / `claude -p`, the first of which inherits the
104
+ coordinator's workspace, `.git` and credentials, so the two backends
105
+ deliberately share one contract rather than one of them acquiring private
106
+ restrictions. Workers and scouts are therefore only launched (`workflow
107
+ delegate`), never tracked: guards that only existed because the contract was
108
+ wide belong deleted, not tightened. A reviewer round is still bound to its
109
+ repository, project, task and scope by the descriptor workflow keeps beside the
110
+ round's input, which is plain readable JSON and is deliberately not treated as
111
+ unforgeable; a native reviewer's model and context are taken on trust.
112
+
113
+ **Secrets travel by name.** `--env=NAME` (Podman inherits the value) for
114
+ anything secret; `--env=NAME=VALUE` puts the value in an argv that `/proc`
115
+ exposes to other processes. `notify.sync_credentials` and
116
+ `runtime.sync_tracker_runtime` are the pattern for rendered credential files.
117
+
118
+ **Never overwrite what a user owns.** Skill directories carry a marker; ones
119
+ without it are the user's. Claude's `statusLine` slot is filled only when empty.
120
+ Hook removal only ever touches agent-box's own commands.
121
+
122
+ ## Working in the code
123
+
124
+ - **All text an agent may read must be functionally compact.** Skills, instructions,
125
+ handoffs, messages, errors, hints, CLI help and command output need enough context,
126
+ exact commands and necessary constraints to act without guessing; remove filler
127
+ and repetition without cryptic compression.
128
+ - **Comments explain why, not what.** The existing docstrings state the decision
129
+ and the alternative that was rejected. Match that; do not add narration.
130
+ - **Tests are the specification.** Every test's name and docstring says what
131
+ behaviour is being protected and why it would be wrong otherwise. A test that
132
+ restates the implementation is noise.
133
+ - **Structural vs per-exec.** Anything in `container_lifetime_args` is part of
134
+ the box's identity: changing it recreates the box. Per-invocation values go
135
+ through `invocation_env`. Choose deliberately.
136
+ - **Diagnostics are returned, not printed**, so both the launch path and
137
+ `agent-box config` can render them (`tracker_warnings` is the pattern).
138
+
139
+ ## Commands
140
+
141
+ ```bash
142
+ python3 tests/run_suite.py # full suite; isolated paths, no outer PTY
143
+ python3 -m agent_box selftest # fast, no Podman
144
+ uvx ruff check --select E4,E9,F agent_box/ tests/ # what CI lints
145
+ python3 -m agent_box config show # inspect the live config, tokens redacted
146
+ ```
147
+
148
+ The runner uses unittest discovery, temporary state/integration paths and piped
149
+ stdio. For focused runs: `python3 tests/run_suite.py discover -s tests -p test_browser.py`.
150
+ Test modules import each other by bare name, so keep discovery.
151
+
152
+ ## Gotchas
153
+
154
+ - `tests/` must never touch the developer's real `~/.claude` or `~/.agents`.
155
+ Anything that calls `config_interactive` or `apply_config` has to patch
156
+ `runtime.CLAUDE_HOME`, `runtime.CODEX_HOME`, `runtime.AGENT_SKILLS_DIR`, `runtime.MANAGED_SKILLS_SOURCE`
157
+ and the credential paths. This has bitten before.
158
+ - Module-level constants derived from `paths.py` (`AGENTS_DIR`, `TRACKER_RUNTIME_DIR`,
159
+ `CONTAINER_TRACKER_RUNTIME_DIR`) are resolved at import; tests patch them on `runtime`,
160
+ not on `paths`.
161
+ - `tests/run_suite.py` and `selftest` drop every inherited `AGENT_BOX_*` variable,
162
+ so they pass inside a workspace box as is; a bare `python3 -m unittest` does not,
163
+ and reads the session's `AGENT_BOX_RUNTIME_CONFIG` instead of its fixtures.
164
+ - The image label `io.agent-box.tools` records the built tool groups. A missing
165
+ label means *unknown*, not *empty* — never report it as drift.
166
+ - Inside a workspace box the saved configuration is not mounted: `config apply`
167
+ then applies only the skills and profiles the rendered session snapshot
168
+ describes and leaves host-only sections (notifications, hooks, status line,
169
+ credentials, Claude links) alone; the global `agent-box config` menu
170
+ refuses because it edits a file that is not there.
171
+ - `agent_box/skills/` contains short owned `ab-*` skills. Maintain them directly
172
+ and keep their command/role contracts consistent with the Python helpers.
173
+ - `.gitignore` ignores `/skills/` at the repo root only — `agent_box/skills/` is
174
+ checked in on purpose.
@@ -0,0 +1,25 @@
1
+ # Release notes
2
+
3
+ ## 1.0.0
4
+
5
+ First public release of **agent-box**, distributed on PyPI as `agent-box-tool`.
6
+ The command remains `agent-box`; Python 3.11+ and Linux are required, with no
7
+ Python runtime dependencies. Workspace containers require rootless Podman 5+.
8
+
9
+ - Run Claude Code and Codex CLI in reusable per-project workspaces, with
10
+ detachable sessions, selected host mounts and opt-in credential forwarding.
11
+ - Configure owned integrations, skills, native agent profiles and portable
12
+ tracker/workflow support from the built-in configuration interface.
13
+ - Install through uv tool or pipx from PyPI or the public Git repository.
14
+ - Use SemVer and direct forward data migrations across all later releases,
15
+ including major versions. This release establishes the first supported
16
+ public data formats and regression fixtures.
17
+ - Refresh configured integrations automatically on the first host launch after
18
+ a package update. Failed application remains retryable; `config apply` is
19
+ available for manual edits and recovery.
20
+ - Preserve running workspaces on their immutable runtime until explicit
21
+ stop/relaunch. Package upgrades preserve saved choices and workspace data.
22
+
23
+ See [installation](docs/installation.md) and
24
+ [compatibility](docs/compatibility.md) for the supported upgrade boundaries.
25
+ AUR packaging is separate follow-up work.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Alexander Mirgorod
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ include AGENTS.md CHANGELOG.md
2
+ recursive-include docs *.md
3
+ recursive-include tests *.py *.json
4
+ recursive-include tools *.py
@@ -0,0 +1,166 @@
1
+ Metadata-Version: 2.4
2
+ Name: agent-box-tool
3
+ Version: 1.0.0
4
+ Summary: Run coding agents in rootless Podman workspace boxes
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/rus364/agent-box
7
+ Project-URL: Documentation, https://github.com/rus364/agent-box/blob/main/docs/README.md
8
+ Project-URL: Repository, https://github.com/rus364/agent-box
9
+ Project-URL: Issues, https://github.com/rus364/agent-box/issues
10
+ Project-URL: Changelog, https://github.com/rus364/agent-box/blob/main/CHANGELOG.md
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Dynamic: license-file
24
+
25
+ <div align="center">
26
+
27
+ # agent-box
28
+
29
+ **Run Claude Code and Codex CLI in isolated, reusable Podman workspaces.**
30
+
31
+ One project. One shared container. Your agents, shell, tools, state, and detachable sessions stay together without giving the container your whole host.
32
+
33
+ [![CI](https://github.com/rus364/agent-box/actions/workflows/ci.yml/badge.svg)](https://github.com/rus364/agent-box/actions/workflows/ci.yml)
34
+ ![Linux](https://img.shields.io/badge/platform-Linux-informational)
35
+ ![Podman](https://img.shields.io/badge/runtime-Podman-892CA0)
36
+ ![Python](https://img.shields.io/badge/Python-3.11%2B-3776AB)
37
+ ![License](https://img.shields.io/badge/license-MIT-blue)
38
+
39
+ </div>
40
+
41
+ ---
42
+
43
+ ## Why agent-box?
44
+
45
+ AI coding agents are useful, but running them directly on your workstation
46
+ gives them the same files, credentials, tools and processes that you have.
47
+ agent-box runs Claude Code and Codex CLI inside a rootless Podman container
48
+ while keeping the workflow close to local development:
49
+
50
+ - **Workspace isolation** — only the project root and the mounts you ask for are exposed.
51
+ - **One box per project** — Claude, Codex and `agent-box shell` share the same container.
52
+ - **Same paths as the host** — `/home/you/code/project` is `/home/you/code/project` inside the box too.
53
+ - **Persistent agent state** — logins, settings and history stay in your host's `~/.claude` and `~/.codex`.
54
+ - **Detachable sessions** — sessions run under tmux and survive a closed terminal or a dropped SSH connection.
55
+ - **Nothing exposed by accident** — every credential, host directory and optional capability is a switch you turn on.
56
+
57
+ > [!IMPORTANT]
58
+ > A workspace box is one trust boundary. Claude, Codex, shells, hooks and
59
+ > daemons inside the same box share the same Unix user and PID namespace.
60
+
61
+ ## Requirements
62
+
63
+ - Linux
64
+ - Python 3.11 or newer (standard library only)
65
+ - Rootless Podman 5.0 or newer — agent-box does not fall back to Docker
66
+ - Git
67
+ - Optional: `gh`, to pass a GitHub token into the box
68
+
69
+ agent-box checks all of this before starting a box and prints the command that
70
+ fixes anything missing. Details: [Installation](docs/installation.md#requirements).
71
+
72
+ ## Installation
73
+
74
+ ```bash
75
+ # 1. Install from PyPI.
76
+ uv tool install agent-box-tool
77
+ uv tool update-shell # if the installer reports PATH setup is needed
78
+
79
+ # 2. Reopen the shell if PATH changed, then configure integrations.
80
+ agent-box config
81
+ ```
82
+
83
+ The distribution is `agent-box-tool`; the command stays `agent-box`.
84
+ [pipx, public Git and editable installs](docs/installation.md) are also supported.
85
+
86
+ 3. Log in with `claude` and `codex` on the host; agent-box reuses those logins.
87
+ 4. Start a session in your project. The workspace image is built automatically
88
+ the first time, which takes a few minutes once.
89
+
90
+ ```bash
91
+ cd ~/code/my-project
92
+ agent-box claude # or: agent-box codex
93
+ ```
94
+
95
+ Shell completion, updating and uninstalling are covered in
96
+ [Installation](docs/installation.md).
97
+
98
+ ## Quick start
99
+
100
+ ```bash
101
+ agent-box # the default agent (Claude unless you choose Codex)
102
+ agent-box shell # a shell in this project's box
103
+ agent-box attach # reattach a detached session (detach with Ctrl-\ d)
104
+ agent-box stop # end the box and every session in it
105
+ agent-box --host codex # run the host's CLI directly, without a container
106
+ agent-box doctor # check the box and its integrations
107
+ ```
108
+
109
+ Options before the agent apply to one launch, for example
110
+ `agent-box --mount ~/specs:ro --env DATABASE_URL claude`. See
111
+ [Usage](docs/usage.md) for all of them.
112
+
113
+ ## How it works
114
+
115
+ ```mermaid
116
+ flowchart LR
117
+ Host["Host workspace"] --> Launcher["agent-box"]
118
+ Launcher --> Box["Rootless Podman workspace box"]
119
+
120
+ Box --> Claude["Claude Code"]
121
+ Box --> Codex["Codex CLI"]
122
+ Box --> Shell["Shell"]
123
+
124
+ Claude --> Tmux["tmux sessions"]
125
+ Codex --> Tmux
126
+ Shell --> Tmux
127
+
128
+ State["~/.claude / ~/.codex"] -. host-backed state .-> Box
129
+ Project["Project root\nsame absolute path"] -. explicit bind mount .-> Box
130
+ ```
131
+
132
+ **Workspace box.** The first command in a project creates its box; later
133
+ commands join it. A different project gets a different box, and a box with no
134
+ workload left exits and is removed. The box mounts the Git top level of the
135
+ current directory and your agent state; any other host path, credential or
136
+ device only when you enable it.
137
+
138
+ **Host mode.** `--host` runs your installed `claude` or `codex` directly, with
139
+ your own environment and credentials. Tracker, workflow and model routing
140
+ behave the same; container-only features such as mounts and the agent browser
141
+ do not apply.
142
+
143
+ **Configuration.** Built-in defaults, then your global
144
+ `~/.config/agent-box/config.json`, then the repository's `.agent-box.json`.
145
+ `agent-box config` edits settings and applies integrations. The first host launch
146
+ after a package update refreshes configured integrations automatically; unchanged
147
+ launches leave them alone. See [compatibility and upgrades](docs/compatibility.md).
148
+
149
+ ## Documentation
150
+
151
+ | Page | What it covers |
152
+ | --- | --- |
153
+ | [Installation](docs/installation.md) | Requirements, setup, shell completion, updating, uninstalling |
154
+ | [Usage](docs/usage.md) | Sessions, options, mounts, environment, host mode, usage limits and status line |
155
+ | [Configuration](docs/configuration.md) | The menu, defaults, project configuration, `config ai` |
156
+ | [Workspace image](docs/image.md) | Included tools, optional groups, building and refreshing |
157
+ | [Security model](docs/security.md) | What a box can reach and how it is hardened |
158
+ | [Integrations](docs/integrations/README.md) | Tracker and workflow, browser, k3s, Telegram, credentials and more — all optional |
159
+ | [Troubleshooting](docs/troubleshooting.md) | Diagnostics, common problems, known limitations |
160
+
161
+ The full index, including design records for contributors, is in
162
+ [docs/](docs/README.md).
163
+
164
+ ## License
165
+
166
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,142 @@
1
+ <div align="center">
2
+
3
+ # agent-box
4
+
5
+ **Run Claude Code and Codex CLI in isolated, reusable Podman workspaces.**
6
+
7
+ One project. One shared container. Your agents, shell, tools, state, and detachable sessions stay together without giving the container your whole host.
8
+
9
+ [![CI](https://github.com/rus364/agent-box/actions/workflows/ci.yml/badge.svg)](https://github.com/rus364/agent-box/actions/workflows/ci.yml)
10
+ ![Linux](https://img.shields.io/badge/platform-Linux-informational)
11
+ ![Podman](https://img.shields.io/badge/runtime-Podman-892CA0)
12
+ ![Python](https://img.shields.io/badge/Python-3.11%2B-3776AB)
13
+ ![License](https://img.shields.io/badge/license-MIT-blue)
14
+
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## Why agent-box?
20
+
21
+ AI coding agents are useful, but running them directly on your workstation
22
+ gives them the same files, credentials, tools and processes that you have.
23
+ agent-box runs Claude Code and Codex CLI inside a rootless Podman container
24
+ while keeping the workflow close to local development:
25
+
26
+ - **Workspace isolation** — only the project root and the mounts you ask for are exposed.
27
+ - **One box per project** — Claude, Codex and `agent-box shell` share the same container.
28
+ - **Same paths as the host** — `/home/you/code/project` is `/home/you/code/project` inside the box too.
29
+ - **Persistent agent state** — logins, settings and history stay in your host's `~/.claude` and `~/.codex`.
30
+ - **Detachable sessions** — sessions run under tmux and survive a closed terminal or a dropped SSH connection.
31
+ - **Nothing exposed by accident** — every credential, host directory and optional capability is a switch you turn on.
32
+
33
+ > [!IMPORTANT]
34
+ > A workspace box is one trust boundary. Claude, Codex, shells, hooks and
35
+ > daemons inside the same box share the same Unix user and PID namespace.
36
+
37
+ ## Requirements
38
+
39
+ - Linux
40
+ - Python 3.11 or newer (standard library only)
41
+ - Rootless Podman 5.0 or newer — agent-box does not fall back to Docker
42
+ - Git
43
+ - Optional: `gh`, to pass a GitHub token into the box
44
+
45
+ agent-box checks all of this before starting a box and prints the command that
46
+ fixes anything missing. Details: [Installation](docs/installation.md#requirements).
47
+
48
+ ## Installation
49
+
50
+ ```bash
51
+ # 1. Install from PyPI.
52
+ uv tool install agent-box-tool
53
+ uv tool update-shell # if the installer reports PATH setup is needed
54
+
55
+ # 2. Reopen the shell if PATH changed, then configure integrations.
56
+ agent-box config
57
+ ```
58
+
59
+ The distribution is `agent-box-tool`; the command stays `agent-box`.
60
+ [pipx, public Git and editable installs](docs/installation.md) are also supported.
61
+
62
+ 3. Log in with `claude` and `codex` on the host; agent-box reuses those logins.
63
+ 4. Start a session in your project. The workspace image is built automatically
64
+ the first time, which takes a few minutes once.
65
+
66
+ ```bash
67
+ cd ~/code/my-project
68
+ agent-box claude # or: agent-box codex
69
+ ```
70
+
71
+ Shell completion, updating and uninstalling are covered in
72
+ [Installation](docs/installation.md).
73
+
74
+ ## Quick start
75
+
76
+ ```bash
77
+ agent-box # the default agent (Claude unless you choose Codex)
78
+ agent-box shell # a shell in this project's box
79
+ agent-box attach # reattach a detached session (detach with Ctrl-\ d)
80
+ agent-box stop # end the box and every session in it
81
+ agent-box --host codex # run the host's CLI directly, without a container
82
+ agent-box doctor # check the box and its integrations
83
+ ```
84
+
85
+ Options before the agent apply to one launch, for example
86
+ `agent-box --mount ~/specs:ro --env DATABASE_URL claude`. See
87
+ [Usage](docs/usage.md) for all of them.
88
+
89
+ ## How it works
90
+
91
+ ```mermaid
92
+ flowchart LR
93
+ Host["Host workspace"] --> Launcher["agent-box"]
94
+ Launcher --> Box["Rootless Podman workspace box"]
95
+
96
+ Box --> Claude["Claude Code"]
97
+ Box --> Codex["Codex CLI"]
98
+ Box --> Shell["Shell"]
99
+
100
+ Claude --> Tmux["tmux sessions"]
101
+ Codex --> Tmux
102
+ Shell --> Tmux
103
+
104
+ State["~/.claude / ~/.codex"] -. host-backed state .-> Box
105
+ Project["Project root\nsame absolute path"] -. explicit bind mount .-> Box
106
+ ```
107
+
108
+ **Workspace box.** The first command in a project creates its box; later
109
+ commands join it. A different project gets a different box, and a box with no
110
+ workload left exits and is removed. The box mounts the Git top level of the
111
+ current directory and your agent state; any other host path, credential or
112
+ device only when you enable it.
113
+
114
+ **Host mode.** `--host` runs your installed `claude` or `codex` directly, with
115
+ your own environment and credentials. Tracker, workflow and model routing
116
+ behave the same; container-only features such as mounts and the agent browser
117
+ do not apply.
118
+
119
+ **Configuration.** Built-in defaults, then your global
120
+ `~/.config/agent-box/config.json`, then the repository's `.agent-box.json`.
121
+ `agent-box config` edits settings and applies integrations. The first host launch
122
+ after a package update refreshes configured integrations automatically; unchanged
123
+ launches leave them alone. See [compatibility and upgrades](docs/compatibility.md).
124
+
125
+ ## Documentation
126
+
127
+ | Page | What it covers |
128
+ | --- | --- |
129
+ | [Installation](docs/installation.md) | Requirements, setup, shell completion, updating, uninstalling |
130
+ | [Usage](docs/usage.md) | Sessions, options, mounts, environment, host mode, usage limits and status line |
131
+ | [Configuration](docs/configuration.md) | The menu, defaults, project configuration, `config ai` |
132
+ | [Workspace image](docs/image.md) | Included tools, optional groups, building and refreshing |
133
+ | [Security model](docs/security.md) | What a box can reach and how it is hardened |
134
+ | [Integrations](docs/integrations/README.md) | Tracker and workflow, browser, k3s, Telegram, credentials and more — all optional |
135
+ | [Troubleshooting](docs/troubleshooting.md) | Diagnostics, common problems, known limitations |
136
+
137
+ The full index, including design records for contributors, is in
138
+ [docs/](docs/README.md).
139
+
140
+ ## License
141
+
142
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,2 @@
1
+ *
2
+ !nested_podman.py