agentirc-cli 4.2.1__tar.gz → 4.3.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 (310) hide show
  1. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/CHANGELOG.md +13 -0
  2. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/PKG-INFO +1 -1
  3. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/agent.py +29 -1
  4. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/config.py +27 -0
  5. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/config.py +27 -0
  6. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/config.py +27 -0
  7. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/config.py +27 -0
  8. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +52 -0
  9. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/config.py +27 -0
  10. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/pyproject.toml +1 -1
  11. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_archive.py +405 -0
  12. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/uv.lock +1 -1
  13. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.claude/skills/pr-review/SKILL.md +0 -0
  14. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.claude/skills/run-tests/SKILL.md +0 -0
  15. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  16. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.flake8 +0 -0
  17. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/pages.yml +0 -0
  18. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/publish.yml +0 -0
  19. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/security-checks.yml +0 -0
  20. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.github/workflows/tests.yml +0 -0
  21. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.gitignore +0 -0
  22. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.markdownlint-cli2.yaml +0 -0
  23. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.pr_agent.toml +0 -0
  24. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.pre-commit-config.yaml +0 -0
  25. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/.pylintrc +0 -0
  26. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/CLAUDE.md +0 -0
  27. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/CNAME +0 -0
  28. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/Gemfile +0 -0
  29. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/Gemfile.lock +0 -0
  30. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/LICENSE +0 -0
  31. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/README.md +0 -0
  32. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/SECURITY.md +0 -0
  33. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/_config.yml +0 -0
  34. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/_sass/color_schemes/anthropic.scss +0 -0
  35. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/_sass/custom/custom.scss +0 -0
  36. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/__init__.py +0 -0
  37. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/__main__.py +0 -0
  38. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/aio.py +0 -0
  39. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/__init__.py +0 -0
  40. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/bot.py +0 -0
  41. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/bot_manager.py +0 -0
  42. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/config.py +0 -0
  43. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/http_listener.py +0 -0
  44. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/template_engine.py +0 -0
  45. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/bots/virtual_client.py +0 -0
  46. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/__init__.py +0 -0
  47. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/_helpers.py +0 -0
  48. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/bot.py +0 -0
  49. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/channel.py +0 -0
  50. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/mesh.py +0 -0
  51. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/server.py +0 -0
  52. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/cli/skills.py +0 -0
  53. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/__init__.py +0 -0
  54. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/__init__.py +0 -0
  55. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/agent_runner.py +0 -0
  56. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/daemon.py +0 -0
  57. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/ipc.py +0 -0
  58. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/irc_transport.py +0 -0
  59. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/message_buffer.py +0 -0
  60. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/skill/SKILL.md +0 -0
  61. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/skill/__init__.py +0 -0
  62. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/skill/irc_client.py +0 -0
  63. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/socket_server.py +0 -0
  64. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/supervisor.py +0 -0
  65. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/acp/webhook.py +0 -0
  66. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/__init__.py +0 -0
  67. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/__main__.py +0 -0
  68. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/agent_runner.py +0 -0
  69. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/daemon.py +0 -0
  70. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/ipc.py +0 -0
  71. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/irc_transport.py +0 -0
  72. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/message_buffer.py +0 -0
  73. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/skill/SKILL.md +0 -0
  74. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/skill/__init__.py +0 -0
  75. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/skill/irc_client.py +0 -0
  76. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/socket_server.py +0 -0
  77. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/supervisor.py +0 -0
  78. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/claude/webhook.py +0 -0
  79. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/__init__.py +0 -0
  80. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/agent_runner.py +0 -0
  81. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/daemon.py +0 -0
  82. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/ipc.py +0 -0
  83. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/irc_transport.py +0 -0
  84. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/message_buffer.py +0 -0
  85. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/skill/SKILL.md +0 -0
  86. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/skill/__init__.py +0 -0
  87. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/skill/irc_client.py +0 -0
  88. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/socket_server.py +0 -0
  89. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/supervisor.py +0 -0
  90. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/codex/webhook.py +0 -0
  91. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/__init__.py +0 -0
  92. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/agent_runner.py +0 -0
  93. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/daemon.py +0 -0
  94. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/ipc.py +0 -0
  95. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/irc_transport.py +0 -0
  96. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/message_buffer.py +0 -0
  97. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/skill/SKILL.md +0 -0
  98. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/skill/__init__.py +0 -0
  99. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/skill/irc_client.py +0 -0
  100. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/socket_server.py +0 -0
  101. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/supervisor.py +0 -0
  102. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/clients/copilot/webhook.py +0 -0
  103. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/__init__.py +0 -0
  104. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/app.py +0 -0
  105. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/client.py +0 -0
  106. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/commands.py +0 -0
  107. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/__init__.py +0 -0
  108. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/chat.py +0 -0
  109. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/info_panel.py +0 -0
  110. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/console/widgets/sidebar.py +0 -0
  111. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/credentials.py +0 -0
  112. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/learn_prompt.py +0 -0
  113. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/mesh_config.py +0 -0
  114. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/observer.py +0 -0
  115. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/__init__.py +0 -0
  116. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/collector.py +0 -0
  117. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/model.py +0 -0
  118. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/renderer_text.py +0 -0
  119. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/renderer_web.py +0 -0
  120. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/overview/web/style.css +0 -0
  121. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/persistence.py +0 -0
  122. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/pidfile.py +0 -0
  123. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/__init__.py +0 -0
  124. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/commands.py +0 -0
  125. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/federation.md +0 -0
  126. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/history.md +0 -0
  127. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/icons.md +0 -0
  128. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/rooms.md +0 -0
  129. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/tags.md +0 -0
  130. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/extensions/threads.md +0 -0
  131. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/message.py +0 -0
  132. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/protocol-index.md +0 -0
  133. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/protocol/replies.py +0 -0
  134. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/__init__.py +0 -0
  135. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/__main__.py +0 -0
  136. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/channel.py +0 -0
  137. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/client.py +0 -0
  138. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/config.py +0 -0
  139. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/ircd.py +0 -0
  140. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/remote_client.py +0 -0
  141. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/room_store.py +0 -0
  142. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/rooms_util.py +0 -0
  143. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/server_link.py +0 -0
  144. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skill.py +0 -0
  145. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/__init__.py +0 -0
  146. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/history.py +0 -0
  147. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/icon.py +0 -0
  148. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/rooms.py +0 -0
  149. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/skills/threads.py +0 -0
  150. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/server/thread_store.py +0 -0
  151. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/culture/skills/culture/SKILL.md +0 -0
  152. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/agent-lifecycle.md +0 -0
  153. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/agentic-self-learn.md +0 -0
  154. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/agent-client.md +0 -0
  155. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/agent-harness-spec.md +0 -0
  156. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/design.md +0 -0
  157. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/harness-conformance.md +0 -0
  158. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/index.md +0 -0
  159. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer1-core-irc.md +0 -0
  160. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer2-attention.md +0 -0
  161. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer3-skills.md +0 -0
  162. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer4-federation.md +0 -0
  163. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/layer5-agent-harness.md +0 -0
  164. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/server-architecture.md +0 -0
  165. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/architecture/threads.md +0 -0
  166. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/channel-polling.md +0 -0
  167. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/acp/overview.md +0 -0
  168. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/configuration.md +0 -0
  169. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/context-management.md +0 -0
  170. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/irc-tools.md +0 -0
  171. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/overview.md +0 -0
  172. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/setup.md +0 -0
  173. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/supervisor.md +0 -0
  174. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/claude/webhooks.md +0 -0
  175. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/configuration.md +0 -0
  176. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/context-management.md +0 -0
  177. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/irc-tools.md +0 -0
  178. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/overview.md +0 -0
  179. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/setup.md +0 -0
  180. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/supervisor.md +0 -0
  181. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/codex/webhooks.md +0 -0
  182. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/configuration.md +0 -0
  183. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/context-management.md +0 -0
  184. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/irc-tools.md +0 -0
  185. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/overview.md +0 -0
  186. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/setup.md +0 -0
  187. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/supervisor.md +0 -0
  188. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/clients/copilot/webhooks.md +0 -0
  189. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/culture-cli.md +0 -0
  190. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/getting-started.md +0 -0
  191. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/index.md +0 -0
  192. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/SECURITY.md +0 -0
  193. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/bots.md +0 -0
  194. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/ci.md +0 -0
  195. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/cli.md +0 -0
  196. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/docs-site.md +0 -0
  197. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/index.md +0 -0
  198. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/ops-tooling.md +0 -0
  199. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/overview.md +0 -0
  200. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/operations/publishing.md +0 -0
  201. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/resources/github-copilot-sdk-instructions.md +0 -0
  202. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/rooms.md +0 -0
  203. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/server-rename.md +0 -0
  204. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
  205. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
  206. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
  207. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
  208. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
  209. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
  210. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
  211. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
  212. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
  213. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
  214. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
  215. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
  216. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
  217. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
  218. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
  219. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
  220. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
  221. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
  222. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
  223. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
  224. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
  225. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/01-pair-programming.md +0 -0
  226. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/02-code-review-ensemble.md +0 -0
  227. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/03-cross-server-delegation.md +0 -0
  228. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/04-knowledge-propagation.md +0 -0
  229. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/05-the-observer.md +0 -0
  230. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/06-cross-server-ops.md +0 -0
  231. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/07-supervisor-intervention.md +0 -0
  232. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/08-apps-as-agents.md +0 -0
  233. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/09-research-swarm.md +0 -0
  234. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases/10-agent-lifecycle.md +0 -0
  235. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/use-cases-index.md +0 -0
  236. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/docs/what-is-culture.md +0 -0
  237. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/README.md +0 -0
  238. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/daemon.py +0 -0
  239. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/ipc.py +0 -0
  240. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/irc_transport.py +0 -0
  241. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/message_buffer.py +0 -0
  242. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/skill/SKILL.md +0 -0
  243. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/skill/irc_client.py +0 -0
  244. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/socket_server.py +0 -0
  245. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/packages/agent-harness/webhook.py +0 -0
  246. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
  247. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/claude-code/skills/culture/SKILL.md +0 -0
  248. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/claude-code/skills/irc/SKILL.md +0 -0
  249. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/plugins/codex/skills/culture-irc/SKILL.md +0 -0
  250. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/sonar-project.properties +0 -0
  251. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/__init__.py +0 -0
  252. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/conftest.py +0 -0
  253. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_acp_daemon.py +0 -0
  254. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_agent_runner.py +0 -0
  255. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bot.py +0 -0
  256. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bot_config.py +0 -0
  257. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bot_manager.py +0 -0
  258. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_bots_integration.py +0 -0
  259. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_channel.py +0 -0
  260. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_codex_daemon.py +0 -0
  261. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_connection.py +0 -0
  262. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_client.py +0 -0
  263. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_commands.py +0 -0
  264. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_connection.py +0 -0
  265. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_icons.py +0 -0
  266. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_console_integration.py +0 -0
  267. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_copilot_daemon.py +0 -0
  268. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_daemon.py +0 -0
  269. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_daemon_config.py +0 -0
  270. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_daemon_ipc.py +0 -0
  271. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_discovery.py +0 -0
  272. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_federation.py +0 -0
  273. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_history.py +0 -0
  274. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_http_listener.py +0 -0
  275. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_integration_layer5.py +0 -0
  276. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_ipc.py +0 -0
  277. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_irc_transport.py +0 -0
  278. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_link_reconnect.py +0 -0
  279. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mention_alias.py +0 -0
  280. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mention_target_cleanup.py +0 -0
  281. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mentions.py +0 -0
  282. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_mesh_config.py +0 -0
  283. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_message.py +0 -0
  284. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_message_buffer.py +0 -0
  285. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_messaging.py +0 -0
  286. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_modes.py +0 -0
  287. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_cli.py +0 -0
  288. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_collector.py +0 -0
  289. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_model.py +0 -0
  290. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_renderer.py +0 -0
  291. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_overview_web.py +0 -0
  292. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_persistence.py +0 -0
  293. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_pidfile.py +0 -0
  294. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_poll_loop.py +0 -0
  295. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_room_persistence.py +0 -0
  296. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_rooms.py +0 -0
  297. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_rooms_federation.py +0 -0
  298. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_rooms_integration.py +0 -0
  299. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_server_icon_skill.py +0 -0
  300. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_setup_update_cli.py +0 -0
  301. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_skill_client.py +0 -0
  302. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_skills.py +0 -0
  303. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_socket_server.py +0 -0
  304. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_supervisor.py +0 -0
  305. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_template_engine.py +0 -0
  306. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_thread_buffer.py +0 -0
  307. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_threads.py +0 -0
  308. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_virtual_client.py +0 -0
  309. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_wait_for_port.py +0 -0
  310. {agentirc_cli-4.2.1 → agentirc_cli-4.3.0}/tests/test_webhook.py +0 -0
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/).
6
6
 
7
+ ## [4.3.0] - 2026-04-07
8
+
9
+
10
+ ### Added
11
+
12
+ - agent delete command to remove agents from config entirely
13
+ - agent create now overwrites archived agents, enabling harness/model migration
14
+
15
+
16
+ ### Fixed
17
+
18
+ - agent create no longer blocks when the matching nick is archived
19
+
7
20
  ## [4.2.1] - 2026-04-07
8
21
 
9
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentirc-cli
3
- Version: 4.2.1
3
+ Version: 4.3.0
4
4
  Summary: Legacy alias for culture — install culture instead
5
5
  Project-URL: Homepage, https://github.com/OriNachum/culture
6
6
  Author: Ori Nachum
@@ -16,6 +16,7 @@ from culture.clients.claude.config import (
16
16
  archive_agent,
17
17
  load_config,
18
18
  load_config_or_default,
19
+ remove_agent,
19
20
  sanitize_agent_name,
20
21
  unarchive_agent,
21
22
  )
@@ -158,11 +159,16 @@ def register(subparsers: argparse._SubParsersAction) -> None:
158
159
  unarchive_parser.add_argument("nick", help="Agent nick to unarchive")
159
160
  unarchive_parser.add_argument("--config", default=DEFAULT_CONFIG, help=_CONFIG_HELP)
160
161
 
162
+ # -- delete ---------------------------------------------------------------
163
+ delete_parser = agent_sub.add_parser("delete", help="Remove an agent from config entirely")
164
+ delete_parser.add_argument("nick", help="Agent nick to delete")
165
+ delete_parser.add_argument("--config", default=DEFAULT_CONFIG, help=_CONFIG_HELP)
166
+
161
167
 
162
168
  def dispatch(args: argparse.Namespace) -> None:
163
169
  if not args.agent_command:
164
170
  print(
165
- "Usage: culture agent {create|join|start|stop|status|rename|assign|sleep|wake|learn|message|read|archive|unarchive}",
171
+ "Usage: culture agent {create|join|start|stop|status|rename|assign|sleep|wake|learn|message|read|archive|unarchive|delete}",
166
172
  file=sys.stderr,
167
173
  )
168
174
  sys.exit(1)
@@ -182,6 +188,7 @@ def dispatch(args: argparse.Namespace) -> None:
182
188
  "read": _cmd_read,
183
189
  "archive": _cmd_archive,
184
190
  "unarchive": _cmd_unarchive,
191
+ "delete": _cmd_delete,
185
192
  }
186
193
  handler = handlers.get(args.agent_command)
187
194
  if handler:
@@ -264,6 +271,10 @@ def _cmd_create(args: argparse.Namespace) -> None:
264
271
 
265
272
  for existing in config.agents:
266
273
  if existing.nick == full_nick:
274
+ if existing.archived:
275
+ print(f"Replacing archived agent '{full_nick}'")
276
+ remove_agent(args.config, full_nick)
277
+ break
267
278
  channels = existing.channels if isinstance(existing.channels, list) else []
268
279
  print(f"Agent '{full_nick}' already exists in config", file=sys.stderr)
269
280
  print(f" Directory: {existing.directory}", file=sys.stderr)
@@ -831,3 +842,20 @@ def _cmd_unarchive(args: argparse.Namespace) -> None:
831
842
 
832
843
  print(f"Agent unarchived: {args.nick}")
833
844
  print(f"\nStart with: culture agent start {args.nick}")
845
+
846
+
847
+ def _cmd_delete(args: argparse.Namespace) -> None:
848
+ """Remove an agent from config entirely."""
849
+ config = load_config_or_default(args.config)
850
+ agent = config.get_agent(args.nick)
851
+ if not agent:
852
+ print(f"Agent '{args.nick}' not found in config", file=sys.stderr)
853
+ sys.exit(1)
854
+
855
+ # Stop the agent if it's running
856
+ pid = read_pid(f"agent-{args.nick}")
857
+ if pid and is_process_alive(pid):
858
+ stop_agent(args.nick)
859
+
860
+ remove_agent(args.config, args.nick)
861
+ print(f"Agent deleted: {args.nick}")
@@ -248,3 +248,30 @@ def rename_agent(
248
248
  return
249
249
 
250
250
  raise ValueError(f"agent {old_nick!r} not found in config")
251
+
252
+
253
+ def remove_agent(
254
+ path: str | Path,
255
+ nick: str,
256
+ ) -> None:
257
+ """Remove an agent from config entirely.
258
+
259
+ Operates on raw YAML to preserve backend-specific fields on other
260
+ agents that the typed schema would strip.
261
+ Raises ValueError if the agent is not found.
262
+ """
263
+ path = Path(path)
264
+ if not path.exists():
265
+ raise ValueError(f"agent {nick!r} not found in config")
266
+
267
+ with open(path) as f:
268
+ raw = yaml.safe_load(f) or {}
269
+
270
+ agents = raw.get("agents", [])
271
+ for i, agent_raw in enumerate(agents):
272
+ if agent_raw.get("nick") == nick:
273
+ agents.pop(i)
274
+ with open(path, "w") as f:
275
+ yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
276
+ return
277
+ raise ValueError(f"agent {nick!r} not found in config")
@@ -303,6 +303,33 @@ def unarchive_agent(
303
303
  raise ValueError(f"agent {nick!r} not found in config")
304
304
 
305
305
 
306
+ def remove_agent(
307
+ path: str | Path,
308
+ nick: str,
309
+ ) -> None:
310
+ """Remove an agent from config entirely.
311
+
312
+ Operates on raw YAML to preserve backend-specific fields (e.g.
313
+ acp_command) on other agents that the typed schema would strip.
314
+ Raises ValueError if the agent is not found.
315
+ """
316
+ path = Path(path)
317
+ if not path.exists():
318
+ raise ValueError(f"agent {nick!r} not found in config")
319
+
320
+ with open(path) as f:
321
+ raw = yaml.safe_load(f) or {}
322
+
323
+ agents = raw.get("agents", [])
324
+ for i, agent_raw in enumerate(agents):
325
+ if agent_raw.get("nick") == nick:
326
+ agents.pop(i)
327
+ with open(path, "w") as f:
328
+ yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
329
+ return
330
+ raise ValueError(f"agent {nick!r} not found in config")
331
+
332
+
306
333
  def archive_server(
307
334
  path: str | Path,
308
335
  reason: str = "",
@@ -248,3 +248,30 @@ def rename_agent(
248
248
  return
249
249
 
250
250
  raise ValueError(f"agent {old_nick!r} not found in config")
251
+
252
+
253
+ def remove_agent(
254
+ path: str | Path,
255
+ nick: str,
256
+ ) -> None:
257
+ """Remove an agent from config entirely.
258
+
259
+ Operates on raw YAML to preserve backend-specific fields on other
260
+ agents that the typed schema would strip.
261
+ Raises ValueError if the agent is not found.
262
+ """
263
+ path = Path(path)
264
+ if not path.exists():
265
+ raise ValueError(f"agent {nick!r} not found in config")
266
+
267
+ with open(path) as f:
268
+ raw = yaml.safe_load(f) or {}
269
+
270
+ agents = raw.get("agents", [])
271
+ for i, agent_raw in enumerate(agents):
272
+ if agent_raw.get("nick") == nick:
273
+ agents.pop(i)
274
+ with open(path, "w") as f:
275
+ yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
276
+ return
277
+ raise ValueError(f"agent {nick!r} not found in config")
@@ -248,3 +248,30 @@ def rename_agent(
248
248
  return
249
249
 
250
250
  raise ValueError(f"agent {old_nick!r} not found in config")
251
+
252
+
253
+ def remove_agent(
254
+ path: str | Path,
255
+ nick: str,
256
+ ) -> None:
257
+ """Remove an agent from config entirely.
258
+
259
+ Operates on raw YAML to preserve backend-specific fields on other
260
+ agents that the typed schema would strip.
261
+ Raises ValueError if the agent is not found.
262
+ """
263
+ path = Path(path)
264
+ if not path.exists():
265
+ raise ValueError(f"agent {nick!r} not found in config")
266
+
267
+ with open(path) as f:
268
+ raw = yaml.safe_load(f) or {}
269
+
270
+ agents = raw.get("agents", [])
271
+ for i, agent_raw in enumerate(agents):
272
+ if agent_raw.get("nick") == nick:
273
+ agents.pop(i)
274
+ with open(path, "w") as f:
275
+ yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
276
+ return
277
+ raise ValueError(f"agent {nick!r} not found in config")
@@ -238,6 +238,58 @@ per-file (no list to search through).
238
238
  - `test_start_refuses_archived_server` -- verify error message
239
239
  - `test_start_all_skips_archived` -- verify `--all` only starts active agents
240
240
 
241
+ ## Agent Deletion and Create-Overwrite
242
+
243
+ ### Problem
244
+
245
+ Once an agent is archived, there's no way to recreate it with a different
246
+ backend or model. `culture agent create` blocks with "already exists in config"
247
+ because the archived entry is still present. Users must manually edit
248
+ `agents.yaml` to change an agent's harness.
249
+
250
+ ### Delete Command
251
+
252
+ ```
253
+ culture agent delete <nick> [--config PATH]
254
+ ```
255
+
256
+ Removes an agent from config entirely. Stops the agent if running.
257
+
258
+ ### Create Overwrites Archived Agents
259
+
260
+ `culture agent create` now detects when the matching agent is archived and
261
+ automatically replaces it:
262
+
263
+ ```
264
+ $ culture agent archive spark-daria
265
+ Agent archived: spark-daria
266
+
267
+ $ culture agent create --server spark --nick daria --agent acp
268
+ Replacing archived agent 'spark-daria'
269
+ Agent created: spark-daria
270
+ ...
271
+ ```
272
+
273
+ Non-archived agents still block `create` with the existing error. This is the
274
+ primary mechanism for moving an agent to a different harness or model.
275
+
276
+ ### Config Layer
277
+
278
+ ```python
279
+ def remove_agent(path, nick):
280
+ """Remove an agent from config entirely. Raises ValueError if not found."""
281
+ ```
282
+
283
+ Added to all backend config files (`claude`, `acp`, `codex`, `copilot`) and
284
+ `packages/agent-harness/config.py`. Uses raw YAML manipulation to preserve
285
+ backend-specific fields (e.g. `acp_command`) on other agents.
286
+
287
+ ### Protocol Details
288
+
289
+ No new protocol changes. Delete and create-overwrite are CLI/config operations
290
+ only, consistent with the existing archiving scope (CLI-only, no federation
291
+ concern).
292
+
241
293
  ## Verification
242
294
 
243
295
  1. Create test agents: `culture agent create --nick test1 && culture agent create --nick test2`
@@ -246,3 +246,30 @@ def rename_agent(
246
246
  return
247
247
 
248
248
  raise ValueError(f"agent {old_nick!r} not found in config")
249
+
250
+
251
+ def remove_agent(
252
+ path: str | Path,
253
+ nick: str,
254
+ ) -> None:
255
+ """Remove an agent from config entirely.
256
+
257
+ Operates on raw YAML to preserve backend-specific fields on other
258
+ agents that the typed schema would strip.
259
+ Raises ValueError if the agent is not found.
260
+ """
261
+ path = Path(path)
262
+ if not path.exists():
263
+ raise ValueError(f"agent {nick!r} not found in config")
264
+
265
+ with open(path) as f:
266
+ raw = yaml.safe_load(f) or {}
267
+
268
+ agents = raw.get("agents", [])
269
+ for i, agent_raw in enumerate(agents):
270
+ if agent_raw.get("nick") == nick:
271
+ agents.pop(i)
272
+ with open(path, "w") as f:
273
+ yaml.dump(raw, f, default_flow_style=False, sort_keys=False)
274
+ return
275
+ raise ValueError(f"agent {nick!r} not found in config")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentirc-cli"
3
- version = "4.2.1"
3
+ version = "4.3.0"
4
4
  description = "Legacy alias for culture — install culture instead"
5
5
  readme = "README.md"
6
6
  license = "MIT"