agent-cli 0.61.5__tar.gz → 0.63.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 (333) hide show
  1. {agent_cli-0.61.5 → agent_cli-0.63.0}/.pre-commit-config.yaml +1 -1
  2. {agent_cli-0.61.5 → agent_cli-0.63.0}/PKG-INFO +3 -3
  3. {agent_cli-0.61.5 → agent_cli-0.63.0}/README.md +2 -2
  4. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/assistant.py +1 -1
  5. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/autocorrect.py +1 -1
  6. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/chat.py +1 -1
  7. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/memory/__init__.py +1 -1
  8. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/rag_proxy.py +1 -1
  9. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/speak.py +1 -1
  10. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/transcribe.py +1 -1
  11. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/transcribe_daemon.py +1 -1
  12. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/voice_edit.py +1 -1
  13. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/cli.py +24 -1
  14. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/skill/SKILL.md +3 -2
  15. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/worktree.py +53 -5
  16. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_retrieval.py +18 -8
  17. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/api.py +1 -1
  18. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/client.py +1 -1
  19. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/engine.py +1 -1
  20. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/cli.py +1 -1
  21. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/architecture/memory.md +3 -3
  22. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/dev.md +14 -4
  23. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/configuration.md +1 -1
  24. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/getting-started.md +1 -1
  25. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/index.md +1 -1
  26. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_worktree.py +213 -0
  27. {agent_cli-0.61.5 → agent_cli-0.63.0}/.claude/skills/agent-cli-dev/SKILL.md +0 -0
  28. {agent_cli-0.61.5 → agent_cli-0.63.0}/.claude/skills/agent-cli-dev/examples.md +0 -0
  29. {agent_cli-0.61.5 → agent_cli-0.63.0}/.cursorrules +0 -0
  30. {agent_cli-0.61.5 → agent_cli-0.63.0}/.env.example +0 -0
  31. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/logo.svg +0 -0
  32. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/release-drafter.yml +0 -0
  33. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/renovate.json +0 -0
  34. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/automerge.yml +0 -0
  35. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/docker-tts.yml +0 -0
  36. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/docker-whisper.yml +0 -0
  37. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/docs.yml +0 -0
  38. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/markdown-code-runner.yml +0 -0
  39. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/pytest.yml +0 -0
  40. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/release-drafter.yml +0 -0
  41. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/release.yml +0 -0
  42. {agent_cli-0.61.5 → agent_cli-0.63.0}/.github/workflows/toc.yaml +0 -0
  43. {agent_cli-0.61.5 → agent_cli-0.63.0}/.gitignore +0 -0
  44. {agent_cli-0.61.5 → agent_cli-0.63.0}/.jscpd.json +0 -0
  45. {agent_cli-0.61.5 → agent_cli-0.63.0}/.prompts/docs-review.md +0 -0
  46. {agent_cli-0.61.5 → agent_cli-0.63.0}/.prompts/pr-review.md +0 -0
  47. {agent_cli-0.61.5 → agent_cli-0.63.0}/CLAUDE.md +0 -0
  48. {agent_cli-0.61.5 → agent_cli-0.63.0}/LICENSE +0 -0
  49. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/__init__.py +0 -0
  50. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/__main__.py +0 -0
  51. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/_tools.py +0 -0
  52. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/__init__.py +0 -0
  53. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/_voice_agent_common.py +0 -0
  54. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/memory/add.py +0 -0
  55. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/agents/memory/proxy.py +0 -0
  56. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/api.py +0 -0
  57. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/cli.py +0 -0
  58. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/config.py +0 -0
  59. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/config_cmd.py +0 -0
  60. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/constants.py +0 -0
  61. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/__init__.py +0 -0
  62. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/audio.py +0 -0
  63. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/audio_format.py +0 -0
  64. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/chroma.py +0 -0
  65. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/deps.py +0 -0
  66. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/openai_proxy.py +0 -0
  67. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/process.py +0 -0
  68. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/reranker.py +0 -0
  69. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/sse.py +0 -0
  70. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/transcription_logger.py +0 -0
  71. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/utils.py +0 -0
  72. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/vad.py +0 -0
  73. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/core/watch.py +0 -0
  74. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/__init__.py +0 -0
  75. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/__init__.py +0 -0
  76. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/aider.py +0 -0
  77. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/base.py +0 -0
  78. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/claude.py +0 -0
  79. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/codex.py +0 -0
  80. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/continue_dev.py +0 -0
  81. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/copilot.py +0 -0
  82. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/cursor_agent.py +0 -0
  83. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/gemini.py +0 -0
  84. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/opencode.py +0 -0
  85. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/coding_agents/registry.py +0 -0
  86. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/__init__.py +0 -0
  87. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/base.py +0 -0
  88. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/cursor.py +0 -0
  89. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/emacs.py +0 -0
  90. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/jetbrains.py +0 -0
  91. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/nano.py +0 -0
  92. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/neovim.py +0 -0
  93. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/registry.py +0 -0
  94. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/sublime.py +0 -0
  95. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/vim.py +0 -0
  96. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/vscode.py +0 -0
  97. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/editors/zed.py +0 -0
  98. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/project.py +0 -0
  99. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/registry.py +0 -0
  100. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/skill/examples.md +0 -0
  101. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/__init__.py +0 -0
  102. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/apple_terminal.py +0 -0
  103. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/base.py +0 -0
  104. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/gnome.py +0 -0
  105. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/iterm2.py +0 -0
  106. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/kitty.py +0 -0
  107. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/registry.py +0 -0
  108. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/tmux.py +0 -0
  109. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/warp.py +0 -0
  110. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/dev/terminals/zellij.py +0 -0
  111. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/docs_gen.py +0 -0
  112. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/example-config.toml +0 -0
  113. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/install/__init__.py +0 -0
  114. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/install/common.py +0 -0
  115. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/install/hotkeys.py +0 -0
  116. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/install/services.py +0 -0
  117. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/__init__.py +0 -0
  118. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_files.py +0 -0
  119. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_filters.py +0 -0
  120. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_git.py +0 -0
  121. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_indexer.py +0 -0
  122. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_ingest.py +0 -0
  123. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_persistence.py +0 -0
  124. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_prompt.py +0 -0
  125. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_store.py +0 -0
  126. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_streaming.py +0 -0
  127. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/_tasks.py +0 -0
  128. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/entities.py +0 -0
  129. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/memory/models.py +0 -0
  130. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/opts.py +0 -0
  131. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/py.typed +0 -0
  132. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/__init__.py +0 -0
  133. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/_indexer.py +0 -0
  134. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/_indexing.py +0 -0
  135. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/_prompt.py +0 -0
  136. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/_retriever.py +0 -0
  137. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/_store.py +0 -0
  138. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/_utils.py +0 -0
  139. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/api.py +0 -0
  140. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/client.py +0 -0
  141. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/engine.py +0 -0
  142. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/rag/models.py +0 -0
  143. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/.runtime/.gitkeep +0 -0
  144. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/__init__.py +0 -0
  145. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/linux-hotkeys/README.md +0 -0
  146. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh +0 -0
  147. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/linux-hotkeys/toggle-transcription.sh +0 -0
  148. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/linux-hotkeys/toggle-voice-edit.sh +0 -0
  149. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/macos-hotkeys/README.md +0 -0
  150. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/macos-hotkeys/skhd-config-example +0 -0
  151. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/macos-hotkeys/toggle-autocorrect.sh +0 -0
  152. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/macos-hotkeys/toggle-transcription.sh +0 -0
  153. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/macos-hotkeys/toggle-voice-edit.sh +0 -0
  154. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/nvidia-asr-server/README.md +0 -0
  155. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/nvidia-asr-server/pyproject.toml +0 -0
  156. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/nvidia-asr-server/server.py +0 -0
  157. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/nvidia-asr-server/shell.nix +0 -0
  158. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/nvidia-asr-server/uv.lock +0 -0
  159. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-openwakeword.sh +0 -0
  160. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-piper-windows.ps1 +0 -0
  161. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-piper.sh +0 -0
  162. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-whisper-linux.sh +0 -0
  163. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-whisper-macos.sh +0 -0
  164. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-whisper-windows.ps1 +0 -0
  165. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run-whisper.sh +0 -0
  166. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/run_faster_whisper_server.py +0 -0
  167. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/setup-linux-hotkeys.sh +0 -0
  168. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/setup-linux.sh +0 -0
  169. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/setup-macos-hotkeys.sh +0 -0
  170. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/setup-macos.sh +0 -0
  171. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/setup-windows.ps1 +0 -0
  172. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/start-all-services-windows.ps1 +0 -0
  173. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/scripts/start-all-services.sh +0 -0
  174. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/__init__.py +0 -0
  175. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/common.py +0 -0
  176. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/model_manager.py +0 -0
  177. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/model_registry.py +0 -0
  178. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/proxy/__init__.py +0 -0
  179. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/proxy/api.py +0 -0
  180. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/streaming.py +0 -0
  181. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/__init__.py +0 -0
  182. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/api.py +0 -0
  183. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/backends/__init__.py +0 -0
  184. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/backends/base.py +0 -0
  185. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/backends/kokoro.py +0 -0
  186. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/backends/piper.py +0 -0
  187. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/model_manager.py +0 -0
  188. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/model_registry.py +0 -0
  189. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/tts/wyoming_handler.py +0 -0
  190. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/__init__.py +0 -0
  191. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/api.py +0 -0
  192. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/backends/__init__.py +0 -0
  193. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/backends/base.py +0 -0
  194. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/backends/faster_whisper.py +0 -0
  195. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/backends/mlx.py +0 -0
  196. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/languages.py +0 -0
  197. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/model_manager.py +0 -0
  198. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/model_registry.py +0 -0
  199. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/server/whisper/wyoming_handler.py +0 -0
  200. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/services/__init__.py +0 -0
  201. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/services/_wyoming_utils.py +0 -0
  202. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/services/asr.py +0 -0
  203. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/services/llm.py +0 -0
  204. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/services/tts.py +0 -0
  205. {agent_cli-0.61.5 → agent_cli-0.63.0}/agent_cli/services/wake_word.py +0 -0
  206. {agent_cli-0.61.5 → agent_cli-0.63.0}/docker/docker-compose.yml +0 -0
  207. {agent_cli-0.61.5 → agent_cli-0.63.0}/docker/tts.Dockerfile +0 -0
  208. {agent_cli-0.61.5 → agent_cli-0.63.0}/docker/whisper.Dockerfile +0 -0
  209. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/CNAME +0 -0
  210. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/architecture/index.md +0 -0
  211. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/architecture/rag.md +0 -0
  212. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/assistant.md +0 -0
  213. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/autocorrect.md +0 -0
  214. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/chat.md +0 -0
  215. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/config.md +0 -0
  216. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/index.md +0 -0
  217. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/install-hotkeys.md +0 -0
  218. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/install-services.md +0 -0
  219. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/memory.md +0 -0
  220. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/rag-proxy.md +0 -0
  221. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/server/index.md +0 -0
  222. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/server/transcription-proxy.md +0 -0
  223. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/server/tts.md +0 -0
  224. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/server/whisper.md +0 -0
  225. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/speak.md +0 -0
  226. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/start-services.md +0 -0
  227. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/transcribe-daemon.md +0 -0
  228. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/transcribe.md +0 -0
  229. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/commands/voice-edit.md +0 -0
  230. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/iOS_Shortcut_Guide.md +0 -0
  231. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/installation/docker.md +0 -0
  232. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/installation/index.md +0 -0
  233. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/installation/linux.md +0 -0
  234. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/installation/macos.md +0 -0
  235. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/installation/nixos.md +0 -0
  236. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/installation/windows.md +0 -0
  237. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/logo-clean.svg +0 -0
  238. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/overrides/partials/integrations/analytics/custom.html +0 -0
  239. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/run_markdown_code_runner.py +0 -0
  240. {agent_cli-0.61.5 → agent_cli-0.63.0}/docs/system-integration.md +0 -0
  241. {agent_cli-0.61.5 → agent_cli-0.63.0}/example.agent-cli-config.toml +0 -0
  242. {agent_cli-0.61.5 → agent_cli-0.63.0}/justfile +0 -0
  243. {agent_cli-0.61.5 → agent_cli-0.63.0}/pyproject.toml +0 -0
  244. {agent_cli-0.61.5 → agent_cli-0.63.0}/shell.nix +0 -0
  245. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/__init__.py +0 -0
  246. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/__init__.py +0 -0
  247. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_fix_my_text.py +0 -0
  248. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_interactive.py +0 -0
  249. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_interactive_extra.py +0 -0
  250. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_memory_add.py +0 -0
  251. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_speak.py +0 -0
  252. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_speak_e2e.py +0 -0
  253. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_transcribe.py +0 -0
  254. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_transcribe_agent.py +0 -0
  255. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_transcribe_daemon.py +0 -0
  256. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_transcribe_e2e.py +0 -0
  257. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_transcribe_recovery.py +0 -0
  258. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_tts_common.py +0 -0
  259. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_tts_common_extra.py +0 -0
  260. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_voice_agent_common.py +0 -0
  261. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_voice_edit.py +0 -0
  262. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_voice_edit_e2e.py +0 -0
  263. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/agents/test_wake_word_assistant.py +0 -0
  264. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/conftest.py +0 -0
  265. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/core/__init__.py +0 -0
  266. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/core/test_audio_format.py +0 -0
  267. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/core/test_chroma.py +0 -0
  268. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/core/test_sse.py +0 -0
  269. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/core/test_vad.py +0 -0
  270. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/core/test_watch.py +0 -0
  271. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/__init__.py +0 -0
  272. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_cli.py +0 -0
  273. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_coding_agents.py +0 -0
  274. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_editors.py +0 -0
  275. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_project.py +0 -0
  276. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_terminals.py +0 -0
  277. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/dev/test_verification.py +0 -0
  278. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/__init__.py +0 -0
  279. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_api_health.py +0 -0
  280. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_api_integration_liveish.py +0 -0
  281. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_client.py +0 -0
  282. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_engine.py +0 -0
  283. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_files.py +0 -0
  284. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_filters.py +0 -0
  285. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_git_integration.py +0 -0
  286. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_indexer.py +0 -0
  287. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_memory_integration.py +0 -0
  288. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_proxy_passthrough.py +0 -0
  289. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_store.py +0 -0
  290. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/memory/test_utils.py +0 -0
  291. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/mocks/__init__.py +0 -0
  292. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/mocks/audio.py +0 -0
  293. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/mocks/llm.py +0 -0
  294. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/mocks/wyoming.py +0 -0
  295. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/__init__.py +0 -0
  296. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_api.py +0 -0
  297. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_engine.py +0 -0
  298. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_history.py +0 -0
  299. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_indexer.py +0 -0
  300. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_indexing.py +0 -0
  301. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_rag_client.py +0 -0
  302. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_rag_integration_liveish.py +0 -0
  303. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_rag_proxy_passthrough.py +0 -0
  304. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_retriever.py +0 -0
  305. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_store.py +0 -0
  306. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/rag/test_utils.py +0 -0
  307. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_api.py +0 -0
  308. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_api_integration.py +0 -0
  309. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_asr.py +0 -0
  310. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_asr_recovery.py +0 -0
  311. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_audio_e2e.py +0 -0
  312. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_cli.py +0 -0
  313. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_config.py +0 -0
  314. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_config_cmd.py +0 -0
  315. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_docs_gen.py +0 -0
  316. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_env_vars.py +0 -0
  317. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_json_output.py +0 -0
  318. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_llm.py +0 -0
  319. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_llm_gemini.py +0 -0
  320. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_memory_tools.py +0 -0
  321. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_mlx_backend.py +0 -0
  322. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_process_manager.py +0 -0
  323. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_server_streaming.py +0 -0
  324. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_server_tts.py +0 -0
  325. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_server_whisper.py +0 -0
  326. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_services.py +0 -0
  327. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_tools.py +0 -0
  328. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_tts.py +0 -0
  329. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_utils.py +0 -0
  330. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_wake_word.py +0 -0
  331. {agent_cli-0.61.5 → agent_cli-0.63.0}/tests/test_wyoming_utils.py +0 -0
  332. {agent_cli-0.61.5 → agent_cli-0.63.0}/uv.lock +0 -0
  333. {agent_cli-0.61.5 → agent_cli-0.63.0}/zensical.toml +0 -0
@@ -8,7 +8,7 @@ repos:
8
8
  - id: end-of-file-fixer
9
9
  - id: mixed-line-ending
10
10
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
- rev: "v0.14.11"
11
+ rev: "v0.14.13"
12
12
  hooks:
13
13
  - id: ruff
14
14
  args: ["--fix"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.61.5
3
+ Version: 0.63.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>
@@ -128,7 +128,7 @@ Since then I have expanded the tool with many more features, all focused on loca
128
128
  - **[`memory`](docs/commands/memory.md)**: Long-term memory system with `memory proxy` and `memory add`.
129
129
  - **[`rag-proxy`](docs/commands/rag-proxy.md)**: RAG proxy server for chatting with your documents.
130
130
  - **[`dev`](docs/commands/dev.md)**: Parallel development with git worktrees and AI coding agents.
131
- - **[`server`](docs/commands/server.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
131
+ - **[`server`](docs/commands/server/index.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
132
132
  - **[`transcribe-daemon`](docs/commands/transcribe-daemon.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]"`.
133
133
 
134
134
  ## Quick Start
@@ -389,7 +389,7 @@ Our installation scripts automatically handle all dependencies:
389
389
  |---------|---------|-----------------|
390
390
  | **[Ollama](https://ollama.ai/)** | Local LLM for text processing | ✅ Yes, with default model |
391
391
  | **[Wyoming Faster Whisper](https://github.com/rhasspy/wyoming-faster-whisper)** | Speech-to-text | ✅ Yes, via `uvx` |
392
- | **[`agent-cli server whisper`](docs/commands/server.md#whisper)** | Speech-to-text (alternative) | ✅ Built-in, `pip install "agent-cli[whisper]"` |
392
+ | **[`agent-cli server whisper`](docs/commands/server/whisper.md)** | Speech-to-text (alternative) | ✅ Built-in, `pip install "agent-cli[whisper]"` |
393
393
  | **[Wyoming Piper](https://github.com/rhasspy/wyoming-piper)** | Text-to-speech | ✅ Yes, via `uvx` |
394
394
  | **[Kokoro-FastAPI](https://github.com/remsky/Kokoro-FastAPI)** | Premium TTS (optional) | ⚙️ Can be added later |
395
395
  | **[Wyoming openWakeWord](https://github.com/rhasspy/wyoming-openwakeword)** | Wake word detection | ✅ Yes, for `assistant` |
@@ -48,7 +48,7 @@ Since then I have expanded the tool with many more features, all focused on loca
48
48
  - **[`memory`](docs/commands/memory.md)**: Long-term memory system with `memory proxy` and `memory add`.
49
49
  - **[`rag-proxy`](docs/commands/rag-proxy.md)**: RAG proxy server for chatting with your documents.
50
50
  - **[`dev`](docs/commands/dev.md)**: Parallel development with git worktrees and AI coding agents.
51
- - **[`server`](docs/commands/server.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
51
+ - **[`server`](docs/commands/server/index.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
52
52
  - **[`transcribe-daemon`](docs/commands/transcribe-daemon.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]"`.
53
53
 
54
54
  ## Quick Start
@@ -309,7 +309,7 @@ Our installation scripts automatically handle all dependencies:
309
309
  |---------|---------|-----------------|
310
310
  | **[Ollama](https://ollama.ai/)** | Local LLM for text processing | ✅ Yes, with default model |
311
311
  | **[Wyoming Faster Whisper](https://github.com/rhasspy/wyoming-faster-whisper)** | Speech-to-text | ✅ Yes, via `uvx` |
312
- | **[`agent-cli server whisper`](docs/commands/server.md#whisper)** | Speech-to-text (alternative) | ✅ Built-in, `pip install "agent-cli[whisper]"` |
312
+ | **[`agent-cli server whisper`](docs/commands/server/whisper.md)** | Speech-to-text (alternative) | ✅ Built-in, `pip install "agent-cli[whisper]"` |
313
313
  | **[Wyoming Piper](https://github.com/rhasspy/wyoming-piper)** | Text-to-speech | ✅ Yes, via `uvx` |
314
314
  | **[Kokoro-FastAPI](https://github.com/remsky/Kokoro-FastAPI)** | Premium TTS (optional) | ⚙️ Can be added later |
315
315
  | **[Wyoming openWakeWord](https://github.com/rhasspy/wyoming-openwakeword)** | Wake word detection | ✅ Yes, for `assistant` |
@@ -253,7 +253,7 @@ async def _async_main(
253
253
  print_with_style("✨ Ready for next command...", style="green")
254
254
 
255
255
 
256
- @app.command("assistant")
256
+ @app.command("assistant", rich_help_panel="Voice Commands")
257
257
  def assistant(
258
258
  *,
259
259
  # --- Provider Selection ---
@@ -208,7 +208,7 @@ async def _async_autocorrect(
208
208
  sys.exit(1)
209
209
 
210
210
 
211
- @app.command("autocorrect")
211
+ @app.command("autocorrect", rich_help_panel="Text Commands")
212
212
  def autocorrect(
213
213
  *,
214
214
  text: str | None = typer.Argument(
@@ -373,7 +373,7 @@ async def _async_main(
373
373
  raise
374
374
 
375
375
 
376
- @app.command("chat")
376
+ @app.command("chat", rich_help_panel="Voice Commands")
377
377
  def chat(
378
378
  *,
379
379
  # --- Provider Selection ---
@@ -14,7 +14,7 @@ memory_app = typer.Typer(
14
14
  no_args_is_help=True,
15
15
  )
16
16
 
17
- app.add_typer(memory_app, name="memory")
17
+ app.add_typer(memory_app, name="memory", rich_help_panel="Servers")
18
18
 
19
19
 
20
20
  @memory_app.callback()
@@ -17,7 +17,7 @@ from agent_cli.core.utils import (
17
17
  )
18
18
 
19
19
 
20
- @app.command("rag-proxy")
20
+ @app.command("rag-proxy", rich_help_panel="Servers")
21
21
  def rag_proxy(
22
22
  docs_folder: Path = typer.Option( # noqa: B008
23
23
  "./rag_docs",
@@ -79,7 +79,7 @@ async def _async_main(
79
79
  return text
80
80
 
81
81
 
82
- @app.command("speak")
82
+ @app.command("speak", rich_help_panel="Text Commands")
83
83
  def speak(
84
84
  *,
85
85
  text: str | None = typer.Argument(
@@ -460,7 +460,7 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
460
460
  )
461
461
 
462
462
 
463
- @app.command("transcribe")
463
+ @app.command("transcribe", rich_help_panel="Voice Commands")
464
464
  def transcribe( # noqa: PLR0912
465
465
  *,
466
466
  extra_instructions: str | None = typer.Option(
@@ -286,7 +286,7 @@ async def _daemon_loop(cfg: DaemonConfig) -> None: # noqa: PLR0912, PLR0915
286
286
  await asyncio.wait(background_tasks, timeout=2.0)
287
287
 
288
288
 
289
- @app.command("transcribe-daemon")
289
+ @app.command("transcribe-daemon", rich_help_panel="Voice Commands")
290
290
  def transcribe_daemon( # noqa: PLR0912
291
291
  *,
292
292
  # Daemon-specific options
@@ -172,7 +172,7 @@ async def _async_main(
172
172
  )
173
173
 
174
174
 
175
- @app.command("voice-edit")
175
+ @app.command("voice-edit", rich_help_panel="Voice Commands")
176
176
  def voice_edit(
177
177
  *,
178
178
  # --- Provider Selection ---
@@ -122,7 +122,7 @@ app = typer.Typer(
122
122
  rich_markup_mode="markdown",
123
123
  no_args_is_help=True,
124
124
  )
125
- main_app.add_typer(app, name="dev")
125
+ main_app.add_typer(app, name="dev", rich_help_panel="Development")
126
126
 
127
127
 
128
128
  @app.callback()
@@ -344,6 +344,19 @@ def _launch_editor(path: Path, editor: Editor) -> None:
344
344
  _warn(f"Could not open editor: {e}")
345
345
 
346
346
 
347
+ def _write_prompt_to_worktree(worktree_path: Path, prompt: str) -> Path:
348
+ """Write the prompt to .claude/TASK.md in the worktree.
349
+
350
+ This makes the task description available to the spawned agent
351
+ and provides a record of what was requested.
352
+ """
353
+ claude_dir = worktree_path / ".claude"
354
+ claude_dir.mkdir(parents=True, exist_ok=True)
355
+ task_file = claude_dir / "TASK.md"
356
+ task_file.write_text(prompt + "\n")
357
+ return task_file
358
+
359
+
347
360
  def _format_env_prefix(env: dict[str, str]) -> str:
348
361
  """Format environment variables as shell prefix.
349
362
 
@@ -627,6 +640,11 @@ def new( # noqa: PLR0912, PLR0915
627
640
  # Only warn if user explicitly requested direnv
628
641
  _warn("direnv not installed, skipping .envrc setup")
629
642
 
643
+ # Write prompt to worktree (makes task available to the spawned agent)
644
+ if prompt:
645
+ task_file = _write_prompt_to_worktree(result.path, prompt)
646
+ _success(f"Wrote task to {task_file.relative_to(result.path)}")
647
+
630
648
  # Resolve editor and agent
631
649
  resolved_editor = _resolve_editor(editor, editor_name, default_editor)
632
650
  resolved_agent = _resolve_agent(agent, agent_name, default_agent)
@@ -1039,6 +1057,11 @@ def start_agent(
1039
1057
  if not agent.is_available():
1040
1058
  _error(f"{agent.name} is not installed. Install from: {agent.install_url}")
1041
1059
 
1060
+ # Write prompt to worktree (makes task available to the agent)
1061
+ if prompt:
1062
+ task_file = _write_prompt_to_worktree(wt.path, prompt)
1063
+ _success(f"Wrote task to {task_file.relative_to(wt.path)}")
1064
+
1042
1065
  merged_args = _merge_agent_args(agent, agent_args)
1043
1066
  agent_env = _get_agent_env(agent)
1044
1067
  _info(f"Starting {agent.name} in {wt.path}...")
@@ -47,8 +47,9 @@ agent-cli dev new <branch-name> --agent --prompt-file path/to/prompt.md
47
47
  This creates:
48
48
  1. A new git worktree with its own branch
49
49
  2. Runs project setup (installs dependencies)
50
- 3. Opens a new terminal tab with an AI coding agent
51
- 4. Passes your prompt to the agent
50
+ 3. Saves your prompt to `.claude/TASK.md` in the worktree (for reference)
51
+ 4. Opens a new terminal tab with an AI coding agent
52
+ 5. Passes your prompt to the agent
52
53
 
53
54
  **Important**: Use `--prompt-file` for prompts longer than a single line. The `--prompt` option passes text through the shell, which can cause issues with special characters (exclamation marks, dollar signs, backticks, quotes) in ZSH and other shells. Using `--prompt-file` avoids all shell quoting issues.
54
55
 
@@ -55,6 +55,15 @@ def is_git_repo(path: Path | None = None) -> bool:
55
55
  return False
56
56
 
57
57
 
58
+ def has_origin_remote(path: Path | None = None) -> bool:
59
+ """Check if the repository has an 'origin' remote configured."""
60
+ try:
61
+ result = _run_git("remote", "get-url", "origin", cwd=path, check=False)
62
+ return result.returncode == 0
63
+ except Exception:
64
+ return False
65
+
66
+
58
67
  def get_repo_root(path: Path | None = None) -> Path | None:
59
68
  """Get the root directory of the git repository."""
60
69
  try:
@@ -461,6 +470,35 @@ def _init_submodules(
461
470
  )
462
471
 
463
472
 
473
+ def _pull_lfs(
474
+ worktree_path: Path,
475
+ *,
476
+ on_log: Callable[[str], None] | None = None,
477
+ capture_output: bool = True,
478
+ ) -> None:
479
+ """Pull Git LFS files in a worktree if LFS is used.
480
+
481
+ Evidence: https://git-lfs.com/ - `git lfs pull` fetches LFS objects.
482
+ This is a no-op if LFS is not used or files are already present.
483
+ """
484
+ # Check if .gitattributes contains LFS filters
485
+ gitattributes = worktree_path / ".gitattributes"
486
+ if not gitattributes.exists():
487
+ return
488
+
489
+ if "filter=lfs" not in gitattributes.read_text():
490
+ return
491
+
492
+ # Check if git-lfs is installed
493
+ if not shutil.which("git-lfs"):
494
+ return
495
+
496
+ if on_log:
497
+ on_log("Pulling Git LFS files...")
498
+
499
+ _run_git("lfs", "pull", cwd=worktree_path, check=False, capture_output=capture_output)
500
+
501
+
464
502
  def _add_worktree(
465
503
  branch_name: str,
466
504
  worktree_path: Path,
@@ -586,8 +624,11 @@ def create_worktree(
586
624
  # Create base directory if needed
587
625
  base_dir.mkdir(parents=True, exist_ok=True)
588
626
 
589
- # Fetch latest refs
590
- if fetch:
627
+ # Check if origin remote exists
628
+ origin_exists = has_origin_remote(repo_root)
629
+
630
+ # Fetch latest refs (only if origin exists)
631
+ if fetch and origin_exists:
591
632
  if on_log:
592
633
  on_log("Running: git fetch origin")
593
634
  _run_git("fetch", "origin", cwd=repo_root, check=False, capture_output=capture_output)
@@ -596,10 +637,10 @@ def create_worktree(
596
637
  from_ref_explicit = from_ref is not None
597
638
 
598
639
  # Determine the reference to create from
599
- # Use origin/{branch} to ensure we're using the freshly-fetched remote ref,
600
- # not a potentially stale local branch
640
+ # Use origin/{branch} if origin exists, otherwise use local branch
601
641
  if from_ref is None:
602
- from_ref = f"origin/{get_default_branch(repo_root)}"
642
+ default_branch = get_default_branch(repo_root)
643
+ from_ref = f"origin/{default_branch}" if origin_exists else default_branch
603
644
 
604
645
  # Check if branch exists remotely or locally
605
646
  remote_exists, local_exists = _check_branch_exists(branch_name, repo_root)
@@ -634,6 +675,13 @@ def create_worktree(
634
675
  capture_output=capture_output,
635
676
  )
636
677
 
678
+ # Pull Git LFS files if the repo uses LFS
679
+ _pull_lfs(
680
+ worktree_path,
681
+ on_log=on_log,
682
+ capture_output=capture_output,
683
+ )
684
+
637
685
  return CreateWorktreeResult(
638
686
  success=True,
639
687
  path=worktree_path,
@@ -25,6 +25,7 @@ LOGGER = logging.getLogger(__name__)
25
25
 
26
26
  _DEFAULT_MMR_LAMBDA = 0.7
27
27
  _SUMMARY_ROLE = "summary"
28
+ _MIN_MAX_EPSILON = 1e-8 # Avoid division by zero in min-max normalization
28
29
 
29
30
 
30
31
  def gather_relevant_existing_memories(
@@ -135,7 +136,7 @@ def retrieve_memory(
135
136
  include_summary: bool = True,
136
137
  mmr_lambda: float = _DEFAULT_MMR_LAMBDA,
137
138
  recency_weight: float = 0.2,
138
- score_threshold: float = 0.35,
139
+ score_threshold: float | None = None,
139
140
  filters: dict[str, Any] | None = None,
140
141
  ) -> tuple[MemoryRetrieval, list[str]]:
141
142
  """Execute search + rerank + recency + MMR."""
@@ -161,8 +162,15 @@ def retrieve_memory(
161
162
  seen_ids.add(rec_id)
162
163
  raw_candidates.append(rec)
163
164
 
164
- def _sigmoid(x: float) -> float:
165
- return 1.0 / (1.0 + math.exp(-x))
165
+ def _min_max_normalize(scores: list[float]) -> list[float]:
166
+ """Normalize scores to 0-1 range using min-max scaling."""
167
+ if not scores:
168
+ return scores
169
+ min_score = min(scores)
170
+ max_score = max(scores)
171
+ if max_score - min_score < _MIN_MAX_EPSILON:
172
+ return [0.5] * len(scores) # All scores equal
173
+ return [(s - min_score) / (max_score - min_score) for s in scores]
166
174
 
167
175
  def recency_score(meta: MemoryMetadata) -> float:
168
176
  dt = datetime.fromisoformat(meta.created_at)
@@ -176,10 +184,12 @@ def retrieve_memory(
176
184
  if raw_candidates:
177
185
  pairs = [(query, mem.content) for mem in raw_candidates]
178
186
  rr_scores = predict_relevance(reranker_model, pairs)
179
- for mem, rr in zip(raw_candidates, rr_scores, strict=False):
180
- relevance = _sigmoid(rr)
181
- # Filter out low-relevance memories to reduce noise
182
- if relevance < score_threshold:
187
+ # Normalize raw reranker scores to 0-1 range
188
+ normalized_scores = _min_max_normalize(rr_scores)
189
+
190
+ for mem, relevance in zip(raw_candidates, normalized_scores, strict=False):
191
+ # Filter out low-relevance memories if threshold is set
192
+ if score_threshold is not None and relevance < score_threshold:
183
193
  continue
184
194
 
185
195
  recency = recency_score(mem.metadata)
@@ -235,7 +245,7 @@ async def augment_chat_request(
235
245
  include_global: bool = True,
236
246
  mmr_lambda: float = _DEFAULT_MMR_LAMBDA,
237
247
  recency_weight: float = 0.2,
238
- score_threshold: float = 0.35,
248
+ score_threshold: float | None = None,
239
249
  filters: dict[str, Any] | None = None,
240
250
  ) -> tuple[ChatRequest, MemoryRetrieval | None, str, list[str]]:
241
251
  """Retrieve memory context and augment the chat request."""
@@ -30,7 +30,7 @@ def create_app(
30
30
  max_entries: int = 500,
31
31
  mmr_lambda: float = 0.7,
32
32
  recency_weight: float = 0.2,
33
- score_threshold: float = 0.35,
33
+ score_threshold: float | None = None,
34
34
  enable_git_versioning: bool = True,
35
35
  ) -> FastAPI:
36
36
  """Create the FastAPI app for memory-backed chat."""
@@ -49,7 +49,7 @@ class MemoryClient:
49
49
  max_entries: int = 500,
50
50
  mmr_lambda: float = 0.7,
51
51
  recency_weight: float = 0.2,
52
- score_threshold: float = 0.35,
52
+ score_threshold: float | None = None,
53
53
  start_watcher: bool = False,
54
54
  enable_git_versioning: bool = True,
55
55
  ) -> None:
@@ -236,7 +236,7 @@ async def process_chat_request(
236
236
  max_entries: int = _DEFAULT_MAX_ENTRIES,
237
237
  mmr_lambda: float = _DEFAULT_MMR_LAMBDA,
238
238
  recency_weight: float = 0.2,
239
- score_threshold: float = 0.35,
239
+ score_threshold: float | None = None,
240
240
  postprocess_in_background: bool = True,
241
241
  enable_git_versioning: bool = False,
242
242
  filters: dict[str, Any] | None = None,
@@ -34,7 +34,7 @@ app = typer.Typer(
34
34
  rich_markup_mode="markdown",
35
35
  no_args_is_help=True,
36
36
  )
37
- main_app.add_typer(app, name="server")
37
+ main_app.add_typer(app, name="server", rich_help_panel="Servers")
38
38
 
39
39
 
40
40
  @app.callback()
@@ -207,8 +207,8 @@ Executed synchronously during `augment_chat_request`.
207
207
  * **Model:** `Xenova/ms-marco-MiniLM-L-6-v2` (ONNX, quantized).
208
208
  * **Input:** Pairs of `(user_query, memory_content)`.
209
209
  * **Output:** Raw logit score.
210
- * **Normalization:** `relevance = sigmoid(raw_score)`.
211
- * **Thresholding:** Candidates with `relevance < score_threshold` (default 0.35) are hard-pruned.
210
+ * **Normalization:** Min-max scaling across the candidate batch (best match = 1.0, worst = 0.0).
211
+ * **Thresholding:** If `score_threshold` is set, candidates below it are pruned. Default is `None` (no filtering).
212
212
 
213
213
  ### Step 3: Recency Scoring
214
214
  Combines semantic relevance with temporal proximity.
@@ -309,7 +309,7 @@ To replicate the system behavior, the following prompt strategies are required.
309
309
  | `max_entries` | `500` | Hard cap on memories per conversation. |
310
310
  | `mmr_lambda` | `0.7` | Diversity weighting (1.0 = pure relevance). |
311
311
  | `recency_weight` | `0.2` | Score weight for temporal proximity. |
312
- | `score_threshold` | `0.35` | Minimum semantic relevance to consider. |
312
+ | `score_threshold` | `None` | Minimum semantic relevance to consider (no filtering by default). |
313
313
  | `enable_summarization` | `True` | Toggle for summary generation loop. |
314
314
  | `openai_base_url` | *required* | Base URL for LLM calls (can point to OpenAI-compatible proxies). |
315
315
  | `enable_git_versioning` | `True` | Toggle to enable/disable Git versioning of the memory store. |
@@ -61,8 +61,8 @@ agent-cli dev new [BRANCH] [OPTIONS]
61
61
  | `--with-editor` | Specific editor (cursor, vscode, zed, etc.) |
62
62
  | `--with-agent` | Specific agent (claude, codex, gemini, aider) |
63
63
  | `--agent-args` | Extra arguments to pass to the agent |
64
- | `--prompt`, `-p` | Initial prompt to pass to the AI agent |
65
- | `--prompt-file`, `-P` | Read initial prompt from a file (avoids shell quoting issues) |
64
+ | `--prompt`, `-p` | Initial prompt to pass to the AI agent (saved to `.claude/TASK.md` in worktree) |
65
+ | `--prompt-file`, `-P` | Read initial prompt from a file (saved to `.claude/TASK.md` in worktree) |
66
66
  | `--direnv` | Generate .envrc file for direnv (auto-detects venv) |
67
67
  | `--setup/--no-setup` | Run automatic project setup (default: enabled) |
68
68
  | `--copy-env/--no-copy-env` | Copy .env files from main repo (default: enabled) |
@@ -223,8 +223,8 @@ agent-cli dev agent NAME [--agent/-a AGENT] [--agent-args ARGS] [--prompt/-p PRO
223
223
  |--------|-------------|
224
224
  | `--agent`, `-a` | Specific agent (claude, codex, gemini, aider) |
225
225
  | `--agent-args` | Extra arguments to pass to the agent |
226
- | `--prompt`, `-p` | Initial prompt to pass to the AI agent |
227
- | `--prompt-file`, `-P` | Read initial prompt from a file (avoids shell quoting issues) |
226
+ | `--prompt`, `-p` | Initial prompt to pass to the AI agent (saved to `.claude/TASK.md` in worktree) |
227
+ | `--prompt-file`, `-P` | Read initial prompt from a file (saved to `.claude/TASK.md` in worktree) |
228
228
 
229
229
  **Examples:**
230
230
 
@@ -495,6 +495,16 @@ git submodule update --init --recursive
495
495
 
496
496
  This ensures all submodule dependencies are available in the worktree.
497
497
 
498
+ ### Git LFS
499
+
500
+ If the repository uses Git LFS (detected via `filter=lfs` in `.gitattributes`), LFS files are automatically pulled:
501
+
502
+ ```bash
503
+ git lfs pull
504
+ ```
505
+
506
+ This ensures large files tracked by LFS are available in the worktree.
507
+
498
508
  ### Environment Files
499
509
 
500
510
  The following files are automatically copied to new dev environments:
@@ -235,7 +235,7 @@ Now just run `agent-cli transcribe` - it automatically uses your local server.
235
235
 
236
236
  > [!TIP]
237
237
  > **OpenAI SDK users:** The server also exposes an OpenAI-compatible API on port 10301.
238
- > See [server whisper docs](commands/server.md#whisper) for all options.
238
+ > See [server whisper docs](commands/server/whisper.md) for all options.
239
239
 
240
240
  ## Audio Device Configuration
241
241
 
@@ -43,7 +43,7 @@ For a complete local setup with all AI services:
43
43
  > pip install "agent-cli[whisper-mlx]"
44
44
  > agent-cli server whisper --backend mlx
45
45
  > ```
46
- > See [Local Whisper Server](commands/server.md#whisper) for details.
46
+ > See [Local Whisper Server](commands/server/whisper.md) for details.
47
47
 
48
48
  === "Using CLI Commands"
49
49
 
@@ -64,7 +64,7 @@ Since then I have expanded the tool with many more features, all focused on loca
64
64
  | [`rag-proxy`](commands/rag-proxy.md) | Chat with your documents via RAG |
65
65
  | [`memory`](commands/memory.md) | Long-term memory system for conversations |
66
66
  | [`dev`](commands/dev.md) | Parallel development with git worktrees and AI coding agents |
67
- | [`server`](commands/server.md) | Local ASR & TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory, and multi-platform acceleration (MLX/CUDA) |
67
+ | [`server`](commands/server/index.md) | Local ASR & TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory, and multi-platform acceleration (MLX/CUDA) |
68
68
 
69
69
  ## Quick Start
70
70