agentwire-dev 1.49.0__tar.gz → 1.50.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 (452) hide show
  1. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/PKG-INFO +54 -40
  2. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/README.md +53 -39
  3. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/__init__.py +1 -1
  4. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/send_cli.py +9 -5
  5. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/session_ready.py +28 -10
  6. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/announcements.json +18 -0
  7. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/base.html +3 -0
  8. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.claude/commands/handoff.md +0 -0
  9. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.claude/skills/wiki/SKILL.md +0 -0
  10. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/FUNDING.yml +0 -0
  11. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  12. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  13. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
  14. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  15. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/workflows/pytest.yml +0 -0
  16. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/workflows/ruff.yml +0 -0
  17. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/workflows/security.yml +0 -0
  18. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.github/workflows/tts-smoke.yml +0 -0
  19. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/.gitignore +0 -0
  20. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/AGENTS.md +0 -0
  21. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/CODE_OF_CONDUCT.md +0 -0
  22. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/CONTRIBUTING.md +0 -0
  23. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/Dockerfile.local +0 -0
  24. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/LICENSE +0 -0
  25. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/RELEASING.md +0 -0
  26. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/SECURITY.md +0 -0
  27. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/SPONSORS.md +0 -0
  28. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/__main__.py +0 -0
  29. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/agents/__init__.py +0 -0
  30. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/agents/base.py +0 -0
  31. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/agents/tmux.py +0 -0
  32. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/cached_status.py +0 -0
  33. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/channels/__init__.py +0 -0
  34. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/channels/base.py +0 -0
  35. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/channels/email.py +0 -0
  36. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/channels/push.py +0 -0
  37. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/channels/quo.py +0 -0
  38. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/channels_cli.py +0 -0
  39. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/completion.py +0 -0
  40. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/config.py +0 -0
  41. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/core.py +0 -0
  42. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/council/__init__.py +0 -0
  43. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/council/cli.py +0 -0
  44. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/council/inbox.py +0 -0
  45. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/council/state.py +0 -0
  46. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/council/view.py +0 -0
  47. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/devices.py +0 -0
  48. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/diff_cli.py +0 -0
  49. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/doctor_cli.py +0 -0
  50. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/doctor_voice.py +0 -0
  51. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/ensure_cli.py +0 -0
  52. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/fetch.py +0 -0
  53. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff/__init__.py +0 -0
  54. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff/git_state.py +0 -0
  55. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff/instructions.py +0 -0
  56. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff/parser.py +0 -0
  57. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff/renderer.py +0 -0
  58. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff/schema.py +0 -0
  59. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/handoff_cli.py +0 -0
  60. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/history.py +0 -0
  61. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/history_cli.py +0 -0
  62. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/__init__.py +0 -0
  63. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/agentwire-permission.sh +0 -0
  64. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/__init__.py +0 -0
  65. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/audit_logger.py +0 -0
  66. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/bash-tool-damage-control.py +0 -0
  67. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/edit-tool-damage-control.py +0 -0
  68. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/mcp-tool-damage-control.py +0 -0
  69. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/read-tool-damage-control.py +0 -0
  70. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/agentwire.yaml +0 -0
  71. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/aws.yaml +0 -0
  72. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/cloud-hosting.yaml +0 -0
  73. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/containers.yaml +0 -0
  74. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/control-plane.yaml +0 -0
  75. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/core.yaml +0 -0
  76. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/databases.yaml +0 -0
  77. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/firebase.yaml +0 -0
  78. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/gcp.yaml +0 -0
  79. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/git.yaml +0 -0
  80. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/gws.yaml +0 -0
  81. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/infrastructure.yaml +0 -0
  82. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/outbound.yaml +0 -0
  83. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/publish.yaml +0 -0
  84. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/rules/remote.yaml +0 -0
  85. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/damage-control/write-tool-damage-control.py +0 -0
  86. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/idle-handler.sh +0 -0
  87. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks/queue-processor.sh +0 -0
  88. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/hooks_cli.py +0 -0
  89. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/inbox.py +0 -0
  90. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/limits_cli.py +0 -0
  91. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/listen.py +0 -0
  92. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/locking.py +0 -0
  93. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/machine_cli.py +0 -0
  94. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_channels.py +0 -0
  95. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_cli.py +0 -0
  96. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_core.py +0 -0
  97. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_council.py +0 -0
  98. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_desktop.py +0 -0
  99. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_handoff.py +0 -0
  100. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_history.py +0 -0
  101. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_listen.py +0 -0
  102. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_lock.py +0 -0
  103. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_machine.py +0 -0
  104. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_msg.py +0 -0
  105. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_notify.py +0 -0
  106. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_pane.py +0 -0
  107. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_projects.py +0 -0
  108. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_scheduler.py +0 -0
  109. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_scratchpad.py +0 -0
  110. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_server.py +0 -0
  111. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_services.py +0 -0
  112. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_session.py +0 -0
  113. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_status.py +0 -0
  114. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_task.py +0 -0
  115. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_tunnels.py +0 -0
  116. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_voice.py +0 -0
  117. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_voiceclone.py +0 -0
  118. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_wiki.py +0 -0
  119. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/mcp_worktree.py +0 -0
  120. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/msg_cli.py +0 -0
  121. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/network.py +0 -0
  122. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/notify_cli.py +0 -0
  123. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/onboarding.py +0 -0
  124. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/pane_cli.py +0 -0
  125. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/pane_manager.py +0 -0
  126. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/portal_cli.py +0 -0
  127. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/project_config.py +0 -0
  128. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/projects.py +0 -0
  129. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/prompt_router.py +0 -0
  130. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/prompts_cli.py +0 -0
  131. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/push_cli.py +0 -0
  132. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/push_store.py +0 -0
  133. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/repo_cli.py +0 -0
  134. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/research.py +0 -0
  135. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/__init__.py +0 -0
  136. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/agentwire.md +0 -0
  137. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/anchor.md +0 -0
  138. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/chatbot.md +0 -0
  139. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/correspondent.md +0 -0
  140. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-brain.md +0 -0
  141. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-conscience.md +0 -0
  142. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-critic.md +0 -0
  143. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-devils-advocate.md +0 -0
  144. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-gut.md +0 -0
  145. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-historian.md +0 -0
  146. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-member.md +0 -0
  147. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/council-orchestrator.md +0 -0
  148. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/init.md +0 -0
  149. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/notifications.md +0 -0
  150. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/orchestrator.md +0 -0
  151. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/soul.md +0 -0
  152. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/task-runner.md +0 -0
  153. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/voice.md +0 -0
  154. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/worker.md +0 -0
  155. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles/worktree-session.md +0 -0
  156. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/roles_cli.py +0 -0
  157. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/__init__.py +0 -0
  158. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/artifacts.py +0 -0
  159. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/config.py +0 -0
  160. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/council.py +0 -0
  161. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/desktop.py +0 -0
  162. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/history.py +0 -0
  163. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/machines.py +0 -0
  164. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/notify.py +0 -0
  165. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/permission.py +0 -0
  166. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/projects.py +0 -0
  167. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/push.py +0 -0
  168. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/safety.py +0 -0
  169. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/scheduler.py +0 -0
  170. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/scratchpad.py +0 -0
  171. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/sessions.py +0 -0
  172. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/sessions_admin.py +0 -0
  173. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/routes/voice.py +0 -0
  174. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/safety/__init__.py +0 -0
  175. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/safety/_core.py +0 -0
  176. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/safety_cli.py +0 -0
  177. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/safety_commands.py +0 -0
  178. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/scheduler.py +0 -0
  179. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/scheduler_cli.py +0 -0
  180. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/scratchpad.py +0 -0
  181. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/security.py +0 -0
  182. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/server.py +0 -0
  183. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/services.py +0 -0
  184. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/session_cli.py +0 -0
  185. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/session_context.py +0 -0
  186. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/ssh.py +0 -0
  187. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/agentwire-splash-logo-layers--agentwire-text.png +0 -0
  188. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/agentwire-splash-logo-layers--echo-claw-fg.png +0 -0
  189. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/agentwire-splash-logo-layers--echo.png +0 -0
  190. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/agentwire-splash-logo-layers--telephone.png +0 -0
  191. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/agentwire-splash-logo-layers--tree.png +0 -0
  192. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/css/desktop.css +0 -0
  193. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/css/mobile.css +0 -0
  194. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/favicon.png +0 -0
  195. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/bear.webp +0 -0
  196. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/cat.webp +0 -0
  197. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/crown.webp +0 -0
  198. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/custom/agentwire-portal.webp +0 -0
  199. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/custom/agentwire-tts.webp +0 -0
  200. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/custom/agentwire.webp +0 -0
  201. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/deer.webp +0 -0
  202. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/drone.webp +0 -0
  203. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/eagle.webp +0 -0
  204. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/fox.webp +0 -0
  205. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/hawk.webp +0 -0
  206. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/horse.webp +0 -0
  207. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/lion.webp +0 -0
  208. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/rabbit.webp +0 -0
  209. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/robot.webp +0 -0
  210. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/tiger.webp +0 -0
  211. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/icons/sessions/wolf.webp +0 -0
  212. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/img/icon-192.png +0 -0
  213. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/img/icon-512.png +0 -0
  214. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/.gitkeep +0 -0
  215. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/announcement-modal.js +0 -0
  216. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/api.js +0 -0
  217. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/artifact-window.js +0 -0
  218. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/collage.js +0 -0
  219. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/command-palette.js +0 -0
  220. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/council-window.js +0 -0
  221. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/dead-key-suppressor.js +0 -0
  222. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/desktop-manager.js +0 -0
  223. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/desktop.js +0 -0
  224. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/help-modal.js +0 -0
  225. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/icon-manager.js +0 -0
  226. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/mobile.js +0 -0
  227. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/notification-prefs.js +0 -0
  228. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/notifications-panel.js +0 -0
  229. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/push-client.js +0 -0
  230. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/review-window.js +0 -0
  231. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/safety-shared.js +0 -0
  232. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/safety-window.js +0 -0
  233. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/scratchpad.js +0 -0
  234. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/service-classification.js +0 -0
  235. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/session-id.js +0 -0
  236. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/session-window.js +0 -0
  237. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/shortcuts.js +0 -0
  238. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/artifacts-section.js +0 -0
  239. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/config-section.js +0 -0
  240. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/council-section.js +0 -0
  241. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/machines-section.js +0 -0
  242. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/projects-section.js +0 -0
  243. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/safety-section.js +0 -0
  244. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/scheduler-section.js +0 -0
  245. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/services-section.js +0 -0
  246. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar/sessions-section.js +0 -0
  247. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/sidebar.js +0 -0
  248. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/terminal-font-prefs.js +0 -0
  249. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/tile-manager.js +0 -0
  250. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/toast.js +0 -0
  251. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/token-modal.js +0 -0
  252. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/utils/ansi.js +0 -0
  253. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/utils/swipe.js +0 -0
  254. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/voice/autosend-prefs.js +0 -0
  255. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/voice/browser-stt.js +0 -0
  256. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/voice/browser-tts.js +0 -0
  257. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/voice/jargon.js +0 -0
  258. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/voice/prompt.js +0 -0
  259. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/js/winbox.bundle.min.js +0 -0
  260. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/manifest.webmanifest +0 -0
  261. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/static/service-worker.js +0 -0
  262. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/__init__.py +0 -0
  263. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/base.py +0 -0
  264. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/cloud.py +0 -0
  265. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/engine.py +0 -0
  266. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/local.py +0 -0
  267. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/server_backend.py +0 -0
  268. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/stt/stt_server.py +0 -0
  269. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/system_cli.py +0 -0
  270. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tasks.py +0 -0
  271. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/__init__.py +0 -0
  272. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/desktop.html +0 -0
  273. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/email_notification.html +0 -0
  274. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/handoff/show-the-story.html.j2 +0 -0
  275. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/handoff/theme.css.j2 +0 -0
  276. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/mobile.html +0 -0
  277. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/pair.html +0 -0
  278. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templates/tmux.conf +0 -0
  279. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/templating.py +0 -0
  280. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/aws.yaml +0 -0
  281. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/docker.yaml +0 -0
  282. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/gcp.yaml +0 -0
  283. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/gh.yaml +0 -0
  284. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/git.yaml +0 -0
  285. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/gws.yaml +0 -0
  286. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/kubectl.yaml +0 -0
  287. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/npm.yaml +0 -0
  288. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/terraform.yaml +0 -0
  289. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tooldefs/uv.yaml +0 -0
  290. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/__init__.py +0 -0
  291. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/audio.py +0 -0
  292. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/base.py +0 -0
  293. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/engines/__init__.py +0 -0
  294. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/engines/chatterbox.py +0 -0
  295. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/engines/kokoro.py +0 -0
  296. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/engines/zonos.py +0 -0
  297. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/kokoro_server.py +0 -0
  298. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/local.py +0 -0
  299. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts/registry.py +0 -0
  300. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts_cli.py +0 -0
  301. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tts_server.py +0 -0
  302. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tunnels.py +0 -0
  303. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/tunnels_cli.py +0 -0
  304. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/usage_limit.py +0 -0
  305. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/__init__.py +0 -0
  306. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/chunker.py +0 -0
  307. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/event_log.py +0 -0
  308. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/file_io.py +0 -0
  309. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/paths.py +0 -0
  310. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/speech.py +0 -0
  311. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/utils/subprocess.py +0 -0
  312. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/validation.py +0 -0
  313. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voice_status.py +0 -0
  314. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voiceclone.py +0 -0
  315. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voices/darren.wav +0 -0
  316. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voices/default.wav +0 -0
  317. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voices/jessica.wav +0 -0
  318. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voices/lisa.wav +0 -0
  319. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/voices/may.wav +0 -0
  320. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/wiki.py +0 -0
  321. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/wiki_audit.py +0 -0
  322. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/wiki_cli.py +0 -0
  323. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/worktree.py +0 -0
  324. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/agentwire/worktree_registry.py +0 -0
  325. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/decisions/obsidian-second-brain.md +0 -0
  326. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/logo.png +0 -0
  327. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/INDEX.md +0 -0
  328. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/architecture.md +0 -0
  329. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/briefing-mode.md +0 -0
  330. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/communication/channels.md +0 -0
  331. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/communication/hammerspoon.md +0 -0
  332. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/communication/handoff.md +0 -0
  333. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/concepts.md +0 -0
  334. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/council.md +0 -0
  335. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/deployment/remote-access.md +0 -0
  336. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/deployment/remote-machines.md +0 -0
  337. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/glossary.md +0 -0
  338. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/integrations/gws-google-workspace-cli.md +0 -0
  339. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/internals/damage-control.md +0 -0
  340. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/internals/parallel-refactor.md +0 -0
  341. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/internals/portal.md +0 -0
  342. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/internals/shell-escaping.md +0 -0
  343. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/internals/troubleshooting.md +0 -0
  344. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/internals/window-collage.md +0 -0
  345. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/quickstart.md +0 -0
  346. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/research/briefing-mode-feasibility.md +0 -0
  347. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/research/orchestration-transport-alternatives.md +0 -0
  348. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/scheduling/scheduled-workloads.md +0 -0
  349. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/security/damage-control-hardening.md +0 -0
  350. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/security/pip-audit.md +0 -0
  351. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/security/remote-access-hardening.md +0 -0
  352. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/security/secrets.md +0 -0
  353. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/services.md +0 -0
  354. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/sessions/claude-code-auto-mode.md +0 -0
  355. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/sessions/messaging.md +0 -0
  356. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/sessions/pi.md +0 -0
  357. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/sessions/prompt-routing.md +0 -0
  358. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/sessions/window-sizing.md +0 -0
  359. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/sessions/worktree-sessions.md +0 -0
  360. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/usage-limit-recovery.md +0 -0
  361. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/voice/shim-contract.md +0 -0
  362. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/voice/stt-cloud.md +0 -0
  363. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/voice/stt-self-hosted.md +0 -0
  364. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/docs/wiki/voice/tts-self-hosted.md +0 -0
  365. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/pyproject.toml +0 -0
  366. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/conftest.py +0 -0
  367. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/e2e/test_portal_ui.py +0 -0
  368. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/fixtures/sample_agentwire.yml +0 -0
  369. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/fixtures/sample_config.yaml +0 -0
  370. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/fixtures/sample_scheduler.yaml +0 -0
  371. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/integration/test_council_portal.py +0 -0
  372. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/integration/test_scheduler_board.py +0 -0
  373. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/integration/test_server_websockets.py +0 -0
  374. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/integration/test_worktree_cmd.py +0 -0
  375. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_announcements.py +0 -0
  376. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_build_agent_command.py +0 -0
  377. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_channels.py +0 -0
  378. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_cli_commands.py +0 -0
  379. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_cli_output.py +0 -0
  380. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_cli_smoke.py +0 -0
  381. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_config.py +0 -0
  382. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_control_plane_protection.py +0 -0
  383. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_council_cli.py +0 -0
  384. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_council_inbox.py +0 -0
  385. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_council_state.py +0 -0
  386. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_council_view.py +0 -0
  387. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_damage_control_bypass.py +0 -0
  388. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_damage_control_hooks.py +0 -0
  389. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_damage_control_sync.py +0 -0
  390. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_devices.py +0 -0
  391. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_diff_cli.py +0 -0
  392. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_doctor_voice.py +0 -0
  393. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_event_log.py +0 -0
  394. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_file_io.py +0 -0
  395. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_handoff_git_state.py +0 -0
  396. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_handoff_instructions.py +0 -0
  397. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_handoff_parser.py +0 -0
  398. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_handoff_renderer.py +0 -0
  399. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_history.py +0 -0
  400. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_hooks_install.py +0 -0
  401. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_idle_handler.py +0 -0
  402. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_idle_nag.py +0 -0
  403. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_inbox.py +0 -0
  404. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_init_command.py +0 -0
  405. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_limits_tick_isolation.py +0 -0
  406. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_locking.py +0 -0
  407. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_mcp_server.py +0 -0
  408. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_mcp_tools_args.py +0 -0
  409. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_msg_cli.py +0 -0
  410. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_portal_api.py +0 -0
  411. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_project_config.py +0 -0
  412. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_prompt_router.py +0 -0
  413. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_push.py +0 -0
  414. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_rebuild_guard.py +0 -0
  415. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_repo_cli.py +0 -0
  416. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_roles.py +0 -0
  417. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_routes_snapshot.py +0 -0
  418. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_safety_commands.py +0 -0
  419. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_safety_disabled_rules.py +0 -0
  420. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_safety_escape_hatch.py +0 -0
  421. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_safety_heal.py +0 -0
  422. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_safety_kill_switch.py +0 -0
  423. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_scheduler.py +0 -0
  424. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_scheduler_parsing.py +0 -0
  425. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_scratchpad.py +0 -0
  426. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_security.py +0 -0
  427. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_server_async.py +0 -0
  428. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_server_pure.py +0 -0
  429. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_services.py +0 -0
  430. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_session_context.py +0 -0
  431. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_session_ready.py +0 -0
  432. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_skill_install.py +0 -0
  433. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_speech_tags.py +0 -0
  434. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_ssh.py +0 -0
  435. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_stt_backend.py +0 -0
  436. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_stt_cloud.py +0 -0
  437. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_stt_engine.py +0 -0
  438. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_task_cli.py +0 -0
  439. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_tasks.py +0 -0
  440. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_templating.py +0 -0
  441. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_terminal_resize.py +0 -0
  442. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_tmux_template.py +0 -0
  443. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_tts_engine_resolution.py +0 -0
  444. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_tts_local.py +0 -0
  445. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_tunnels_probe.py +0 -0
  446. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_usage_limit.py +0 -0
  447. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_validation.py +0 -0
  448. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_voice_status.py +0 -0
  449. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_wiki.py +0 -0
  450. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_wiki_audit.py +0 -0
  451. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_worktree.py +0 -0
  452. {agentwire_dev-1.49.0 → agentwire_dev-1.50.0}/tests/unit/test_worktree_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentwire-dev
3
- Version: 1.49.0
3
+ Version: 1.50.0
4
4
  Summary: Multi-session voice web interface for AI coding agents
5
5
  Project-URL: Homepage, https://agentwire.dev
6
6
  Project-URL: Repository, https://github.com/dotdevdotdev/agentwire-dev
@@ -266,11 +266,11 @@ Description-Content-Type: text/markdown
266
266
  </p>
267
267
 
268
268
  <p align="center">
269
- <strong>Self-hosted, voice-native control for Claude Code your machine, your keys, no cloud account.</strong>
269
+ <strong>A self-hosted, keyboard-driven cockpit for running a whole <em>fleet</em> of Claude Code agents at once.</strong>
270
270
  </p>
271
271
 
272
272
  <p align="center">
273
- Orchestrate many agents by voice neural TTS on your CPU, voice cloning via a self-hosted GPU shim.
273
+ From a wall of tmux panes to one cockpit. Worktrees, command palette, scheduler, voice every layer stacks, so you ship far more than you ever could hand-juggling terminals. Your machine, your keys, no telemetry.
274
274
  </p>
275
275
 
276
276
  <p align="center">
@@ -285,39 +285,51 @@ Description-Content-Type: text/markdown
285
285
 
286
286
  ## Why AgentWire
287
287
 
288
- Remote access to a coding agent is now table stakes first-party and hosted tools
289
- all let you reach an agent from your phone. AgentWire competes on what those
290
- structurally can't match:
291
-
292
- - **Self-hosted, keys-local.** Runs entirely on your hardware. No cloud account, no
293
- third party in the loop, no telemetry — your code and your API keys never leave
294
- the machine.
295
- - **Voice-native, not voice-bolted-on.** Push-to-talk in, **neural TTS out on plain
296
- CPU** (Kokoro, no GPU). Want your agents to talk back in a **cloned voice**? Run a
297
- self-hosted GPU shim (Chatterbox / Zonos) same machine, still your keys.
298
- - **Built to orchestrate _many_ agents, not watch one.** Council (multi-soul
299
- deliberation), a recurring scheduler, briefing mode, and worktree-parallel
300
- workers — tmux- and Claude-Code-native from the ground up.
301
-
302
- > **Use the official app to watch one session; use AgentWire to orchestrate many,
303
- > by voice, on your own hardware.**
288
+ Running several Claude Code agents by hand means a wall of tmux panes: constant
289
+ context-switching, copy-pasting between sessions, tracking which branch each agent
290
+ sits on, babysitting every one. It doesn't scale past one or two before **your
291
+ attention** — not the model — becomes the bottleneck. AgentWire turns that wall into
292
+ one cockpit, and its capabilities **compound**:
293
+
294
+ - **It compounds.** Worktrees + command palette + quick-action keys + tab-switching
295
+ + scheduler + voice each stack on the others to multiply how much one person can
296
+ run at once. That's the whole point not any single feature.
297
+ - **Orchestrate _many_ agents, not watch one.** Every session is a window; **F3**
298
+ fans them into a Mission-Control collage; **Tab** cycles between them; **Cmd/Ctrl+K**
299
+ runs any action. Council deliberates, briefing mode fans out, worktree sessions
300
+ isolate parallel work — tmux- and Claude-Code-native from the ground up.
301
+ - **Autonomous and unattended.** A scheduler runs recurring jobs (research, test runs,
302
+ cleanup, doc-drift); gates verify *real work happened*; repo tasks open *draft PRs,
303
+ not commits to main*; reliability plumbing (verified delivery, dead-letter,
304
+ email-on-fail, usage-limit recovery) means nothing silently fails.
305
+ - **Your machine, your keys, no telemetry.** Runs entirely on your hardware, loopback
306
+ by default. No cloud account, no third party in the loop — your code and your API
307
+ keys never leave the machine. 300+ damage-control blocks make running unattended sane.
308
+
309
+ > **Use the official app to watch one session; use AgentWire to command a whole
310
+ > fleet — on your own hardware, by keyboard, with voice layered on top.**
304
311
 
305
312
  ---
306
313
 
307
314
  ## What It Does
308
315
 
309
- Push-to-talk voice control for [Claude Code](https://github.com/anthropics/claude-code) or any AI coding assistant running in tmux.
316
+ A self-hosted, desktop-style portal where **every agent session is a window**
317
+ reachable from any device on your LAN, running on your own hardware with your own keys.
310
318
 
311
319
  ```
312
- Phone → AgentWire Portal → tmux session → Claude Code
313
- 🎤 (WebSocket) 📺 🤖
320
+ You → AgentWire Portal → tmux sessionsa fleet of Claude Code agents
321
+ ⌨️🎤 (WebSocket) 📺 🤖🤖🤖
314
322
  ```
315
323
 
316
- **From your phone, tablet, or laptop on your network:**
317
- - Hold to speak, release to send
318
- - Watch agents work in real-time
319
- - Hear responses via TTS
320
- - Manage multiple projects simultaneously
324
+ **From your laptop, phone, or tablet on your network:**
325
+ - Every session is a draggable window; **F3** collage, **Tab** to cycle
326
+ - Command palette (**Cmd/Ctrl+K**) runs any action; quick-action keys throughout
327
+ - Branch a session into an isolated git worktree for parallel work
328
+ - Put repeat work on a scheduler; hand hard calls to a council
329
+ - Push-to-talk in, spoken summaries back — drive sessions by ear while off-tab
330
+
331
+ **The outcome:** the whole fleet feels like one machine. You go from babysitting one
332
+ session to commanding many.
321
333
 
322
334
  ---
323
335
 
@@ -332,7 +344,7 @@ agentwire init
332
344
 
333
345
  # Run
334
346
  agentwire portal start
335
- # Open http://127.0.0.1:8765 in Chrome — voice works immediately
347
+ # Open http://127.0.0.1:8765 in Chrome — your cockpit is live (voice works immediately too)
336
348
  ```
337
349
 
338
350
  **Requirements:** Python 3.10+, tmux, ffmpeg, Claude Code
@@ -382,18 +394,20 @@ pip install agentwire-dev
382
394
 
383
395
  ## Features
384
396
 
397
+ The cockpit, then the layers that stack on it:
398
+
385
399
  | Feature | Description |
386
400
  |---------|-------------|
387
- | **Voice Control** | Push-to-talk from any device on your network |
388
- | **Neural Voice + Cloning** | Kokoro neural TTS on CPU out of the box; voice cloning via a self-hosted GPU shim |
401
+ | **Desktop UI** | Every session is a draggable window; **F3** collage grid, **Tab** to cycle, **Cmd/Ctrl+K** command palette |
402
+ | **Multi-Session** | Run multiple agents on different projects simultaneously |
403
+ | **Git Worktrees** | Same project, multiple branches, parallel agents — each in an isolated worktree session |
404
+ | **Worker Orchestration** | Spawn worker panes, coordinate tasks, auto-reap when idle |
389
405
  | **Council** | Fan a prompt to multiple "soul" sessions (brain, conscience, critic…), synthesize with attribution |
390
- | **Scheduler** | Recurring autonomous tasks with gates, priorities, and usage-limit recovery |
406
+ | **Scheduler** | Recurring autonomous tasks with gates, priorities, and usage-limit recovery — draft PRs, not commits to main |
391
407
  | **Briefing Mode** | A terse human-facing anchor fans out verbose worktree correspondents, then briefs you on cue |
392
- | **Multi-Session** | Run multiple agents on different projects simultaneously |
393
- | **Git Worktrees** | Same project, multiple branches, parallel agents |
408
+ | **Voice** | Push-to-talk in, neural TTS out on CPU (Kokoro); voice cloning via a self-hosted GPU shim; global macOS hotkeys dictate to a background session from any app |
394
409
  | **Remote Machines** | SSH into GPU servers and talk to agents there |
395
- | **Worker Orchestration** | Spawn worker panes, coordinate tasks, voice commands |
396
- | **Safety Hooks** | 300+ dangerous commands blocked (rm -rf, force push, etc.) |
410
+ | **Safety Hooks** | 300+ dangerous commands blocked (rm -rf, force push, etc.), all logged |
397
411
  | **Outbound Channels** | Email (Resend) + SMS (Quo / OpenPhone) for cross-device notifications |
398
412
  | **Session Roles** | Leader/worker patterns for multi-agent workflows |
399
413
 
@@ -407,13 +421,13 @@ agentwire new -s myproject -p ~/projects/myproject
407
421
  ```
408
422
 
409
423
  **2. Open the portal:**
410
- Visit `http://127.0.0.1:8765` in Chrome (or your phone/tablet with LAN access configured)
424
+ Visit `http://127.0.0.1:8765` in Chrome (or your phone/tablet with LAN access configured). Each session is a window — open as many as you want and **Tab** between them, or **F3** for the collage grid.
411
425
 
412
- **3. Talk:**
413
- Hold the mic button, speak your request, release. In instant mode the transcript appears for a quick glance Enter sends it to Claude Code.
426
+ **3. Drive it by keyboard:**
427
+ **Cmd/Ctrl+K** runs any action; quick-action keys send to the focused session; branch a session into a worktree for parallel work; put repeat jobs on the scheduler.
414
428
 
415
- **4. Listen:**
416
- Agent responses are spoken back — Kokoro neural voice out of the box, or any TTS model behind a custom shim.
429
+ **4. Add voice on top:**
430
+ Hold the mic to speak (in instant mode the transcript appears for a quick glance — Enter sends it), and agent responses are spoken back — Kokoro neural voice out of the box, so you can drive sessions and hear summaries by ear while your eyes are elsewhere.
417
431
 
418
432
  ---
419
433
 
@@ -3,11 +3,11 @@
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>Self-hosted, voice-native control for Claude Code your machine, your keys, no cloud account.</strong>
6
+ <strong>A self-hosted, keyboard-driven cockpit for running a whole <em>fleet</em> of Claude Code agents at once.</strong>
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
- Orchestrate many agents by voice neural TTS on your CPU, voice cloning via a self-hosted GPU shim.
10
+ From a wall of tmux panes to one cockpit. Worktrees, command palette, scheduler, voice every layer stacks, so you ship far more than you ever could hand-juggling terminals. Your machine, your keys, no telemetry.
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -22,39 +22,51 @@
22
22
 
23
23
  ## Why AgentWire
24
24
 
25
- Remote access to a coding agent is now table stakes first-party and hosted tools
26
- all let you reach an agent from your phone. AgentWire competes on what those
27
- structurally can't match:
28
-
29
- - **Self-hosted, keys-local.** Runs entirely on your hardware. No cloud account, no
30
- third party in the loop, no telemetry — your code and your API keys never leave
31
- the machine.
32
- - **Voice-native, not voice-bolted-on.** Push-to-talk in, **neural TTS out on plain
33
- CPU** (Kokoro, no GPU). Want your agents to talk back in a **cloned voice**? Run a
34
- self-hosted GPU shim (Chatterbox / Zonos) same machine, still your keys.
35
- - **Built to orchestrate _many_ agents, not watch one.** Council (multi-soul
36
- deliberation), a recurring scheduler, briefing mode, and worktree-parallel
37
- workers — tmux- and Claude-Code-native from the ground up.
38
-
39
- > **Use the official app to watch one session; use AgentWire to orchestrate many,
40
- > by voice, on your own hardware.**
25
+ Running several Claude Code agents by hand means a wall of tmux panes: constant
26
+ context-switching, copy-pasting between sessions, tracking which branch each agent
27
+ sits on, babysitting every one. It doesn't scale past one or two before **your
28
+ attention** — not the model — becomes the bottleneck. AgentWire turns that wall into
29
+ one cockpit, and its capabilities **compound**:
30
+
31
+ - **It compounds.** Worktrees + command palette + quick-action keys + tab-switching
32
+ + scheduler + voice each stack on the others to multiply how much one person can
33
+ run at once. That's the whole point not any single feature.
34
+ - **Orchestrate _many_ agents, not watch one.** Every session is a window; **F3**
35
+ fans them into a Mission-Control collage; **Tab** cycles between them; **Cmd/Ctrl+K**
36
+ runs any action. Council deliberates, briefing mode fans out, worktree sessions
37
+ isolate parallel work — tmux- and Claude-Code-native from the ground up.
38
+ - **Autonomous and unattended.** A scheduler runs recurring jobs (research, test runs,
39
+ cleanup, doc-drift); gates verify *real work happened*; repo tasks open *draft PRs,
40
+ not commits to main*; reliability plumbing (verified delivery, dead-letter,
41
+ email-on-fail, usage-limit recovery) means nothing silently fails.
42
+ - **Your machine, your keys, no telemetry.** Runs entirely on your hardware, loopback
43
+ by default. No cloud account, no third party in the loop — your code and your API
44
+ keys never leave the machine. 300+ damage-control blocks make running unattended sane.
45
+
46
+ > **Use the official app to watch one session; use AgentWire to command a whole
47
+ > fleet — on your own hardware, by keyboard, with voice layered on top.**
41
48
 
42
49
  ---
43
50
 
44
51
  ## What It Does
45
52
 
46
- Push-to-talk voice control for [Claude Code](https://github.com/anthropics/claude-code) or any AI coding assistant running in tmux.
53
+ A self-hosted, desktop-style portal where **every agent session is a window**
54
+ reachable from any device on your LAN, running on your own hardware with your own keys.
47
55
 
48
56
  ```
49
- Phone → AgentWire Portal → tmux session → Claude Code
50
- 🎤 (WebSocket) 📺 🤖
57
+ You → AgentWire Portal → tmux sessionsa fleet of Claude Code agents
58
+ ⌨️🎤 (WebSocket) 📺 🤖🤖🤖
51
59
  ```
52
60
 
53
- **From your phone, tablet, or laptop on your network:**
54
- - Hold to speak, release to send
55
- - Watch agents work in real-time
56
- - Hear responses via TTS
57
- - Manage multiple projects simultaneously
61
+ **From your laptop, phone, or tablet on your network:**
62
+ - Every session is a draggable window; **F3** collage, **Tab** to cycle
63
+ - Command palette (**Cmd/Ctrl+K**) runs any action; quick-action keys throughout
64
+ - Branch a session into an isolated git worktree for parallel work
65
+ - Put repeat work on a scheduler; hand hard calls to a council
66
+ - Push-to-talk in, spoken summaries back — drive sessions by ear while off-tab
67
+
68
+ **The outcome:** the whole fleet feels like one machine. You go from babysitting one
69
+ session to commanding many.
58
70
 
59
71
  ---
60
72
 
@@ -69,7 +81,7 @@ agentwire init
69
81
 
70
82
  # Run
71
83
  agentwire portal start
72
- # Open http://127.0.0.1:8765 in Chrome — voice works immediately
84
+ # Open http://127.0.0.1:8765 in Chrome — your cockpit is live (voice works immediately too)
73
85
  ```
74
86
 
75
87
  **Requirements:** Python 3.10+, tmux, ffmpeg, Claude Code
@@ -119,18 +131,20 @@ pip install agentwire-dev
119
131
 
120
132
  ## Features
121
133
 
134
+ The cockpit, then the layers that stack on it:
135
+
122
136
  | Feature | Description |
123
137
  |---------|-------------|
124
- | **Voice Control** | Push-to-talk from any device on your network |
125
- | **Neural Voice + Cloning** | Kokoro neural TTS on CPU out of the box; voice cloning via a self-hosted GPU shim |
138
+ | **Desktop UI** | Every session is a draggable window; **F3** collage grid, **Tab** to cycle, **Cmd/Ctrl+K** command palette |
139
+ | **Multi-Session** | Run multiple agents on different projects simultaneously |
140
+ | **Git Worktrees** | Same project, multiple branches, parallel agents — each in an isolated worktree session |
141
+ | **Worker Orchestration** | Spawn worker panes, coordinate tasks, auto-reap when idle |
126
142
  | **Council** | Fan a prompt to multiple "soul" sessions (brain, conscience, critic…), synthesize with attribution |
127
- | **Scheduler** | Recurring autonomous tasks with gates, priorities, and usage-limit recovery |
143
+ | **Scheduler** | Recurring autonomous tasks with gates, priorities, and usage-limit recovery — draft PRs, not commits to main |
128
144
  | **Briefing Mode** | A terse human-facing anchor fans out verbose worktree correspondents, then briefs you on cue |
129
- | **Multi-Session** | Run multiple agents on different projects simultaneously |
130
- | **Git Worktrees** | Same project, multiple branches, parallel agents |
145
+ | **Voice** | Push-to-talk in, neural TTS out on CPU (Kokoro); voice cloning via a self-hosted GPU shim; global macOS hotkeys dictate to a background session from any app |
131
146
  | **Remote Machines** | SSH into GPU servers and talk to agents there |
132
- | **Worker Orchestration** | Spawn worker panes, coordinate tasks, voice commands |
133
- | **Safety Hooks** | 300+ dangerous commands blocked (rm -rf, force push, etc.) |
147
+ | **Safety Hooks** | 300+ dangerous commands blocked (rm -rf, force push, etc.), all logged |
134
148
  | **Outbound Channels** | Email (Resend) + SMS (Quo / OpenPhone) for cross-device notifications |
135
149
  | **Session Roles** | Leader/worker patterns for multi-agent workflows |
136
150
 
@@ -144,13 +158,13 @@ agentwire new -s myproject -p ~/projects/myproject
144
158
  ```
145
159
 
146
160
  **2. Open the portal:**
147
- Visit `http://127.0.0.1:8765` in Chrome (or your phone/tablet with LAN access configured)
161
+ Visit `http://127.0.0.1:8765` in Chrome (or your phone/tablet with LAN access configured). Each session is a window — open as many as you want and **Tab** between them, or **F3** for the collage grid.
148
162
 
149
- **3. Talk:**
150
- Hold the mic button, speak your request, release. In instant mode the transcript appears for a quick glance Enter sends it to Claude Code.
163
+ **3. Drive it by keyboard:**
164
+ **Cmd/Ctrl+K** runs any action; quick-action keys send to the focused session; branch a session into a worktree for parallel work; put repeat jobs on the scheduler.
151
165
 
152
- **4. Listen:**
153
- Agent responses are spoken back — Kokoro neural voice out of the box, or any TTS model behind a custom shim.
166
+ **4. Add voice on top:**
167
+ Hold the mic to speak (in instant mode the transcript appears for a quick glance — Enter sends it), and agent responses are spoken back — Kokoro neural voice out of the box, so you can drive sessions and hear summaries by ear while your eyes are elsewhere.
154
168
 
155
169
  ---
156
170
 
@@ -1,3 +1,3 @@
1
1
  """AgentWire - Multi-session voice web interface for AI coding agents."""
2
2
 
3
- __version__ = "1.49.0"
3
+ __version__ = "1.50.0"
@@ -186,13 +186,17 @@ def cmd_send(args) -> int:
186
186
 
187
187
  if verify:
188
188
  # Same delivery verification as --wait-ready, but without waiting for a
189
- # fresh-boot banner — for an already-running session, just confirm the
190
- # paste landed and report verified vs unconfirmed. retries=0: send ONCE
191
- # and report a re-paste on a false miss (a busy session that scrolled
192
- # the echo past the capture window) would deliver the message twice.
189
+ # fresh-boot banner — for an already-running session, confirm the paste
190
+ # landed AND submitted. retries=1: a whole-send retry only fires when the
191
+ # paste never landed in the box (phase 1 of _deliver_once) i.e. it
192
+ # genuinely vanished, so re-pasting can't double-deliver. Once text has
193
+ # landed, _deliver_once re-presses Enter in place (never re-pastes), so
194
+ # the old double-delivery worry the retries=0 choice guarded against
195
+ # can't happen anymore. Staying patient here is what keeps a laggy host
196
+ # from surfacing a false failure the parent has to clean up by hand.
193
197
  from agentwire.session_ready import send_verified
194
198
 
195
- ok = send_verified(session, prompt, retries=0)
199
+ ok = send_verified(session, prompt, retries=1)
196
200
  if json_mode:
197
201
  print(json.dumps({"success": True, "session": session_full, "machine": None,
198
202
  "verified": ok,
@@ -25,11 +25,21 @@ VERIFY_SCROLLBACK_LINES = 200
25
25
  # Enter to dismiss its ``[Pasted text]`` banner before submitting).
26
26
  POLL_INTERVAL = 0.15
27
27
  # Max wait for a paste to appear in the input box before giving up on this try.
28
- LAND_TIMEOUT = 5.0
29
- # Max wait, after an Enter, for the box to clear (the keystroke to register).
30
- SUBMIT_TIMEOUT = 3.0
31
- # Bounded Enter re-presses before declaring a hard failure.
32
- MAX_ENTER_ATTEMPTS = 4
28
+ # Generous because under host load tmux ``capture-pane`` itself lags and a large
29
+ # paste renders slowly a tight budget here is the #1 cause of "the text landed
30
+ # but delivery reported failure" on a bogged-down machine.
31
+ LAND_TIMEOUT = 8.0
32
+ # Max wait, after a single Enter, for the box to clear (the keystroke to
33
+ # register). Per-press, not the whole submit phase — see SUBMIT_BUDGET.
34
+ SUBMIT_TIMEOUT = 4.0
35
+ # Wall-clock ceiling on the whole press-Enter-and-confirm phase. Re-pressing is
36
+ # driven by this deadline rather than a fixed count so a laggy box is waited out
37
+ # (each idle Enter on an already-submitted/empty box is a harmless no-op), but a
38
+ # genuinely wedged session still fails in bounded time instead of hanging.
39
+ SUBMIT_BUDGET = 20.0
40
+ # Floor on re-presses regardless of how fast the budget burns (slow snapshots
41
+ # can eat the wall-clock before we've pressed Enter enough times).
42
+ MIN_ENTER_ATTEMPTS = 4
33
43
 
34
44
  # Substrings that mean "Claude is actively working" — a spinner footer, the
35
45
  # token counter, the esc-to-interrupt hint, or tool-output glyphs. A
@@ -259,19 +269,27 @@ def _deliver_once(
259
269
  if not _poll(landed_or_done, LAND_TIMEOUT):
260
270
  return False
261
271
 
262
- # Phase 2 — press Enter and confirm the box cleared. Bounded re-press: a
263
- # single Enter can be swallowed under load, and a large paste needs a second
264
- # Enter (dismiss the ``[Pasted text]`` banner, then submit).
265
- for _ in range(MAX_ENTER_ATTEMPTS):
272
+ # Phase 2 — press Enter and confirm the box cleared. Re-press is driven by a
273
+ # wall-clock budget, not a fixed count: a single Enter can be swallowed under
274
+ # load, a large paste needs a second Enter (dismiss the ``[Pasted text]``
275
+ # banner, then submit), and on a bogged-down host the box renders slowly. We
276
+ # keep pressing until the box clears or SUBMIT_BUDGET elapses — an idle Enter
277
+ # on an already-submitted/empty box is a harmless no-op, so over-pressing is
278
+ # safe, while a tight count would give up before a laggy box ever caught up.
279
+ deadline = time.time() + SUBMIT_BUDGET
280
+ attempts = 0
281
+ while True:
266
282
  if submitted(_snapshot(session, pane_index), message, marker):
267
283
  return True
268
284
  press_enter(session, pane_index=pane_index)
285
+ attempts += 1
269
286
  if _poll(
270
287
  lambda: submitted(_snapshot(session, pane_index), message, marker),
271
288
  SUBMIT_TIMEOUT,
272
289
  ):
273
290
  return True
274
- return False
291
+ if attempts >= MIN_ENTER_ATTEMPTS and time.time() >= deadline:
292
+ return False
275
293
 
276
294
 
277
295
  def send_verified(
@@ -1,5 +1,23 @@
1
1
  {
2
2
  "announcements": [
3
+ {
4
+ "id": "2026-06-cockpit-positioning",
5
+ "placement": "modal",
6
+ "emoji": "🛩️",
7
+ "title": "Stop babysitting one agent. Command a fleet.",
8
+ "date": "2026-06-29",
9
+ "body": "Here's how to think about AgentWire: it's a self-hosted, keyboard-driven cockpit for running a whole fleet of Claude Code agents at once — not a voice toy with sessions bolted on. The capabilities compound. Every session is a window (F3 collage, Tab to cycle); the command palette (Cmd/Ctrl+K) runs any action; worktree sessions isolate parallel work; the scheduler runs recurring jobs unattended as draft PRs. Voice is a layer that stacks on all of it — push-to-talk in, spoken summaries by ear while you're off-tab, and global macOS hotkeys to dictate to a background session from any app. One person commands many agents instead of babysitting one.",
10
+ "highlights": [
11
+ "From a wall of tmux panes to one cockpit — the pieces compound",
12
+ "Every session is a window: F3 collage, Tab to cycle, Cmd/Ctrl+K for any action",
13
+ "Worktrees + scheduler + council run parallel and unattended work",
14
+ "Voice is a compounding layer, not the headline"
15
+ ],
16
+ "cta": {
17
+ "label": "Press F1 for the full tour",
18
+ "url": "https://github.com/dotdevdotdev/agentwire-dev"
19
+ }
20
+ },
3
21
  {
4
22
  "id": "2026-06-help-modal",
5
23
  "placement": "modal",
@@ -6,6 +6,9 @@
6
6
  <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
7
7
  <meta http-equiv="Pragma" content="no-cache">
8
8
  <meta http-equiv="Expires" content="0">
9
+ <meta name="description" content="A self-hosted, keyboard-driven cockpit for running a whole fleet of Claude Code agents at once. Your machine, your keys, no telemetry.">
10
+ <meta property="og:title" content="AgentWire">
11
+ <meta property="og:description" content="A self-hosted, keyboard-driven cockpit for running a whole fleet of Claude Code agents at once. Worktrees, command palette, scheduler, voice — every layer stacks.">
9
12
  <link rel="icon" type="image/png" href="/static/favicon.png">
10
13
  <link rel="manifest" href="/manifest.webmanifest">
11
14
  <link rel="apple-touch-icon" href="/static/img/icon-192.png">
File without changes
File without changes