agent-cli 0.87.0__tar.gz → 0.89.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 (382) hide show
  1. {agent_cli-0.87.0/agent_cli/dev/skill → agent_cli-0.89.0/.claude/skills/agent-cli-dev}/SKILL.md +27 -10
  2. {agent_cli-0.87.0/.claude → agent_cli-0.89.0/.claude-plugin}/skills/agent-cli-dev/SKILL.md +27 -10
  3. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/docs.yml +3 -3
  4. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/release-drafter.yml +1 -1
  5. {agent_cli-0.87.0 → agent_cli-0.89.0}/.pre-commit-config.yaml +2 -2
  6. agent_cli-0.89.0/LLAMA_SERVER_USAGE.md +90 -0
  7. {agent_cli-0.87.0 → agent_cli-0.89.0}/PKG-INFO +1 -1
  8. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/cleanup.py +48 -9
  9. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/cli.py +54 -13
  10. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/base.py +1 -1
  11. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/launch.py +11 -5
  12. {agent_cli-0.87.0/.claude-plugin/skills/agent-cli-dev → agent_cli-0.89.0/agent_cli/dev/skill}/SKILL.md +27 -10
  13. agent_cli-0.89.0/agent_cli/dev/terminals/tmux.py +340 -0
  14. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/backends/faster_whisper.py +22 -6
  15. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/dev.md +27 -8
  16. agent_cli-0.89.0/reddit.md +624 -0
  17. agent_cli-0.89.0/tests/dev/test_cleanup.py +100 -0
  18. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_cli.py +207 -8
  19. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_launch.py +96 -0
  20. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_terminals.py +169 -2
  21. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_verification.py +3 -2
  22. agent_cli-0.89.0/tests/test_faster_whisper_backend.py +66 -0
  23. agent_cli-0.87.0/agent_cli/dev/terminals/tmux.py +0 -167
  24. {agent_cli-0.87.0 → agent_cli-0.89.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
  25. {agent_cli-0.87.0 → agent_cli-0.89.0}/.claude-plugin/README.md +0 -0
  26. {agent_cli-0.87.0 → agent_cli-0.89.0}/.claude-plugin/marketplace.json +0 -0
  27. {agent_cli-0.87.0 → agent_cli-0.89.0}/.claude-plugin/plugin.json +0 -0
  28. {agent_cli-0.87.0 → agent_cli-0.89.0}/.claude-plugin/skills/agent-cli-dev/examples.md +0 -0
  29. {agent_cli-0.87.0 → agent_cli-0.89.0}/.cursorrules +0 -0
  30. {agent_cli-0.87.0 → agent_cli-0.89.0}/.dockerignore +0 -0
  31. {agent_cli-0.87.0 → agent_cli-0.89.0}/.env.example +0 -0
  32. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/logo.svg +0 -0
  33. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/release-drafter.yml +0 -0
  34. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/renovate.json +0 -0
  35. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/scripts/check_extras_sync.py +0 -0
  36. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/scripts/check_plugin_skill_sync.py +0 -0
  37. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/scripts/sync_extras.py +0 -0
  38. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/scripts/sync_requirements.py +0 -0
  39. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/automerge.yml +0 -0
  40. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/docker.yml +0 -0
  41. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/markdown-code-runner.yml +0 -0
  42. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/pytest.yml +0 -0
  43. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/release.yml +0 -0
  44. {agent_cli-0.87.0 → agent_cli-0.89.0}/.github/workflows/toc.yaml +0 -0
  45. {agent_cli-0.87.0 → agent_cli-0.89.0}/.gitignore +0 -0
  46. {agent_cli-0.87.0 → agent_cli-0.89.0}/.jscpd.json +0 -0
  47. {agent_cli-0.87.0 → agent_cli-0.89.0}/.prompts/docs-review.md +0 -0
  48. {agent_cli-0.87.0 → agent_cli-0.89.0}/.prompts/pr-review.md +0 -0
  49. {agent_cli-0.87.0 → agent_cli-0.89.0}/CLAUDE.md +0 -0
  50. {agent_cli-0.87.0 → agent_cli-0.89.0}/LICENSE +0 -0
  51. {agent_cli-0.87.0 → agent_cli-0.89.0}/README.md +0 -0
  52. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/__init__.py +0 -0
  53. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/__main__.py +0 -0
  54. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_extras.json +0 -0
  55. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/.gitkeep +0 -0
  56. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/audio.txt +0 -0
  57. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/faster-whisper.txt +0 -0
  58. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/kokoro.txt +0 -0
  59. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/llm.txt +0 -0
  60. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/memory.txt +0 -0
  61. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/mlx-whisper.txt +0 -0
  62. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/piper.txt +0 -0
  63. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/rag.txt +0 -0
  64. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/server.txt +0 -0
  65. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/speed.txt +0 -0
  66. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/vad.txt +0 -0
  67. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/vectordb.txt +0 -0
  68. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/whisper-transformers.txt +0 -0
  69. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_requirements/wyoming.txt +0 -0
  70. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/_tools.py +0 -0
  71. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/__init__.py +0 -0
  72. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/_voice_agent_common.py +0 -0
  73. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/assistant.py +0 -0
  74. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/autocorrect.py +0 -0
  75. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/chat.py +0 -0
  76. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/memory/__init__.py +0 -0
  77. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/memory/add.py +0 -0
  78. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/memory/proxy.py +0 -0
  79. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/rag_proxy.py +0 -0
  80. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/speak.py +0 -0
  81. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/transcribe.py +0 -0
  82. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/transcribe_live.py +0 -0
  83. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/agents/voice_edit.py +0 -0
  84. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/api.py +0 -0
  85. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/cli.py +0 -0
  86. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/config.py +0 -0
  87. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/config_cmd.py +0 -0
  88. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/constants.py +0 -0
  89. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/__init__.py +0 -0
  90. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/audio.py +0 -0
  91. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/audio_format.py +0 -0
  92. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/chroma.py +0 -0
  93. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/deps.py +0 -0
  94. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/openai_proxy.py +0 -0
  95. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/process.py +0 -0
  96. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/reranker.py +0 -0
  97. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/sse.py +0 -0
  98. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/transcription_logger.py +0 -0
  99. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/utils.py +0 -0
  100. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/vad.py +0 -0
  101. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/core/watch.py +0 -0
  102. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/daemon/__init__.py +0 -0
  103. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/daemon/cli.py +0 -0
  104. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/__init__.py +0 -0
  105. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/_branch_name.py +0 -0
  106. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/_config.py +0 -0
  107. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/_output.py +0 -0
  108. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
  109. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/aider.py +0 -0
  110. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/claude.py +0 -0
  111. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/codex.py +0 -0
  112. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  113. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
  114. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  115. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
  116. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
  117. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/coding_agents/registry.py +0 -0
  118. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/__init__.py +0 -0
  119. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/base.py +0 -0
  120. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/cursor.py +0 -0
  121. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/emacs.py +0 -0
  122. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/jetbrains.py +0 -0
  123. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/nano.py +0 -0
  124. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/neovim.py +0 -0
  125. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/registry.py +0 -0
  126. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/sublime.py +0 -0
  127. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/vim.py +0 -0
  128. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/vscode.py +0 -0
  129. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/editors/zed.py +0 -0
  130. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/hooks.py +0 -0
  131. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/project.py +0 -0
  132. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/registry.py +0 -0
  133. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/skill/examples.md +0 -0
  134. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/__init__.py +0 -0
  135. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  136. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/base.py +0 -0
  137. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/gnome.py +0 -0
  138. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/iterm2.py +0 -0
  139. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/kitty.py +0 -0
  140. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/registry.py +0 -0
  141. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/warp.py +0 -0
  142. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/terminals/zellij.py +0 -0
  143. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/dev/worktree.py +0 -0
  144. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/docs_gen.py +0 -0
  145. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/example-config.toml +0 -0
  146. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/__init__.py +0 -0
  147. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/common.py +0 -0
  148. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/extras.py +0 -0
  149. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/hotkeys.py +0 -0
  150. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/launchd.py +0 -0
  151. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/service_config.py +0 -0
  152. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/services.py +0 -0
  153. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/install/systemd.py +0 -0
  154. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/__init__.py +0 -0
  155. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_files.py +0 -0
  156. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_filters.py +0 -0
  157. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_git.py +0 -0
  158. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_indexer.py +0 -0
  159. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_ingest.py +0 -0
  160. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_persistence.py +0 -0
  161. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_prompt.py +0 -0
  162. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_retrieval.py +0 -0
  163. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_store.py +0 -0
  164. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_streaming.py +0 -0
  165. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/_tasks.py +0 -0
  166. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/api.py +0 -0
  167. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/client.py +0 -0
  168. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/engine.py +0 -0
  169. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/entities.py +0 -0
  170. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/memory/models.py +0 -0
  171. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/opts.py +0 -0
  172. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/py.typed +0 -0
  173. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/__init__.py +0 -0
  174. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/_indexer.py +0 -0
  175. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/_indexing.py +0 -0
  176. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/_prompt.py +0 -0
  177. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/_retriever.py +0 -0
  178. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/_store.py +0 -0
  179. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/_utils.py +0 -0
  180. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/api.py +0 -0
  181. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/client.py +0 -0
  182. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/engine.py +0 -0
  183. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/rag/models.py +0 -0
  184. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  185. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/__init__.py +0 -0
  186. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  187. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  188. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  189. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  190. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  191. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  192. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  193. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  194. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  195. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  196. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  197. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  198. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  199. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  200. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
  201. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  202. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/setup-linux.sh +0 -0
  203. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  204. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/setup-macos.sh +0 -0
  205. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
  206. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  207. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/scripts/start-all-services.sh +0 -0
  208. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/__init__.py +0 -0
  209. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/cli.py +0 -0
  210. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/common.py +0 -0
  211. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/model_manager.py +0 -0
  212. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/model_registry.py +0 -0
  213. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/proxy/__init__.py +0 -0
  214. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/proxy/api.py +0 -0
  215. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/streaming.py +0 -0
  216. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/__init__.py +0 -0
  217. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/api.py +0 -0
  218. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/backends/__init__.py +0 -0
  219. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/backends/base.py +0 -0
  220. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
  221. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/backends/piper.py +0 -0
  222. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/model_manager.py +0 -0
  223. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/model_registry.py +0 -0
  224. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
  225. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/__init__.py +0 -0
  226. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/api.py +0 -0
  227. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
  228. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/backends/base.py +0 -0
  229. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
  230. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/backends/transformers.py +0 -0
  231. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/languages.py +0 -0
  232. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/model_manager.py +0 -0
  233. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/model_registry.py +0 -0
  234. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  235. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/services/__init__.py +0 -0
  236. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/services/_wyoming_utils.py +0 -0
  237. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/services/asr.py +0 -0
  238. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/services/llm.py +0 -0
  239. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/services/tts.py +0 -0
  240. {agent_cli-0.87.0 → agent_cli-0.89.0}/agent_cli/services/wake_word.py +0 -0
  241. {agent_cli-0.87.0 → agent_cli-0.89.0}/docker/docker-compose.yml +0 -0
  242. {agent_cli-0.87.0 → agent_cli-0.89.0}/docker/memory-proxy.Dockerfile +0 -0
  243. {agent_cli-0.87.0 → agent_cli-0.89.0}/docker/rag-proxy.Dockerfile +0 -0
  244. {agent_cli-0.87.0 → agent_cli-0.89.0}/docker/transcribe-proxy.Dockerfile +0 -0
  245. {agent_cli-0.87.0 → agent_cli-0.89.0}/docker/tts.Dockerfile +0 -0
  246. {agent_cli-0.87.0 → agent_cli-0.89.0}/docker/whisper.Dockerfile +0 -0
  247. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/CNAME +0 -0
  248. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/architecture/index.md +0 -0
  249. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/architecture/memory.md +0 -0
  250. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/architecture/rag.md +0 -0
  251. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/assistant.md +0 -0
  252. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/autocorrect.md +0 -0
  253. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/chat.md +0 -0
  254. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/config.md +0 -0
  255. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/daemon.md +0 -0
  256. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/index.md +0 -0
  257. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/install-extras.md +0 -0
  258. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/install-hotkeys.md +0 -0
  259. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/install-services.md +0 -0
  260. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/memory.md +0 -0
  261. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/rag-proxy.md +0 -0
  262. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/server/index.md +0 -0
  263. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/server/transcribe-proxy.md +0 -0
  264. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/server/tts.md +0 -0
  265. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/server/whisper.md +0 -0
  266. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/speak.md +0 -0
  267. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/start-services.md +0 -0
  268. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/transcribe-live.md +0 -0
  269. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/transcribe.md +0 -0
  270. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/commands/voice-edit.md +0 -0
  271. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/configuration.md +0 -0
  272. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/getting-started.md +0 -0
  273. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/iOS_Shortcut_Guide.md +0 -0
  274. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/index.md +0 -0
  275. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/installation/docker.md +0 -0
  276. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/installation/index.md +0 -0
  277. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/installation/linux.md +0 -0
  278. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/installation/macos.md +0 -0
  279. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/installation/nixos.md +0 -0
  280. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/installation/windows.md +0 -0
  281. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/logo-clean.svg +0 -0
  282. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  283. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/run_markdown_code_runner.py +0 -0
  284. {agent_cli-0.87.0 → agent_cli-0.89.0}/docs/system-integration.md +0 -0
  285. {agent_cli-0.87.0 → agent_cli-0.89.0}/example.agent-cli-config.toml +0 -0
  286. {agent_cli-0.87.0 → agent_cli-0.89.0}/justfile +0 -0
  287. {agent_cli-0.87.0 → agent_cli-0.89.0}/pyproject.toml +0 -0
  288. {agent_cli-0.87.0 → agent_cli-0.89.0}/shell.nix +0 -0
  289. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/__init__.py +0 -0
  290. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/__init__.py +0 -0
  291. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_fix_my_text.py +0 -0
  292. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_interactive.py +0 -0
  293. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_interactive_extra.py +0 -0
  294. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_memory_add.py +0 -0
  295. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_speak.py +0 -0
  296. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_speak_e2e.py +0 -0
  297. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_transcribe.py +0 -0
  298. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_transcribe_agent.py +0 -0
  299. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_transcribe_e2e.py +0 -0
  300. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_transcribe_live.py +0 -0
  301. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_transcribe_recovery.py +0 -0
  302. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_tts_common.py +0 -0
  303. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_tts_common_extra.py +0 -0
  304. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_voice_agent_common.py +0 -0
  305. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_voice_edit.py +0 -0
  306. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_voice_edit_e2e.py +0 -0
  307. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/agents/test_wake_word_assistant.py +0 -0
  308. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/conftest.py +0 -0
  309. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/__init__.py +0 -0
  310. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/test_audio.py +0 -0
  311. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/test_audio_format.py +0 -0
  312. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/test_chroma.py +0 -0
  313. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/test_sse.py +0 -0
  314. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/test_vad.py +0 -0
  315. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/core/test_watch.py +0 -0
  316. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/__init__.py +0 -0
  317. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_coding_agents.py +0 -0
  318. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_editors.py +0 -0
  319. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_hooks.py +0 -0
  320. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_project.py +0 -0
  321. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/dev/test_worktree.py +0 -0
  322. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/install/__init__.py +0 -0
  323. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/install/test_extras.py +0 -0
  324. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/__init__.py +0 -0
  325. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_api_health.py +0 -0
  326. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_api_integration_liveish.py +0 -0
  327. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_client.py +0 -0
  328. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_engine.py +0 -0
  329. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_files.py +0 -0
  330. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_filters.py +0 -0
  331. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_git_integration.py +0 -0
  332. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_indexer.py +0 -0
  333. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_memory_integration.py +0 -0
  334. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_proxy_passthrough.py +0 -0
  335. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_store.py +0 -0
  336. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/memory/test_utils.py +0 -0
  337. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/mocks/__init__.py +0 -0
  338. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/mocks/audio.py +0 -0
  339. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/mocks/llm.py +0 -0
  340. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/mocks/wyoming.py +0 -0
  341. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/__init__.py +0 -0
  342. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_api.py +0 -0
  343. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_engine.py +0 -0
  344. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_history.py +0 -0
  345. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_indexer.py +0 -0
  346. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_indexing.py +0 -0
  347. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_rag_client.py +0 -0
  348. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_rag_integration_liveish.py +0 -0
  349. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  350. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_retriever.py +0 -0
  351. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_store.py +0 -0
  352. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/rag/test_utils.py +0 -0
  353. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_api.py +0 -0
  354. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_api_integration.py +0 -0
  355. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_asr.py +0 -0
  356. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_asr_recovery.py +0 -0
  357. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_audio_e2e.py +0 -0
  358. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_cli.py +0 -0
  359. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_config.py +0 -0
  360. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_config_cmd.py +0 -0
  361. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_daemon.py +0 -0
  362. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_docs_gen.py +0 -0
  363. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_env_vars.py +0 -0
  364. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_json_output.py +0 -0
  365. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_llm.py +0 -0
  366. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_llm_gemini.py +0 -0
  367. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_memory_tools.py +0 -0
  368. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_mlx_backend.py +0 -0
  369. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_process_manager.py +0 -0
  370. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_requires_extras.py +0 -0
  371. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_server_streaming.py +0 -0
  372. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_server_tts.py +0 -0
  373. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_server_whisper.py +0 -0
  374. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_services.py +0 -0
  375. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_tools.py +0 -0
  376. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_transformers_backend.py +0 -0
  377. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_tts.py +0 -0
  378. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_utils.py +0 -0
  379. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_wake_word.py +0 -0
  380. {agent_cli-0.87.0 → agent_cli-0.89.0}/tests/test_wyoming_utils.py +0 -0
  381. {agent_cli-0.87.0 → agent_cli-0.89.0}/uv.lock +0 -0
  382. {agent_cli-0.87.0 → agent_cli-0.89.0}/zensical.toml +0 -0
@@ -9,7 +9,7 @@ This skill teaches you how to spawn parallel AI coding agents in isolated git wo
9
9
 
10
10
  `agent-cli dev` supports two complementary patterns:
11
11
  - Separate worktrees for isolated implementation/review tasks
12
- - Multiple agents on the same worktree using `dev agent -m tmux`
12
+ - Multiple agents on the same worktree using `dev agent --tmux-session <unique-name>` for autonomous launches, or `-m tmux` when a human explicitly wants shared tmux windows
13
13
 
14
14
  ## Installation
15
15
 
@@ -136,17 +136,26 @@ Use this when several agents should inspect or validate the same code at once wi
136
136
  # Create the worktree once. This step only prepares the shared workspace.
137
137
  agent-cli dev new review-auth --from HEAD
138
138
 
139
- # Then launch the actual agents with prompts.
140
- agent-cli dev agent review-auth -m tmux --prompt-file .claude/review-security.md
141
- agent-cli dev agent review-auth -m tmux --prompt-file .claude/review-performance.md
142
- agent-cli dev agent review-auth -m tmux --prompt-file .claude/review-tests.md
139
+ # Then launch the actual agents with prompts. Give each agent its own tmux session.
140
+ agent-cli dev agent review-auth \
141
+ --tmux-session review-auth-security-20260402-1530 \
142
+ --prompt-file .claude/review-security.md
143
+ agent-cli dev agent review-auth \
144
+ --tmux-session review-auth-performance-20260402-1530 \
145
+ --prompt-file .claude/review-performance.md
146
+ agent-cli dev agent review-auth \
147
+ --tmux-session review-auth-tests-20260402-1530 \
148
+ --prompt-file .claude/review-tests.md
143
149
  ```
144
150
 
145
151
  Key rules for same-worktree launches:
146
152
  - Use `dev agent`, not `dev new`, after the worktree already exists
147
153
  - Use `dev agent --agent <agent>` to select a specific agent for an existing worktree; `--with-agent` remains a deprecated alias on this subcommand
148
- - Use `-m tmux` for headless or scripted launching; it works even when not already inside tmux
149
- - Each launch joins the same deterministic repo-scoped tmux session, so related agents stay grouped together
154
+ - For autonomous agents, prefer `--tmux-session <unique-name>` and use a different session name for each launch
155
+ - Reserve bare `-m tmux` for human-driven grouped windows or when the user explicitly wants agents to share one tmux session
156
+ - Outside tmux, bare `-m tmux` joins the deterministic repo-scoped tmux session
157
+ - Inside tmux, bare `-m tmux` opens a new window in the current session unless you pass `--tmux-session <name>`, which reuses or creates a specific tmux session and also implies `-m tmux`
158
+ - tmux session names cannot contain `.` or `:`
150
159
  - Ask each agent to write to a unique report path such as `.claude/REPORT-security-<run-id>.md` or `.claude/REPORT-tests-<run-id>.md`
151
160
  - If you rerun the same prompt repeatedly, include a timestamp or other run id in the report filename so later runs do not overwrite earlier ones
152
161
  - Each agent launch gets its own unique task file in `.claude/` (e.g., `TASK-{timestamp}-{hex}.md`), so parallel launches do not overwrite each other
@@ -168,14 +177,21 @@ When complete, write findings to .claude/REPORT-security-20260319-153045-123.md
168
177
 
169
178
  ## Headless/scripted orchestration
170
179
 
171
- For non-interactive contexts (scripts, cron jobs, other assistants), combine `--prompt-file` with `-m tmux`:
180
+ For non-interactive contexts (scripts, cron jobs, other assistants), combine `--prompt-file` with `--tmux-session`:
172
181
 
173
182
  ```bash
174
- agent-cli dev new validation-a --from HEAD --agent codex -m tmux \
183
+ agent-cli dev new validation-a --from HEAD --agent codex \
184
+ --tmux-session validation-a-20260402-1530 \
175
185
  --prompt-file .claude/validation-a.md
176
186
  ```
177
187
 
178
- This works without an attached terminal. `agent-cli` creates or reuses a detached tmux session and returns a pane handle plus attach command. Launches may also run pre-launch preparation by default; use `--no-hooks` only when you explicitly need to bypass that behavior.
188
+ This works without an attached terminal. For autonomous or scripted launches, prefer a unique `--tmux-session` per agent so separate runs do not trample each other by sharing one tmux session. Use bare `-m tmux` only when you explicitly want shared tmux grouping. Launches may also run pre-launch preparation by default; use `--no-hooks` only when you explicitly need to bypass that behavior.
189
+
190
+ ## Cleanup behavior
191
+
192
+ - `dev rm` and `dev clean` also clean up tmux windows that `agent-cli` tagged for the worktree
193
+ - If git worktree removal succeeds but tmux cleanup is partial, the command warns and still removes the worktree
194
+ - Session isolation prevents agents from interfering with each other's tmux windows during execution, but cleanup still applies to all tagged windows for the worktree
179
195
 
180
196
  ## Example: Multi-feature implementation
181
197
 
@@ -200,5 +216,6 @@ Each agent works independently in its own branch. Results can be reviewed and me
200
216
  | `--from` / `-f` | Base ref (default: origin/main). **Use `--from HEAD` when reviewing/testing current branch!** |
201
217
  | `--agent` | Specific agent (or `auto`): claude, aider, codex, gemini |
202
218
  | `--agent-args` | Extra arguments for the agent |
219
+ | `--tmux-session` | Reuse or create a specific tmux session. For autonomous agents, prefer a unique name per launch |
203
220
 
204
221
  @examples.md
@@ -9,7 +9,7 @@ This skill teaches you how to spawn parallel AI coding agents in isolated git wo
9
9
 
10
10
  `agent-cli dev` supports two complementary patterns:
11
11
  - Separate worktrees for isolated implementation/review tasks
12
- - Multiple agents on the same worktree using `dev agent -m tmux`
12
+ - Multiple agents on the same worktree using `dev agent --tmux-session <unique-name>` for autonomous launches, or `-m tmux` when a human explicitly wants shared tmux windows
13
13
 
14
14
  ## Installation
15
15
 
@@ -136,17 +136,26 @@ Use this when several agents should inspect or validate the same code at once wi
136
136
  # Create the worktree once. This step only prepares the shared workspace.
137
137
  agent-cli dev new review-auth --from HEAD
138
138
 
139
- # Then launch the actual agents with prompts.
140
- agent-cli dev agent review-auth -m tmux --prompt-file .claude/review-security.md
141
- agent-cli dev agent review-auth -m tmux --prompt-file .claude/review-performance.md
142
- agent-cli dev agent review-auth -m tmux --prompt-file .claude/review-tests.md
139
+ # Then launch the actual agents with prompts. Give each agent its own tmux session.
140
+ agent-cli dev agent review-auth \
141
+ --tmux-session review-auth-security-20260402-1530 \
142
+ --prompt-file .claude/review-security.md
143
+ agent-cli dev agent review-auth \
144
+ --tmux-session review-auth-performance-20260402-1530 \
145
+ --prompt-file .claude/review-performance.md
146
+ agent-cli dev agent review-auth \
147
+ --tmux-session review-auth-tests-20260402-1530 \
148
+ --prompt-file .claude/review-tests.md
143
149
  ```
144
150
 
145
151
  Key rules for same-worktree launches:
146
152
  - Use `dev agent`, not `dev new`, after the worktree already exists
147
153
  - Use `dev agent --agent <agent>` to select a specific agent for an existing worktree; `--with-agent` remains a deprecated alias on this subcommand
148
- - Use `-m tmux` for headless or scripted launching; it works even when not already inside tmux
149
- - Each launch joins the same deterministic repo-scoped tmux session, so related agents stay grouped together
154
+ - For autonomous agents, prefer `--tmux-session <unique-name>` and use a different session name for each launch
155
+ - Reserve bare `-m tmux` for human-driven grouped windows or when the user explicitly wants agents to share one tmux session
156
+ - Outside tmux, bare `-m tmux` joins the deterministic repo-scoped tmux session
157
+ - Inside tmux, bare `-m tmux` opens a new window in the current session unless you pass `--tmux-session <name>`, which reuses or creates a specific tmux session and also implies `-m tmux`
158
+ - tmux session names cannot contain `.` or `:`
150
159
  - Ask each agent to write to a unique report path such as `.claude/REPORT-security-<run-id>.md` or `.claude/REPORT-tests-<run-id>.md`
151
160
  - If you rerun the same prompt repeatedly, include a timestamp or other run id in the report filename so later runs do not overwrite earlier ones
152
161
  - Each agent launch gets its own unique task file in `.claude/` (e.g., `TASK-{timestamp}-{hex}.md`), so parallel launches do not overwrite each other
@@ -168,14 +177,21 @@ When complete, write findings to .claude/REPORT-security-20260319-153045-123.md
168
177
 
169
178
  ## Headless/scripted orchestration
170
179
 
171
- For non-interactive contexts (scripts, cron jobs, other assistants), combine `--prompt-file` with `-m tmux`:
180
+ For non-interactive contexts (scripts, cron jobs, other assistants), combine `--prompt-file` with `--tmux-session`:
172
181
 
173
182
  ```bash
174
- agent-cli dev new validation-a --from HEAD --agent codex -m tmux \
183
+ agent-cli dev new validation-a --from HEAD --agent codex \
184
+ --tmux-session validation-a-20260402-1530 \
175
185
  --prompt-file .claude/validation-a.md
176
186
  ```
177
187
 
178
- This works without an attached terminal. `agent-cli` creates or reuses a detached tmux session and returns a pane handle plus attach command. Launches may also run pre-launch preparation by default; use `--no-hooks` only when you explicitly need to bypass that behavior.
188
+ This works without an attached terminal. For autonomous or scripted launches, prefer a unique `--tmux-session` per agent so separate runs do not trample each other by sharing one tmux session. Use bare `-m tmux` only when you explicitly want shared tmux grouping. Launches may also run pre-launch preparation by default; use `--no-hooks` only when you explicitly need to bypass that behavior.
189
+
190
+ ## Cleanup behavior
191
+
192
+ - `dev rm` and `dev clean` also clean up tmux windows that `agent-cli` tagged for the worktree
193
+ - If git worktree removal succeeds but tmux cleanup is partial, the command warns and still removes the worktree
194
+ - Session isolation prevents agents from interfering with each other's tmux windows during execution, but cleanup still applies to all tagged windows for the worktree
179
195
 
180
196
  ## Example: Multi-feature implementation
181
197
 
@@ -200,5 +216,6 @@ Each agent works independently in its own branch. Results can be reviewed and me
200
216
  | `--from` / `-f` | Base ref (default: origin/main). **Use `--from HEAD` when reviewing/testing current branch!** |
201
217
  | `--agent` | Specific agent (or `auto`): claude, aider, codex, gemini |
202
218
  | `--agent-args` | Extra arguments for the agent |
219
+ | `--tmux-session` | Reuse or create a specific tmux session. For autonomous agents, prefer a unique name per launch |
203
220
 
204
221
  @examples.md
@@ -45,11 +45,11 @@ jobs:
45
45
 
46
46
  - name: Setup Pages
47
47
  if: github.event_name != 'pull_request'
48
- uses: actions/configure-pages@v5
48
+ uses: actions/configure-pages@v6
49
49
 
50
50
  - name: Upload artifact
51
51
  if: github.event_name != 'pull_request'
52
- uses: actions/upload-pages-artifact@v4
52
+ uses: actions/upload-pages-artifact@v5
53
53
  with:
54
54
  path: "./site"
55
55
 
@@ -63,4 +63,4 @@ jobs:
63
63
  steps:
64
64
  - name: Deploy to GitHub Pages
65
65
  id: deployment
66
- uses: actions/deploy-pages@v4
66
+ uses: actions/deploy-pages@v5
@@ -9,6 +9,6 @@ jobs:
9
9
  update_release_draft:
10
10
  runs-on: ubuntu-latest
11
11
  steps:
12
- - uses: release-drafter/release-drafter@v6
12
+ - uses: release-drafter/release-drafter@v7
13
13
  env:
14
14
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -11,13 +11,13 @@ repos:
11
11
  - id: end-of-file-fixer
12
12
  - id: mixed-line-ending
13
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
14
- rev: "v0.15.7"
14
+ rev: "v0.15.11"
15
15
  hooks:
16
16
  - id: ruff
17
17
  args: ["--fix"]
18
18
  - id: ruff-format
19
19
  - repo: https://github.com/pre-commit/mirrors-mypy
20
- rev: "v1.19.1"
20
+ rev: "v1.20.1"
21
21
  hooks:
22
22
  - id: mypy
23
23
  additional_dependencies: ["types-PyYAML"]
@@ -0,0 +1,90 @@
1
+ # Using agent-cli with llama-server (llama-cpp)
2
+
3
+ This guide explains how to use agent-cli with llama-server, which provides an OpenAI-compatible API for running local LLM models.
4
+
5
+ ## Prerequisites
6
+
7
+ 1. Install and set up llama-cpp with llama-server support
8
+ 2. Download a compatible GGUF model file
9
+
10
+ ## Starting llama-server
11
+
12
+ Start the llama-server with your model:
13
+
14
+ ```bash
15
+ # Example with a 3B parameter model
16
+ llama-server \
17
+ -m /path/to/your/model.gguf \
18
+ -c 2048 \
19
+ --host 0.0.0.0 \
20
+ --port 8080
21
+ ```
22
+
23
+ ## Configuration
24
+
25
+ ### Option 1: Using Configuration File
26
+
27
+ Add to your `~/.config/agent-cli/config.toml` or `./agent-cli-config.toml`:
28
+
29
+ ```toml
30
+ [defaults]
31
+ llm-provider = "openai"
32
+ llm-openai-model = "your-model-name" # Can be anything, llama-server ignores this
33
+ openai-base-url = "http://localhost:8080/v1"
34
+ # openai-api-key is not required for llama-server
35
+ ```
36
+
37
+ ### Option 2: Using Command Line
38
+
39
+ ```bash
40
+ # Example: Autocorrect text
41
+ agent-cli autocorrect \
42
+ --llm-provider openai \
43
+ --llm-openai-model llama-3.2-3b \
44
+ --openai-base-url http://localhost:8080/v1
45
+
46
+ # Example: Transcribe and process audio
47
+ agent-cli transcribe \
48
+ --llm-provider openai \
49
+ --llm-openai-model llama-3.2-3b \
50
+ --openai-base-url http://localhost:8080/v1 \
51
+ --llm
52
+
53
+ # Example: Chat assistant
54
+ agent-cli chat \
55
+ --llm-provider openai \
56
+ --llm-openai-model llama-3.2-3b \
57
+ --openai-base-url http://localhost:8080/v1
58
+ ```
59
+
60
+ ## Notes
61
+
62
+ - The `--llm-openai-model` parameter is sent to llama-server but typically ignored (the model is already loaded)
63
+ - No API key is required when using llama-server
64
+ - Make sure the base URL includes the `/v1` suffix for OpenAI API compatibility
65
+ - Performance depends on your hardware and the model size
66
+
67
+ ## Advantages
68
+
69
+ - Complete privacy - all processing happens locally
70
+ - No API costs
71
+ - No internet connection required (after model download)
72
+ - Full control over the model and parameters
73
+ - Can use any GGUF-compatible model
74
+
75
+ ## Troubleshooting
76
+
77
+ If you encounter issues:
78
+
79
+ 1. Verify llama-server is running: `curl http://localhost:8080/v1/models`
80
+ 2. Check the llama-server logs for errors
81
+ 3. Ensure the base URL includes `/v1` at the end
82
+ 4. Try a simple curl test:
83
+ ```bash
84
+ curl http://localhost:8080/v1/chat/completions \
85
+ -H "Content-Type: application/json" \
86
+ -d '{
87
+ "model": "test",
88
+ "messages": [{"role": "user", "content": "Hello"}]
89
+ }'
90
+ ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.87.0
3
+ Version: 0.89.0
4
4
  Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
5
5
  Project-URL: Homepage, https://github.com/basnijholt/agent-cli
6
6
  Author-email: Bas Nijholt <bas@nijho.lt>
@@ -4,14 +4,26 @@ from __future__ import annotations
4
4
 
5
5
  import json
6
6
  import subprocess
7
+ from dataclasses import dataclass, field
7
8
  from typing import TYPE_CHECKING
8
9
 
9
10
  from . import worktree
11
+ from .terminals.tmux import Tmux
10
12
 
11
13
  if TYPE_CHECKING:
12
14
  from pathlib import Path
13
15
 
14
16
 
17
+ @dataclass
18
+ class RemoveWorktreeResult:
19
+ """Outcome of removing a worktree and any tagged tmux windows."""
20
+
21
+ name: str
22
+ success: bool
23
+ error: str | None = None
24
+ warnings: list[str] = field(default_factory=list)
25
+
26
+
15
27
  def find_worktrees_with_no_commits(repo_root: Path) -> list[worktree.WorktreeInfo]:
16
28
  """Find worktrees whose branches have no commits ahead of the default branch."""
17
29
  worktrees_list = worktree.list_worktrees()
@@ -95,18 +107,45 @@ def remove_worktrees(
95
107
  repo_root: Path,
96
108
  *,
97
109
  force: bool = False,
98
- ) -> list[tuple[str, bool, str | None]]:
110
+ ) -> list[RemoveWorktreeResult]:
99
111
  """Remove a list of worktrees.
100
112
 
101
- Returns list of (branch_name, success, error_message) tuples.
113
+ Returns a result for each worktree removal attempt.
102
114
  """
103
- results: list[tuple[str, bool, str | None]] = []
104
- for wt in worktrees_to_remove:
105
- success, error = worktree.remove_worktree(
106
- wt.path,
115
+ return [
116
+ remove_worktree(
117
+ wt,
118
+ repo_root,
107
119
  force=force,
108
120
  delete_branch=True,
109
- repo_path=repo_root,
110
121
  )
111
- results.append((wt.branch or wt.path.name, success, error))
112
- return results
122
+ for wt in worktrees_to_remove
123
+ ]
124
+
125
+
126
+ def remove_worktree(
127
+ wt: worktree.WorktreeInfo,
128
+ repo_root: Path,
129
+ *,
130
+ force: bool = False,
131
+ delete_branch: bool = False,
132
+ ) -> RemoveWorktreeResult:
133
+ """Remove one worktree and then clean up any tagged tmux windows."""
134
+ removed, error = worktree.remove_worktree(
135
+ wt.path,
136
+ force=force,
137
+ delete_branch=delete_branch,
138
+ repo_path=repo_root,
139
+ )
140
+ result = RemoveWorktreeResult(
141
+ name=wt.branch or wt.path.name,
142
+ success=removed,
143
+ error=error,
144
+ )
145
+ if not removed:
146
+ return result
147
+
148
+ tmux = Tmux()
149
+ tmux_cleanup = tmux.kill_windows_for_worktree(wt.path)
150
+ result.warnings.extend(tmux_cleanup.errors)
151
+ return result
@@ -157,6 +157,23 @@ def _resolve_prompt_text(
157
157
  return prompt
158
158
 
159
159
 
160
+ def _normalize_tmux_session(
161
+ tmux_session: str | None,
162
+ multiplexer: Literal["tmux"] | None,
163
+ ) -> tuple[str | None, Literal["tmux"] | None]:
164
+ """Normalize `--tmux-session` and make it imply tmux launches."""
165
+ if tmux_session is None:
166
+ return None, multiplexer
167
+
168
+ normalized_session = tmux_session.strip()
169
+ if not normalized_session:
170
+ error("--tmux-session cannot be empty")
171
+ if "." in normalized_session or ":" in normalized_session:
172
+ error("tmux session names cannot contain '.' or ':'")
173
+
174
+ return normalized_session, "tmux"
175
+
176
+
160
177
  def _resolve_dev_new_agent_request(
161
178
  *,
162
179
  start_agent: bool,
@@ -440,6 +457,13 @@ def new(
440
457
  help="Launch the agent in a specific multiplexer. Currently supported: tmux. When started outside tmux, creates or reuses a detached session and reports the pane handle",
441
458
  ),
442
459
  ] = None,
460
+ tmux_session: Annotated[
461
+ str | None,
462
+ typer.Option(
463
+ "--tmux-session",
464
+ help="Reuse or create a specific tmux session for the agent. Implies --multiplexer tmux",
465
+ ),
466
+ ] = None,
443
467
  hooks: Annotated[
444
468
  bool,
445
469
  typer.Option(
@@ -489,6 +513,7 @@ def new(
489
513
  agent_name_deprecated=agent_name_deprecated,
490
514
  prompt=prompt,
491
515
  )
516
+ tmux_session, multiplexer = _normalize_tmux_session(tmux_session, multiplexer)
492
517
 
493
518
  repo_root = _ensure_git_repo()
494
519
 
@@ -571,6 +596,7 @@ def new(
571
596
  task_file,
572
597
  agent_env,
573
598
  multiplexer_name=multiplexer,
599
+ tmux_session=tmux_session,
574
600
  )
575
601
 
576
602
  # Print summary
@@ -873,17 +899,19 @@ def remove(
873
899
  if not typer.confirm("Continue?"):
874
900
  raise typer.Abort
875
901
 
876
- removed, remove_err = worktree.remove_worktree(
877
- wt.path,
902
+ result = cleanup.remove_worktree(
903
+ wt,
904
+ repo_root,
878
905
  force=force,
879
906
  delete_branch=delete_branch,
880
- repo_path=repo_root,
881
907
  )
882
908
 
883
- if removed:
909
+ if result.success:
884
910
  success(f"Removed worktree: {wt.path}")
911
+ for cleanup_warning in result.warnings:
912
+ warn(cleanup_warning)
885
913
  else:
886
- error(remove_err or "Failed to remove worktree")
914
+ error(result.error or "Failed to remove worktree")
887
915
 
888
916
 
889
917
  @app.command("path")
@@ -1018,6 +1046,13 @@ def start_agent(
1018
1046
  help="Launch the agent in a specific multiplexer instead of the current terminal. Currently supported: tmux",
1019
1047
  ),
1020
1048
  ] = None,
1049
+ tmux_session: Annotated[
1050
+ str | None,
1051
+ typer.Option(
1052
+ "--tmux-session",
1053
+ help="Reuse or create a specific tmux session for the agent. Implies --multiplexer tmux",
1054
+ ),
1055
+ ] = None,
1021
1056
  hooks: Annotated[
1022
1057
  bool,
1023
1058
  typer.Option(
@@ -1043,6 +1078,7 @@ def start_agent(
1043
1078
  agent_name = agent_name or agent_name_deprecated
1044
1079
 
1045
1080
  prompt = _resolve_prompt_text(prompt, prompt_file=prompt_file)
1081
+ tmux_session, multiplexer = _normalize_tmux_session(tmux_session, multiplexer)
1046
1082
 
1047
1083
  repo_root = _ensure_git_repo()
1048
1084
 
@@ -1090,6 +1126,7 @@ def start_agent(
1090
1126
  task_file,
1091
1127
  agent_env,
1092
1128
  multiplexer_name=multiplexer,
1129
+ tmux_session=tmux_session,
1093
1130
  )
1094
1131
  if handle:
1095
1132
  info(
@@ -1367,11 +1404,13 @@ def _clean_merged_worktrees(
1367
1404
  info("[dry-run] Would remove the above worktrees")
1368
1405
  elif yes or typer.confirm("\nRemove these worktrees?"):
1369
1406
  results = cleanup.remove_worktrees([wt for wt, _ in to_remove], repo_root, force=force)
1370
- for branch, ok, remove_err in results:
1371
- if ok:
1372
- success(f"Removed {branch}")
1407
+ for result in results:
1408
+ if result.success:
1409
+ success(f"Removed {result.name}")
1410
+ for cleanup_warning in result.warnings:
1411
+ warn(cleanup_warning)
1373
1412
  else:
1374
- warn(f"Failed to remove {branch}: {remove_err}")
1413
+ warn(f"Failed to remove {result.name}: {result.error}")
1375
1414
 
1376
1415
 
1377
1416
  def _clean_no_commits_worktrees(
@@ -1401,11 +1440,13 @@ def _clean_no_commits_worktrees(
1401
1440
  info("[dry-run] Would remove the above worktrees")
1402
1441
  elif yes or typer.confirm("\nRemove these worktrees?"):
1403
1442
  results = cleanup.remove_worktrees(to_remove, repo_root, force=force)
1404
- for branch, ok, remove_err in results:
1405
- if ok:
1406
- success(f"Removed {branch}")
1443
+ for result in results:
1444
+ if result.success:
1445
+ success(f"Removed {result.name}")
1446
+ for cleanup_warning in result.warnings:
1447
+ warn(cleanup_warning)
1407
1448
  else:
1408
- warn(f"Failed to remove {branch}: {remove_err}")
1449
+ warn(f"Failed to remove {result.name}: {result.error}")
1409
1450
 
1410
1451
 
1411
1452
  @app.command("clean")
@@ -143,7 +143,7 @@ def _get_parent_process_names() -> list[str]:
143
143
  - CLI tools that set process.title (like Claude) show their name directly
144
144
  """
145
145
  try:
146
- import psutil # noqa: PLC0415
146
+ import psutil # type: ignore[import-untyped] # noqa: PLC0415
147
147
 
148
148
  process = psutil.Process(os.getpid())
149
149
  names = []
@@ -280,6 +280,7 @@ def _launch_in_tmux(
280
280
  tab_name: str,
281
281
  repo_root: Path | None,
282
282
  multiplexer_name: str | None,
283
+ tmux_session: str | None,
283
284
  ) -> TerminalHandle | None:
284
285
  """Launch an agent via tmux and return its pane handle."""
285
286
  from .terminals.tmux import Tmux # noqa: PLC0415
@@ -289,8 +290,8 @@ def _launch_in_tmux(
289
290
  return None
290
291
 
291
292
  requested_tmux = multiplexer_name == "tmux"
292
- session_name = None
293
- if requested_tmux and not terminal.detect():
293
+ session_name = tmux_session
294
+ if session_name is None and requested_tmux and not terminal.detect():
294
295
  session_name = terminal.session_name_for_repo(repo_root or path)
295
296
 
296
297
  handle = terminal.open_in_session(
@@ -305,7 +306,7 @@ def _launch_in_tmux(
305
306
 
306
307
  session_label = (
307
308
  f" in tmux session {handle.session_name}"
308
- if requested_tmux and handle.session_name
309
+ if (requested_tmux or tmux_session is not None) and handle.session_name
309
310
  else " in new tmux tab"
310
311
  )
311
312
  success(f"Started {agent.name}{session_label}")
@@ -320,6 +321,7 @@ def _launch_in_terminal(
320
321
  tab_name: str,
321
322
  repo_root: Path | None,
322
323
  multiplexer_name: str | None,
324
+ tmux_session: str | None,
323
325
  ) -> tuple[bool, TerminalHandle | None]:
324
326
  """Launch an agent in the resolved terminal."""
325
327
  if terminal.name == "tmux":
@@ -331,6 +333,7 @@ def _launch_in_terminal(
331
333
  tab_name,
332
334
  repo_root,
333
335
  multiplexer_name,
336
+ tmux_session,
334
337
  )
335
338
  return handle is not None, handle
336
339
 
@@ -350,13 +353,15 @@ def launch_agent(
350
353
  task_file: Path | None = None,
351
354
  env: dict[str, str] | None = None,
352
355
  multiplexer_name: str | None = None,
356
+ tmux_session: str | None = None,
353
357
  ) -> TerminalHandle | None:
354
358
  """Launch agent in a new terminal tab.
355
359
 
356
360
  Agents are interactive TUIs that need a proper terminal.
357
361
  Priority: tmux/zellij tab > terminal tab > print instructions.
358
362
  """
359
- terminal = _resolve_launch_terminal(multiplexer_name)
363
+ effective_multiplexer_name = "tmux" if tmux_session is not None else multiplexer_name
364
+ terminal = _resolve_launch_terminal(effective_multiplexer_name)
360
365
  full_cmd = _build_agent_launch_command(
361
366
  path, agent, extra_args, prompt, task_file, env, terminal
362
367
  )
@@ -370,7 +375,8 @@ def launch_agent(
370
375
  full_cmd,
371
376
  tab_name,
372
377
  repo_root,
373
- multiplexer_name,
378
+ effective_multiplexer_name,
379
+ tmux_session,
374
380
  )
375
381
  if launched:
376
382
  return handle