deepagents-cli 0.0.30__tar.gz → 0.0.32__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 (147) hide show
  1. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/CHANGELOG.md +31 -0
  2. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/PKG-INFO +22 -13
  3. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/README.md +20 -11
  4. deepagents_cli-0.0.32/deepagents_cli/_version.py +3 -0
  5. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/agent.py +148 -22
  6. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/app.py +298 -57
  7. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/app.tcss +55 -0
  8. deepagents_cli-0.0.32/deepagents_cli/ask_user.py +376 -0
  9. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/config.py +143 -6
  10. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/langsmith.py +25 -16
  11. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/main.py +65 -4
  12. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/model_config.py +215 -1
  13. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/non_interactive.py +29 -7
  14. deepagents_cli-0.0.32/deepagents_cli/output.py +69 -0
  15. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/sessions.py +509 -72
  16. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/skills/commands.py +145 -37
  17. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/system_prompt.md +3 -4
  18. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/textual_adapter.py +219 -34
  19. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/tool_display.py +6 -1
  20. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/ui.py +69 -42
  21. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/approval.py +14 -14
  22. deepagents_cli-0.0.32/deepagents_cli/widgets/ask_user.py +399 -0
  23. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/autocomplete.py +2 -1
  24. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/chat_input.py +90 -4
  25. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/messages.py +7 -3
  26. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/status.py +50 -7
  27. deepagents_cli-0.0.32/deepagents_cli/widgets/thread_selector.py +1740 -0
  28. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/welcome.py +23 -8
  29. deepagents_cli-0.0.32/images/cli.png +0 -0
  30. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/pyproject.toml +2 -2
  31. deepagents_cli-0.0.32/scripts/install.sh +77 -0
  32. deepagents_cli-0.0.32/tests/unit_tests/skills/test_skills_json.py +154 -0
  33. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_agent.py +309 -0
  34. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_app.py +490 -3
  35. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_approval.py +77 -0
  36. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_args.py +83 -1
  37. deepagents_cli-0.0.32/tests/unit_tests/test_ask_user.py +601 -0
  38. deepagents_cli-0.0.32/tests/unit_tests/test_ask_user_middleware.py +221 -0
  39. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_chat_input.py +140 -2
  40. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_compact.py +1 -4
  41. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_config.py +15 -0
  42. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_messages.py +6 -6
  43. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_model_config.py +131 -0
  44. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_model_switch.py +34 -0
  45. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_non_interactive.py +55 -0
  46. deepagents_cli-0.0.32/tests/unit_tests/test_output.py +62 -0
  47. deepagents_cli-0.0.32/tests/unit_tests/test_reload.py +240 -0
  48. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_sessions.py +777 -16
  49. deepagents_cli-0.0.32/tests/unit_tests/test_status.py +133 -0
  50. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_textual_adapter.py +293 -7
  51. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_thread_selector.py +1035 -159
  52. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_version.py +0 -2
  53. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_welcome.py +105 -1
  54. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/uv.lock +20 -20
  55. deepagents_cli-0.0.30/deepagents_cli/_version.py +0 -3
  56. deepagents_cli-0.0.30/deepagents_cli/widgets/thread_selector.py +0 -698
  57. deepagents_cli-0.0.30/images/cli.png +0 -0
  58. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/.gitignore +0 -0
  59. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/Makefile +0 -0
  60. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/__init__.py +0 -0
  61. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/__main__.py +0 -0
  62. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/built_in_skills/__init__.py +0 -0
  63. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
  64. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  65. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  66. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/clipboard.py +0 -0
  67. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/default_agent_prompt.md +0 -0
  68. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/file_ops.py +0 -0
  69. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/hooks.py +0 -0
  70. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/input.py +0 -0
  71. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/__init__.py +0 -0
  72. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/daytona.py +0 -0
  73. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/modal.py +0 -0
  74. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/runloop.py +0 -0
  75. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/sandbox_factory.py +0 -0
  76. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/integrations/sandbox_provider.py +0 -0
  77. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/local_context.py +0 -0
  78. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/mcp_tools.py +0 -0
  79. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/mcp_trust.py +0 -0
  80. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/media_utils.py +0 -0
  81. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/project_utils.py +0 -0
  82. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/py.typed +0 -0
  83. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/skills/__init__.py +0 -0
  84. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/skills/load.py +0 -0
  85. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/subagents.py +0 -0
  86. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/tools.py +0 -0
  87. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/unicode_security.py +0 -0
  88. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/update_check.py +0 -0
  89. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/__init__.py +0 -0
  90. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/_links.py +0 -0
  91. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/diff.py +0 -0
  92. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/history.py +0 -0
  93. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/loading.py +0 -0
  94. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/mcp_viewer.py +0 -0
  95. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/message_store.py +0 -0
  96. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/model_selector.py +0 -0
  97. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/tool_renderers.py +0 -0
  98. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/deepagents_cli/widgets/tool_widgets.py +0 -0
  99. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/arxiv-search/SKILL.md +0 -0
  100. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  101. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/langgraph-docs/SKILL.md +0 -0
  102. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/skill-creator/SKILL.md +0 -0
  103. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  104. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  105. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/examples/skills/web-research/SKILL.md +0 -0
  106. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/scripts/check_imports.py +0 -0
  107. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/README.md +0 -0
  108. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/__init__.py +0 -0
  109. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/benchmarks/__init__.py +0 -0
  110. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  111. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/conftest.py +0 -0
  112. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/test_acp_mode.py +0 -0
  113. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/test_sandbox_factory.py +0 -0
  114. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/integration_tests/test_sandbox_operations.py +0 -0
  115. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/__init__.py +0 -0
  116. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/conftest.py +0 -0
  117. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/skills/__init__.py +0 -0
  118. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/skills/test_commands.py +0 -0
  119. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/skills/test_load.py +0 -0
  120. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_autocomplete.py +0 -0
  121. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_charset.py +0 -0
  122. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_compact_tool.py +0 -0
  123. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_end_to_end.py +0 -0
  124. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_exception_handling.py +0 -0
  125. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_file_ops.py +0 -0
  126. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_history.py +0 -0
  127. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_hooks.py +0 -0
  128. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_imports.py +0 -0
  129. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_input_parsing.py +0 -0
  130. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_local_context.py +0 -0
  131. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_main.py +0 -0
  132. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_main_acp_mode.py +0 -0
  133. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_main_args.py +0 -0
  134. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_mcp_tools.py +0 -0
  135. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_mcp_trust.py +0 -0
  136. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_mcp_viewer.py +0 -0
  137. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_media_utils.py +0 -0
  138. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_message_store.py +0 -0
  139. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_model_selector.py +0 -0
  140. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_shell_allow_list.py +0 -0
  141. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_subagents.py +0 -0
  142. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_token_tracker.py +0 -0
  143. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_ui.py +0 -0
  144. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_unicode_security.py +0 -0
  145. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/test_update_check.py +0 -0
  146. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/tools/__init__.py +0 -0
  147. {deepagents_cli-0.0.30 → deepagents_cli-0.0.32}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.32](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.31...deepagents-cli==0.0.32) (2026-03-11)
4
+
5
+ ### Features
6
+
7
+ * Add token breakdown to `/tokens` and simplify `/compact` messages ([#1782](https://github.com/langchain-ai/deepagents/issues/1782)) ([2f37bff](https://github.com/langchain-ai/deepagents/commit/2f37bffa9d7a9ced6945abe4ab6bc3409bfb97b1))
8
+ * `--json` flag for machine-readable output ([#1768](https://github.com/langchain-ai/deepagents/issues/1768)) ([6f62496](https://github.com/langchain-ai/deepagents/commit/6f62496bb699dfa6086ee1850b83f38d3b1242fa))
9
+
10
+ ### Bug Fixes
11
+
12
+ * Work around VS Code 1.110 space key regression ([#1748](https://github.com/langchain-ai/deepagents/issues/1748)) ([f5fe431](https://github.com/langchain-ai/deepagents/commit/f5fe4315143bf5b636cf42fc98cbfe3d99918cfc))
13
+
14
+ ## [0.0.31](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.30...deepagents-cli==0.0.31) (2026-03-09)
15
+
16
+ ### Features
17
+
18
+ * Opt-in `ask_user` tool for interactive agent questions ([#1377](https://github.com/langchain-ai/deepagents/issues/1377)) ([de7068d](https://github.com/langchain-ai/deepagents/commit/de7068d21fd4b932c6e53f500b0ea3b02a04c0aa))
19
+ * Big thread improvements!
20
+ * Rework `/thread` switcher with search, columns, delete, and sort toggle ([#1723](https://github.com/langchain-ai/deepagents/issues/1723)) ([8b21ddb](https://github.com/langchain-ai/deepagents/commit/8b21ddb2ff7f13d6b3ffcbf2fe605bfbadbc3d38))
21
+ * Track and display working directory per thread ([#1735](https://github.com/langchain-ai/deepagents/issues/1735)) ([0e4f25d](https://github.com/langchain-ai/deepagents/commit/0e4f25dfbc3e15653bc3f8a6d32a0a61ead4ba82))
22
+ * Add `-n` short flag for `threads list --limit` ([#1731](https://github.com/langchain-ai/deepagents/issues/1731)) ([8bbace9](https://github.com/langchain-ai/deepagents/commit/8bbace9facd1e33757521e835dcb291accd2fa91))
23
+ * Add sort, branch filter, and verbose flags to threads list ([#1732](https://github.com/langchain-ai/deepagents/issues/1732)) ([11dc8e3](https://github.com/langchain-ai/deepagents/commit/11dc8e3397ef9e9dbe8b15578e9258544ed6b452))
24
+ * Tailor system prompt for non-interactive mode ([#1727](https://github.com/langchain-ai/deepagents/issues/1727)) ([871e5cf](https://github.com/langchain-ai/deepagents/commit/871e5cf76b1a7e7cf7175b4415bb8e2206da39ec))
25
+ * `/reload` command for in-session config refresh ([#1722](https://github.com/langchain-ai/deepagents/issues/1722)) ([381aee6](https://github.com/langchain-ai/deepagents/commit/381aee6d223fe3d866bedfe3a534916f419a4435))
26
+ * Rearrange HITL option order in approval menu ([#1726](https://github.com/langchain-ai/deepagents/issues/1726)) ([0ca6cb2](https://github.com/langchain-ai/deepagents/commit/0ca6cb237b6da538bad2b4bf292942c8db72ec1f))
27
+
28
+ ### Bug Fixes
29
+
30
+ * Localize newline shortcut labels by platform ([#1721](https://github.com/langchain-ai/deepagents/issues/1721)) ([f35576b](https://github.com/langchain-ai/deepagents/commit/f35576bafac711d6c04f1f9dd40ec97a90e30060))
31
+ * Prevent `shift+enter` from sending `backslash+enter` ([#1728](https://github.com/langchain-ai/deepagents/issues/1728)) ([81dceb0](https://github.com/langchain-ai/deepagents/commit/81dceb043097a47702bb5a0227a8f12e9055bd05))
32
+ * Write files with langsmith sandbox ([#1714](https://github.com/langchain-ai/deepagents/issues/1714)) ([5933c9e](https://github.com/langchain-ai/deepagents/commit/5933c9e2995c422e43649c61981e086ac1eaf725))
33
+
3
34
  ## [0.0.30](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.29...deepagents-cli==0.0.30) (2026-03-07)
4
35
 
5
36
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-cli
3
- Version: 0.0.30
3
+ Version: 0.0.32
4
4
  Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
5
5
  Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
6
6
  Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
@@ -26,7 +26,7 @@ Requires-Python: <4.0,>=3.11
26
26
  Requires-Dist: aiosqlite<1.0.0,>=0.19.0
27
27
  Requires-Dist: daytona<1.0.0,>=0.113.0
28
28
  Requires-Dist: deepagents-acp>=0.0.4
29
- Requires-Dist: deepagents==0.4.7
29
+ Requires-Dist: deepagents==0.4.10
30
30
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.0
31
31
  Requires-Dist: langchain-openai<2.0.0,>=1.1.8
32
32
  Requires-Dist: langchain<2.0.0,>=1.2.10
@@ -114,12 +114,12 @@ Description-Content-Type: text/markdown
114
114
  ## Quick Install
115
115
 
116
116
  ```bash
117
- curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/scripts/install.sh | bash
117
+ curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/cli/scripts/install.sh | bash
118
118
  ```
119
119
 
120
120
  ```bash
121
121
  # With model provider extras (OpenAI is included by default)
122
- DEEPAGENTS_EXTRAS="anthropic,groq" curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/scripts/install.sh | bash
122
+ DEEPAGENTS_EXTRAS="anthropic,groq" curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/cli/scripts/install.sh | bash
123
123
  ```
124
124
 
125
125
  Or install directly with `uv`:
@@ -137,20 +137,25 @@ deepagents
137
137
 
138
138
  ## 🤔 What is this?
139
139
 
140
- Using an LLM to call tools in a loop is the simplest form of an agent. This architecture, however, can yield agents that are "shallow" and fail to plan and act over longer, more complex tasks.
140
+ The fastest way to start using Deep Agents. `deepagents-cli` is a pre-built coding agent in your terminal similar to Claude Code or Cursor — powered by any LLM that supports tool calling. One install command and you're up and running, no code required.
141
141
 
142
- Applications like "Deep Research", "Manus", and "Claude Code" have gotten around this limitation by implementing a combination of four things: a **planning tool**, **sub agents**, access to a **file system**, and a **detailed prompt**.
142
+ **What the CLI adds on top of the SDK:**
143
143
 
144
- `deepagents` is a Python package that implements these in a general purpose way so that you can easily create a Deep Agent for your application. For a full overview and quickstart of Deep Agents, the best resource is our [docs](https://docs.langchain.com/oss/python/deepagents/overview).
145
-
146
- **Acknowledgements: This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.**
144
+ - **Interactive TUI** rich terminal interface with streaming responses
145
+ - **Conversation resume** — pick up where you left off across sessions
146
+ - **Web search** ground responses in live information
147
+ - **Remote sandboxes** — run code in isolated environments (Modal, Runloop, Daytona, & more)
148
+ - **Persistent memory** — agent remembers context across conversations
149
+ - **Custom skills** — extend the agent with your own slash commands
150
+ - **Headless mode** — run non-interactively for scripting and CI
151
+ - **Human-in-the-loop** — approve or reject tool calls before execution
147
152
 
148
153
  ## 📖 Resources
149
154
 
150
- - **[CLI Documentation](https://docs.langchain.com/oss/python/deepagents/cli/overview)** — Full documentation
151
- - **[CLI Source](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)** — Full source code
152
- - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — The underlying agent harness
153
- - **[Chat LangChain](https://chat.langchain.com)** - Chat interactively with the docs
155
+ - **[CLI Documentation](https://docs.langchain.com/oss/python/deepagents/cli/overview)**
156
+ - **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md)**
157
+ - **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)**
158
+ - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** underlying agent harness
154
159
 
155
160
  ## 📕 Releases & Versioning
156
161
 
@@ -161,3 +166,7 @@ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Ve
161
166
  As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
162
167
 
163
168
  For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
169
+
170
+ ## 🤝 Acknowledgements
171
+
172
+ This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.
@@ -12,12 +12,12 @@
12
12
  ## Quick Install
13
13
 
14
14
  ```bash
15
- curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/scripts/install.sh | bash
15
+ curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/cli/scripts/install.sh | bash
16
16
  ```
17
17
 
18
18
  ```bash
19
19
  # With model provider extras (OpenAI is included by default)
20
- DEEPAGENTS_EXTRAS="anthropic,groq" curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/scripts/install.sh | bash
20
+ DEEPAGENTS_EXTRAS="anthropic,groq" curl -LsSf https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/cli/scripts/install.sh | bash
21
21
  ```
22
22
 
23
23
  Or install directly with `uv`:
@@ -35,20 +35,25 @@ deepagents
35
35
 
36
36
  ## 🤔 What is this?
37
37
 
38
- Using an LLM to call tools in a loop is the simplest form of an agent. This architecture, however, can yield agents that are "shallow" and fail to plan and act over longer, more complex tasks.
38
+ The fastest way to start using Deep Agents. `deepagents-cli` is a pre-built coding agent in your terminal similar to Claude Code or Cursor — powered by any LLM that supports tool calling. One install command and you're up and running, no code required.
39
39
 
40
- Applications like "Deep Research", "Manus", and "Claude Code" have gotten around this limitation by implementing a combination of four things: a **planning tool**, **sub agents**, access to a **file system**, and a **detailed prompt**.
40
+ **What the CLI adds on top of the SDK:**
41
41
 
42
- `deepagents` is a Python package that implements these in a general purpose way so that you can easily create a Deep Agent for your application. For a full overview and quickstart of Deep Agents, the best resource is our [docs](https://docs.langchain.com/oss/python/deepagents/overview).
43
-
44
- **Acknowledgements: This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.**
42
+ - **Interactive TUI** rich terminal interface with streaming responses
43
+ - **Conversation resume** — pick up where you left off across sessions
44
+ - **Web search** ground responses in live information
45
+ - **Remote sandboxes** — run code in isolated environments (Modal, Runloop, Daytona, & more)
46
+ - **Persistent memory** — agent remembers context across conversations
47
+ - **Custom skills** — extend the agent with your own slash commands
48
+ - **Headless mode** — run non-interactively for scripting and CI
49
+ - **Human-in-the-loop** — approve or reject tool calls before execution
45
50
 
46
51
  ## 📖 Resources
47
52
 
48
- - **[CLI Documentation](https://docs.langchain.com/oss/python/deepagents/cli/overview)** — Full documentation
49
- - **[CLI Source](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)** — Full source code
50
- - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — The underlying agent harness
51
- - **[Chat LangChain](https://chat.langchain.com)** - Chat interactively with the docs
53
+ - **[CLI Documentation](https://docs.langchain.com/oss/python/deepagents/cli/overview)**
54
+ - **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md)**
55
+ - **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)**
56
+ - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** underlying agent harness
52
57
 
53
58
  ## 📕 Releases & Versioning
54
59
 
@@ -59,3 +64,7 @@ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Ve
59
64
  As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
60
65
 
61
66
  For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
67
+
68
+ ## 🤝 Acknowledgements
69
+
70
+ This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.
@@ -0,0 +1,3 @@
1
+ """Version information for `deepagents-cli`."""
2
+
3
+ __version__ = "0.0.32" # x-release-please-version
@@ -2,7 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import logging
5
6
  import os
7
+ import re
6
8
  import shutil
7
9
  import tempfile
8
10
  from pathlib import Path
@@ -29,6 +31,7 @@ if TYPE_CHECKING:
29
31
  from langgraph.runtime import Runtime
30
32
 
31
33
  from deepagents_cli.mcp_tools import MCPServerInfo
34
+ from deepagents_cli.output import OutputFormat
32
35
 
33
36
  from deepagents_cli.config import (
34
37
  COLORS,
@@ -50,6 +53,8 @@ from deepagents_cli.unicode_security import (
50
53
  summarize_issues,
51
54
  )
52
55
 
56
+ logger = logging.getLogger(__name__)
57
+
53
58
  DEFAULT_AGENT_NAME = "agent"
54
59
  """The default agent name used when no `-a` flag is provided."""
55
60
 
@@ -57,11 +62,20 @@ REQUIRE_COMPACT_TOOL_APPROVAL: bool = True
57
62
  """When `True`, `compact_conversation` requires HITL approval like other gated tools."""
58
63
 
59
64
 
60
- def list_agents() -> None:
61
- """List all available agents."""
65
+ def list_agents(*, output_format: OutputFormat = "text") -> None:
66
+ """List all available agents.
67
+
68
+ Args:
69
+ output_format: Output format — `'text'` (Rich) or `'json'`.
70
+ """
62
71
  agents_dir = settings.user_deepagents_dir
63
72
 
64
73
  if not agents_dir.exists() or not any(agents_dir.iterdir()):
74
+ if output_format == "json":
75
+ from deepagents_cli.output import write_json
76
+
77
+ write_json("list", [])
78
+ return
65
79
  console.print("[yellow]No agents found.[/yellow]")
66
80
  console.print(
67
81
  "[dim]Agents will be created in ~/.deepagents/ "
@@ -70,6 +84,24 @@ def list_agents() -> None:
70
84
  )
71
85
  return
72
86
 
87
+ if output_format == "json":
88
+ from deepagents_cli.output import write_json
89
+
90
+ agents = []
91
+ for agent_path in sorted(agents_dir.iterdir()):
92
+ if agent_path.is_dir():
93
+ agent_name = agent_path.name
94
+ agents.append(
95
+ {
96
+ "name": agent_name,
97
+ "path": str(agent_path),
98
+ "has_agents_md": (agent_path / "AGENTS.md").exists(),
99
+ "is_default": agent_name == DEFAULT_AGENT_NAME,
100
+ }
101
+ )
102
+ write_json("list", agents)
103
+ return
104
+
73
105
  console.print("\n[bold]Available Agents:[/bold]\n", style=COLORS["primary"])
74
106
 
75
107
  for agent_path in sorted(agents_dir.iterdir()):
@@ -97,8 +129,19 @@ def list_agents() -> None:
97
129
  console.print()
98
130
 
99
131
 
100
- def reset_agent(agent_name: str, source_agent: str | None = None) -> None:
101
- """Reset an agent to default or copy from another agent."""
132
+ def reset_agent(
133
+ agent_name: str,
134
+ source_agent: str | None = None,
135
+ *,
136
+ output_format: OutputFormat = "text",
137
+ ) -> None:
138
+ """Reset an agent to default or copy from another agent.
139
+
140
+ Args:
141
+ agent_name: Name of the agent to reset.
142
+ source_agent: Copy AGENTS.md from this agent instead of default.
143
+ output_format: Output format — `'text'` (Rich) or `'json'`.
144
+ """
102
145
  agents_dir = settings.user_deepagents_dir
103
146
  agent_dir = agents_dir / agent_name
104
147
 
@@ -121,14 +164,28 @@ def reset_agent(agent_name: str, source_agent: str | None = None) -> None:
121
164
 
122
165
  if agent_dir.exists():
123
166
  shutil.rmtree(agent_dir)
124
- console.print(
125
- f"Removed existing agent directory: {agent_dir}", style=COLORS["tool"]
126
- )
167
+ if output_format != "json":
168
+ console.print(
169
+ f"Removed existing agent directory: {agent_dir}", style=COLORS["tool"]
170
+ )
127
171
 
128
172
  agent_dir.mkdir(parents=True, exist_ok=True)
129
173
  agent_md = agent_dir / "AGENTS.md"
130
174
  agent_md.write_text(source_content)
131
175
 
176
+ if output_format == "json":
177
+ from deepagents_cli.output import write_json
178
+
179
+ write_json(
180
+ "reset",
181
+ {
182
+ "agent": agent_name,
183
+ "reset_to": source_agent or "default",
184
+ "path": str(agent_dir),
185
+ },
186
+ )
187
+ return
188
+
132
189
  console.print(
133
190
  f"{get_glyphs().checkmark} Agent '{agent_name}' reset to {action_desc}",
134
191
  style=COLORS["primary"],
@@ -136,12 +193,17 @@ def reset_agent(agent_name: str, source_agent: str | None = None) -> None:
136
193
  console.print(f"Location: {agent_dir}\n", style=COLORS["dim"])
137
194
 
138
195
 
139
- def get_system_prompt(assistant_id: str, sandbox_type: str | None = None) -> str:
196
+ def get_system_prompt(
197
+ assistant_id: str,
198
+ sandbox_type: str | None = None,
199
+ *,
200
+ interactive: bool = True,
201
+ ) -> str:
140
202
  """Get the base system prompt for the agent.
141
203
 
142
- Loads the immutable system prompt from `system_prompt.md` and
204
+ Loads the base system prompt template from `system_prompt.md` and
143
205
  interpolates dynamic sections (model identity, working directory,
144
- skills path).
206
+ skills path, execution mode).
145
207
 
146
208
  Args:
147
209
  assistant_id: The agent identifier for path references
@@ -149,6 +211,8 @@ def get_system_prompt(assistant_id: str, sandbox_type: str | None = None) -> str
149
211
  (`'daytona'`, `'langsmith'`, `'modal'`, `'runloop'`).
150
212
 
151
213
  If `None`, agent is operating in local mode.
214
+ interactive: When `False`, the prompt is tailored for headless
215
+ non-interactive execution (no human in the loop).
152
216
 
153
217
  Returns:
154
218
  The system prompt string
@@ -166,6 +230,41 @@ def get_system_prompt(assistant_id: str, sandbox_type: str | None = None) -> str
166
230
 
167
231
  skills_path = f"~/.deepagents/{assistant_id}/skills/"
168
232
 
233
+ if interactive:
234
+ mode_description = "an interactive CLI on the user's computer"
235
+ interactive_preamble = (
236
+ "The user sends you messages and you respond with text and tool "
237
+ "calls. Your tools run on the user's machine. The user can see "
238
+ "your responses and tool outputs in real time, so keep them "
239
+ "informed — but don't over-explain."
240
+ )
241
+ ambiguity_guidance = (
242
+ "- If the request is ambiguous, ask questions before acting.\n"
243
+ "- If asked how to approach something, explain first, then act."
244
+ )
245
+ else:
246
+ mode_description = (
247
+ "non-interactive (headless) mode — there is no human operator "
248
+ "monitoring your output in real time"
249
+ )
250
+ interactive_preamble = (
251
+ "You received a single task and must complete it fully and "
252
+ "autonomously. There is no human available to answer follow-up "
253
+ "questions, so do NOT ask for clarification — make reasonable "
254
+ "assumptions and proceed."
255
+ )
256
+ ambiguity_guidance = (
257
+ "- Do NOT ask clarifying questions — there is no human to answer "
258
+ "them. Make reasonable assumptions and proceed.\n"
259
+ "- If you encounter ambiguity, choose the most reasonable "
260
+ "interpretation and note your assumption briefly.\n"
261
+ "- Always use non-interactive command variants — no human is "
262
+ "available to respond to prompts. Examples: `npm init -y` not "
263
+ "`npm init`, `apt-get install -y` not `apt-get install`, "
264
+ "`yes |` or `--no-input`/`--non-interactive` flags where "
265
+ "available. Never run commands that block waiting for stdin."
266
+ )
267
+
169
268
  # Build model identity section
170
269
  model_identity_section = ""
171
270
  if settings.model_name:
@@ -195,7 +294,14 @@ def get_system_prompt(assistant_id: str, sandbox_type: str | None = None) -> str
195
294
  f"- Use `{working_dir}` as your working directory for all operations\n\n"
196
295
  )
197
296
  else:
198
- cwd = Path.cwd()
297
+ try:
298
+ cwd = Path.cwd()
299
+ except OSError:
300
+ logger.warning(
301
+ "Could not determine working directory for system prompt",
302
+ exc_info=True,
303
+ )
304
+ cwd = Path()
199
305
  working_dir_section = (
200
306
  f"### Current Working Directory\n\n"
201
307
  f"The filesystem backend is currently operating in: `{cwd}`\n\n"
@@ -208,12 +314,22 @@ def get_system_prompt(assistant_id: str, sandbox_type: str | None = None) -> str
208
314
  f"- Never use relative paths - always construct full absolute paths\n\n"
209
315
  )
210
316
 
211
- return (
212
- template.replace("{model_identity_section}", model_identity_section)
317
+ result = (
318
+ template.replace("{mode_description}", mode_description)
319
+ .replace("{interactive_preamble}", interactive_preamble)
320
+ .replace("{ambiguity_guidance}", ambiguity_guidance)
321
+ .replace("{model_identity_section}", model_identity_section)
213
322
  .replace("{working_dir_section}", working_dir_section)
214
323
  .replace("{skills_path}", skills_path)
215
324
  )
216
325
 
326
+ # Detect unreplaced placeholders (defense-in-depth for template typos)
327
+ unreplaced = re.findall(r"\{[a-z_]+\}", result)
328
+ if unreplaced:
329
+ logger.warning("System prompt contains unreplaced placeholders: %s", unreplaced)
330
+
331
+ return result
332
+
217
333
 
218
334
  def _format_write_file_description(
219
335
  tool_call: ToolCall, _state: AgentState[Any], _runtime: Runtime[Any]
@@ -431,10 +547,12 @@ def create_cli_agent(
431
547
  sandbox: SandboxBackendProtocol | None = None,
432
548
  sandbox_type: str | None = None,
433
549
  system_prompt: str | None = None,
550
+ interactive: bool = True,
434
551
  auto_approve: bool = False,
435
552
  enable_memory: bool = True,
436
553
  enable_skills: bool = True,
437
554
  enable_shell: bool = True,
555
+ enable_ask_user: bool = False,
438
556
  checkpointer: BaseCheckpointSaver | None = None,
439
557
  mcp_server_info: list[MCPServerInfo] | None = None,
440
558
  ) -> tuple[Pregel, CompositeBackend]:
@@ -456,7 +574,11 @@ def create_cli_agent(
456
574
  Used for system prompt generation.
457
575
  system_prompt: Override the default system prompt.
458
576
 
459
- If `None`, generates one based on `sandbox_type` and `assistant_id`.
577
+ If `None`, generates one based on `sandbox_type`, `assistant_id`,
578
+ and `interactive`.
579
+ interactive: When `False`, the auto-generated system prompt is
580
+ tailored for headless non-interactive execution. Ignored when
581
+ `system_prompt` is provided explicitly.
460
582
  auto_approve: If `True`, no tools trigger human-in-the-loop
461
583
  interrupts — all calls (shell execution, file writes/edits,
462
584
  web search, URL fetch) run automatically.
@@ -467,6 +589,7 @@ def create_cli_agent(
467
589
  enable_skills: Enable `SkillsMiddleware` for custom agent skills
468
590
  enable_shell: Enable shell execution via `LocalShellBackend`
469
591
  (only in local mode). When enabled, the `execute` tool is available.
592
+ enable_ask_user: Enable the `ask_user` tool for interactive questioning.
470
593
  checkpointer: Optional checkpointer for session persistence.
471
594
 
472
595
  If `None`, uses `InMemorySaver` (no persistence across
@@ -523,6 +646,12 @@ def create_cli_agent(
523
646
  # Build middleware stack based on enabled features
524
647
  agent_middleware = []
525
648
 
649
+ # Add ask_user middleware (must be early so its tool is available)
650
+ if enable_ask_user:
651
+ from deepagents_cli.ask_user import AskUserMiddleware
652
+
653
+ agent_middleware.append(AskUserMiddleware())
654
+
526
655
  # Add memory middleware
527
656
  if enable_memory:
528
657
  memory_sources = [str(settings.get_user_agent_md_path(assistant_id))]
@@ -592,7 +721,9 @@ def create_cli_agent(
592
721
  # Get or use custom system prompt
593
722
  if system_prompt is None:
594
723
  system_prompt = get_system_prompt(
595
- assistant_id=assistant_id, sandbox_type=sandbox_type
724
+ assistant_id=assistant_id,
725
+ sandbox_type=sandbox_type,
726
+ interactive=interactive,
596
727
  )
597
728
 
598
729
  # Configure interrupt_on based on auto_approve setting
@@ -635,15 +766,10 @@ def create_cli_agent(
635
766
 
636
767
  model = resolve_model(model)
637
768
 
638
- from deepagents.middleware.summarization import (
639
- SummarizationToolMiddleware,
640
- create_summarization_middleware,
641
- )
769
+ from deepagents.middleware.summarization import create_summarization_tool_middleware
642
770
 
643
771
  agent_middleware.append(
644
- SummarizationToolMiddleware(
645
- create_summarization_middleware(model, composite_backend)
646
- )
772
+ create_summarization_tool_middleware(model, composite_backend)
647
773
  )
648
774
 
649
775
  # Create the agent