agentirc-cli 4.4.2__tar.gz → 4.5.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 (341) hide show
  1. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/CHANGELOG.md +28 -0
  2. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/CLAUDE.md +21 -0
  3. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/PKG-INFO +4 -4
  4. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/README.md +3 -3
  5. agentirc_cli-4.5.0/_includes/head_custom.html +3 -0
  6. agentirc_cli-4.5.0/assets/images/apple-touch-icon.png +0 -0
  7. agentirc_cli-4.5.0/assets/images/favicon-16x16.png +0 -0
  8. agentirc_cli-4.5.0/assets/images/favicon-32x32.png +0 -0
  9. agentirc_cli-4.5.0/assets/images/favicon.ico +0 -0
  10. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/agent.py +191 -6
  11. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/constants.py +4 -1
  12. agentirc_cli-4.5.0/culture/clients/acp/culture.yaml +16 -0
  13. agentirc_cli-4.5.0/culture/clients/claude/culture.yaml +13 -0
  14. agentirc_cli-4.5.0/culture/clients/codex/culture.yaml +13 -0
  15. agentirc_cli-4.5.0/culture/clients/copilot/culture.yaml +13 -0
  16. agentirc_cli-4.5.0/culture/config.py +457 -0
  17. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/agent-lifecycle.md +1 -1
  18. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/agentic-self-learn.md +1 -1
  19. agentirc_cli-4.5.0/docs/agents/decentralized-config.md +194 -0
  20. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/culture-cli.md +1 -1
  21. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/getting-started.md +1 -1
  22. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/index.md +4 -3
  23. agentirc_cli-4.5.0/docs/reflective-development.md +130 -0
  24. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/rooms.md +1 -1
  25. agentirc_cli-4.5.0/docs/superpowers/plans/2026-04-09-decentralized-agent-config.md +2131 -0
  26. agentirc_cli-4.5.0/docs/superpowers/specs/2026-04-08-reflective-development-deepening-design.md +179 -0
  27. agentirc_cli-4.5.0/docs/superpowers/specs/2026-04-09-decentralized-agent-config-design.md +361 -0
  28. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases-index.md +1 -1
  29. agentirc_cli-4.5.0/favicon.ico +0 -0
  30. agentirc_cli-4.5.0/packages/agent-harness/culture.yaml +13 -0
  31. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/pyproject.toml +1 -1
  32. agentirc_cli-4.5.0/tests/test_culture_config.py +499 -0
  33. agentirc_cli-4.5.0/tests/test_migrate_cli.py +117 -0
  34. agentirc_cli-4.5.0/tests/test_register_cli.py +139 -0
  35. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/uv.lock +1 -1
  36. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.claude/skills/pr-review/SKILL.md +0 -0
  37. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.claude/skills/run-tests/SKILL.md +0 -0
  38. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  39. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.flake8 +0 -0
  40. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.github/workflows/pages.yml +0 -0
  41. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.github/workflows/publish.yml +0 -0
  42. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.github/workflows/security-checks.yml +0 -0
  43. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.github/workflows/tests.yml +0 -0
  44. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.gitignore +0 -0
  45. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.markdownlint-cli2.yaml +0 -0
  46. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.pr_agent.toml +0 -0
  47. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.pre-commit-config.yaml +0 -0
  48. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/.pylintrc +0 -0
  49. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/CNAME +0 -0
  50. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/Gemfile +0 -0
  51. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/Gemfile.lock +0 -0
  52. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/LICENSE +0 -0
  53. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/SECURITY.md +0 -0
  54. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/_config.yml +0 -0
  55. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/_sass/color_schemes/anthropic.scss +0 -0
  56. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/_sass/custom/custom.scss +0 -0
  57. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/__init__.py +0 -0
  58. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/__main__.py +0 -0
  59. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/aio.py +0 -0
  60. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/__init__.py +0 -0
  61. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/bot.py +0 -0
  62. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/bot_manager.py +0 -0
  63. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/config.py +0 -0
  64. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/http_listener.py +0 -0
  65. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/template_engine.py +0 -0
  66. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/bots/virtual_client.py +0 -0
  67. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/__init__.py +0 -0
  68. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/bot.py +0 -0
  69. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/channel.py +0 -0
  70. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/mesh.py +0 -0
  71. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/server.py +0 -0
  72. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/__init__.py +0 -0
  73. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/display.py +0 -0
  74. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/formatting.py +0 -0
  75. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/ipc.py +0 -0
  76. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/mesh.py +0 -0
  77. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/shared/process.py +0 -0
  78. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/cli/skills.py +0 -0
  79. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/__init__.py +0 -0
  80. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/__init__.py +0 -0
  81. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/agent_runner.py +0 -0
  82. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/config.py +0 -0
  83. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/daemon.py +0 -0
  84. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/ipc.py +0 -0
  85. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/irc_transport.py +0 -0
  86. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/message_buffer.py +0 -0
  87. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/skill/SKILL.md +0 -0
  88. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/skill/__init__.py +0 -0
  89. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/skill/irc_client.py +0 -0
  90. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/socket_server.py +0 -0
  91. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/supervisor.py +0 -0
  92. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/acp/webhook.py +0 -0
  93. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/__init__.py +0 -0
  94. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/__main__.py +0 -0
  95. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/agent_runner.py +0 -0
  96. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/config.py +0 -0
  97. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/daemon.py +0 -0
  98. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/ipc.py +0 -0
  99. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/irc_transport.py +0 -0
  100. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/message_buffer.py +0 -0
  101. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/skill/SKILL.md +0 -0
  102. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/skill/__init__.py +0 -0
  103. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/skill/irc_client.py +0 -0
  104. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/socket_server.py +0 -0
  105. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/supervisor.py +0 -0
  106. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/claude/webhook.py +0 -0
  107. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/__init__.py +0 -0
  108. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/agent_runner.py +0 -0
  109. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/config.py +0 -0
  110. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/daemon.py +0 -0
  111. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/ipc.py +0 -0
  112. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/irc_transport.py +0 -0
  113. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/message_buffer.py +0 -0
  114. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/skill/SKILL.md +0 -0
  115. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/skill/__init__.py +0 -0
  116. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/skill/irc_client.py +0 -0
  117. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/socket_server.py +0 -0
  118. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/supervisor.py +0 -0
  119. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/codex/webhook.py +0 -0
  120. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/__init__.py +0 -0
  121. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/agent_runner.py +0 -0
  122. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/config.py +0 -0
  123. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/daemon.py +0 -0
  124. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/ipc.py +0 -0
  125. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/irc_transport.py +0 -0
  126. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/message_buffer.py +0 -0
  127. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/skill/SKILL.md +0 -0
  128. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/skill/__init__.py +0 -0
  129. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/skill/irc_client.py +0 -0
  130. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/socket_server.py +0 -0
  131. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/supervisor.py +0 -0
  132. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/clients/copilot/webhook.py +0 -0
  133. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/__init__.py +0 -0
  134. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/app.py +0 -0
  135. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/client.py +0 -0
  136. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/commands.py +0 -0
  137. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/widgets/__init__.py +0 -0
  138. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/widgets/chat.py +0 -0
  139. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/widgets/info_panel.py +0 -0
  140. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/console/widgets/sidebar.py +0 -0
  141. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/credentials.py +0 -0
  142. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/formatting.py +0 -0
  143. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/learn_prompt.py +0 -0
  144. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/mesh_config.py +0 -0
  145. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/observer.py +0 -0
  146. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/overview/__init__.py +0 -0
  147. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/overview/collector.py +0 -0
  148. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/overview/model.py +0 -0
  149. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/overview/renderer_text.py +0 -0
  150. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/overview/renderer_web.py +0 -0
  151. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/overview/web/style.css +0 -0
  152. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/persistence.py +0 -0
  153. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/pidfile.py +0 -0
  154. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/__init__.py +0 -0
  155. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/commands.py +0 -0
  156. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/extensions/federation.md +0 -0
  157. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/extensions/history.md +0 -0
  158. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/extensions/icons.md +0 -0
  159. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/extensions/rooms.md +0 -0
  160. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/extensions/tags.md +0 -0
  161. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/extensions/threads.md +0 -0
  162. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/message.py +0 -0
  163. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/protocol-index.md +0 -0
  164. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/protocol/replies.py +0 -0
  165. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/__init__.py +0 -0
  166. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/__main__.py +0 -0
  167. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/channel.py +0 -0
  168. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/client.py +0 -0
  169. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/config.py +0 -0
  170. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/history_store.py +0 -0
  171. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/ircd.py +0 -0
  172. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/remote_client.py +0 -0
  173. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/room_store.py +0 -0
  174. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/rooms_util.py +0 -0
  175. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/server_link.py +0 -0
  176. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/skill.py +0 -0
  177. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/skills/__init__.py +0 -0
  178. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/skills/history.py +0 -0
  179. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/skills/icon.py +0 -0
  180. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/skills/rooms.py +0 -0
  181. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/skills/threads.py +0 -0
  182. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/server/thread_store.py +0 -0
  183. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/culture/skills/culture/SKILL.md +0 -0
  184. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/agent-client.md +0 -0
  185. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/agent-harness-spec.md +0 -0
  186. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/design.md +0 -0
  187. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/harness-conformance.md +0 -0
  188. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/index.md +0 -0
  189. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/layer1-core-irc.md +0 -0
  190. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/layer2-attention.md +0 -0
  191. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/layer3-skills.md +0 -0
  192. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/layer4-federation.md +0 -0
  193. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/layer5-agent-harness.md +0 -0
  194. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/server-architecture.md +0 -0
  195. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/architecture/threads.md +0 -0
  196. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/channel-polling.md +0 -0
  197. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/acp/overview.md +0 -0
  198. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/acp/system-prompt.md +0 -0
  199. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/configuration.md +0 -0
  200. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/context-management.md +0 -0
  201. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/irc-tools.md +0 -0
  202. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/overview.md +0 -0
  203. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/setup.md +0 -0
  204. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/supervisor.md +0 -0
  205. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/claude/webhooks.md +0 -0
  206. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/configuration.md +0 -0
  207. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/context-management.md +0 -0
  208. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/irc-tools.md +0 -0
  209. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/overview.md +0 -0
  210. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/setup.md +0 -0
  211. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/supervisor.md +0 -0
  212. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/codex/webhooks.md +0 -0
  213. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/configuration.md +0 -0
  214. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/context-management.md +0 -0
  215. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/irc-tools.md +0 -0
  216. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/overview.md +0 -0
  217. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/setup.md +0 -0
  218. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/supervisor.md +0 -0
  219. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/clients/copilot/webhooks.md +0 -0
  220. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/SECURITY.md +0 -0
  221. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/bots.md +0 -0
  222. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/ci.md +0 -0
  223. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/cli.md +0 -0
  224. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/docs-site.md +0 -0
  225. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/index.md +0 -0
  226. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/ops-tooling.md +0 -0
  227. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/overview.md +0 -0
  228. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/operations/publishing.md +0 -0
  229. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/persistent-history.md +0 -0
  230. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/resources/github-copilot-sdk-instructions.md +0 -0
  231. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/server-rename.md +0 -0
  232. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
  233. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
  234. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
  235. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
  236. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
  237. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
  238. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
  239. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
  240. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
  241. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
  242. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
  243. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
  244. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
  245. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
  246. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
  247. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
  248. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
  249. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
  250. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
  251. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
  252. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
  253. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +0 -0
  254. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/superpowers/specs/2026-04-07-reflective-development-reframe-design.md +0 -0
  255. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/01-pair-programming.md +0 -0
  256. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/02-code-review-ensemble.md +0 -0
  257. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/03-cross-server-delegation.md +0 -0
  258. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/04-knowledge-propagation.md +0 -0
  259. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/05-the-observer.md +0 -0
  260. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/06-cross-server-ops.md +0 -0
  261. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/07-supervisor-intervention.md +0 -0
  262. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/08-apps-as-agents.md +0 -0
  263. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/09-research-swarm.md +0 -0
  264. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/use-cases/10-agent-lifecycle.md +0 -0
  265. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/docs/what-is-culture.md +0 -0
  266. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/README.md +0 -0
  267. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/config.py +0 -0
  268. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/daemon.py +0 -0
  269. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/ipc.py +0 -0
  270. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/irc_transport.py +0 -0
  271. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/message_buffer.py +0 -0
  272. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/skill/SKILL.md +0 -0
  273. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/skill/irc_client.py +0 -0
  274. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/socket_server.py +0 -0
  275. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/packages/agent-harness/webhook.py +0 -0
  276. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
  277. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/plugins/claude-code/skills/culture/SKILL.md +0 -0
  278. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/plugins/claude-code/skills/irc/SKILL.md +0 -0
  279. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/plugins/codex/skills/culture-irc/SKILL.md +0 -0
  280. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/sonar-project.properties +0 -0
  281. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/__init__.py +0 -0
  282. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/conftest.py +0 -0
  283. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_acp_daemon.py +0 -0
  284. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_agent_runner.py +0 -0
  285. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_archive.py +0 -0
  286. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_bot.py +0 -0
  287. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_bot_config.py +0 -0
  288. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_bot_manager.py +0 -0
  289. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_bots_integration.py +0 -0
  290. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_channel.py +0 -0
  291. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_codex_daemon.py +0 -0
  292. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_connection.py +0 -0
  293. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_console_client.py +0 -0
  294. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_console_commands.py +0 -0
  295. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_console_connection.py +0 -0
  296. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_console_icons.py +0 -0
  297. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_console_integration.py +0 -0
  298. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_copilot_daemon.py +0 -0
  299. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_daemon.py +0 -0
  300. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_daemon_config.py +0 -0
  301. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_daemon_ipc.py +0 -0
  302. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_discovery.py +0 -0
  303. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_federation.py +0 -0
  304. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_history.py +0 -0
  305. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_http_listener.py +0 -0
  306. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_integration_layer5.py +0 -0
  307. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_ipc.py +0 -0
  308. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_irc_transport.py +0 -0
  309. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_link_reconnect.py +0 -0
  310. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_mention_alias.py +0 -0
  311. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_mention_target_cleanup.py +0 -0
  312. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_mentions.py +0 -0
  313. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_mesh_config.py +0 -0
  314. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_message.py +0 -0
  315. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_message_buffer.py +0 -0
  316. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_messaging.py +0 -0
  317. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_modes.py +0 -0
  318. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_overview_cli.py +0 -0
  319. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_overview_collector.py +0 -0
  320. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_overview_model.py +0 -0
  321. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_overview_renderer.py +0 -0
  322. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_overview_web.py +0 -0
  323. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_persistence.py +0 -0
  324. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_pidfile.py +0 -0
  325. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_poll_loop.py +0 -0
  326. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_room_persistence.py +0 -0
  327. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_rooms.py +0 -0
  328. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_rooms_federation.py +0 -0
  329. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_rooms_integration.py +0 -0
  330. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_server_icon_skill.py +0 -0
  331. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_setup_update_cli.py +0 -0
  332. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_skill_client.py +0 -0
  333. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_skills.py +0 -0
  334. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_socket_server.py +0 -0
  335. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_supervisor.py +0 -0
  336. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_template_engine.py +0 -0
  337. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_thread_buffer.py +0 -0
  338. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_threads.py +0 -0
  339. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_virtual_client.py +0 -0
  340. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_wait_for_port.py +0 -0
  341. {agentirc_cli-4.4.2 → agentirc_cli-4.5.0}/tests/test_webhook.py +0 -0
@@ -4,6 +4,34 @@ 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.5.0] - 2026-04-09
8
+
9
+
10
+ ### Added
11
+
12
+ - Decentralized agent configuration with per-directory culture.yaml files
13
+ - New ~/.culture/server.yaml for machine-level config with agent manifest
14
+ - CLI: culture agent register/unregister for managing agent directories
15
+ - CLI: culture agent migrate for one-time migration from agents.yaml
16
+ - Unified culture/config.py module with AgentConfig, ServerConfig, auto-detection
17
+ - culture.yaml definitions for harness template and backend agents (#harness channel)
18
+
19
+
20
+ ### Changed
21
+
22
+ - Agent config split: per-agent settings in culture.yaml, server settings in server.yaml
23
+ - CLI agent commands now support both server.yaml and legacy agents.yaml formats
24
+
25
+
26
+ ## [4.4.3] - 2026-04-08
27
+
28
+
29
+ ### Changed
30
+
31
+ - Regenerate all favicons, including `/favicon.ico` and `/assets/images/favicon.ico`, from the source image with proper cropping and optimization
32
+ - Reduce `/favicon.ico` from 1.4 MB to 3.5 KB and optimize `/assets/images/favicon.ico`
33
+ - Remove original source image (IMG_3161.png)
34
+
7
35
  ## [4.4.2] - 2026-04-08
8
36
 
9
37
 
@@ -28,6 +28,23 @@ If you improve a generic component (e.g., `irc_transport.py`), update the refere
28
28
 
29
29
  **All-backends rule:** When adding or changing a feature in any agent harness (config fields, transport capabilities, daemon handlers), propagate the change to **all** backends (`claude`, `codex`, `copilot`, `acp`) and update `docs/` accordingly. A feature that only exists in one backend is a bug.
30
30
 
31
+ ## Agent Configuration
32
+
33
+ Agent definitions are decentralized into per-directory `culture.yaml` files:
34
+
35
+ - `culture.yaml` — agent identity and config, lives in the agent's working directory
36
+ - `~/.culture/server.yaml` — server connection, supervisor, webhooks, and agent manifest
37
+
38
+ Key commands:
39
+
40
+ - `culture agent register [path]` — register a directory's culture.yaml
41
+ - `culture agent unregister <suffix|nick>` — remove from manifest
42
+ - `culture agent migrate` — one-time migration from legacy agents.yaml
43
+ - `culture agent start/stop/status` — work with both server.yaml and legacy agents.yaml
44
+
45
+ Template: `packages/agent-harness/culture.yaml` is the reference implementation.
46
+ Each backend has its own `culture.yaml` in `culture/clients/<backend>/`.
47
+
31
48
  ## Documentation
32
49
 
33
50
  When implementing features, write a corresponding markdown doc in `docs/` describing the feature — its purpose, usage, and any protocol details. Keep `docs/` as the living reference for the project.
@@ -50,6 +67,10 @@ When implementing features, write a corresponding markdown doc in `docs/` descri
50
67
 
51
68
  `<server>-<agent>` (e.g., `thor-claude`, `spark-ori`). Globally unique by construction.
52
69
 
70
+ ## Mesh Presence
71
+
72
+ When not actively working with a user, you run as `spark-culture` on the mesh — the agent daemon launched from this repo's working directory. This is your persistent identity on the network: you can observe channels, respond to mentions, and collaborate with other agents. The systemd service is `culture-agent-spark-culture.service`.
73
+
53
74
  ## Protocol
54
75
 
55
76
  IRC RFC 2812 as base. Extensions use new verbs (never redefine existing commands), documented in `protocol/extensions/`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentirc-cli
3
- Version: 4.4.2
3
+ Version: 4.5.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
@@ -46,7 +46,7 @@ Claude Code · Codex · Copilot · ACP (Cline, Kiro, OpenCode, Gemini, ...)
46
46
  <br><br>
47
47
  <sub>If you find Culture useful, <a href="https://github.com/OriNachum/culture/stargazers">give it a ⭐</a> — it helps others discover the project.</sub>
48
48
 
49
- <img width="800" alt="Culture" src="https://github.com/user-attachments/assets/e8e589d2-eb04-47cc-9ae3-5a98d750e36c" />
49
+ <img width="800" alt="culture-hero" src="https://github.com/user-attachments/assets/95dc79a2-d740-4554-b817-6e017b6cfd16" />
50
50
 
51
51
  </div>
52
52
 
@@ -140,13 +140,13 @@ Members on any machine see each other in `#general`. @mentions cross boundaries.
140
140
 
141
141
  ## Reflective Development
142
142
 
143
- Culture follows the **Reflective Development** paradigm — agents develop by reflecting on real work, not by configuration. Documentation flows back as context. Code reflects from reference to implementation. The lifecycle is continuous, not graduated:
143
+ Culture follows the **Reflective Development** paradigm — the work, the documentation, and the participants all reflect back on themselves. Documentation flows back as context. Code reflects from reference to implementation. Practitioners review their own output and improve the environment they work in. The lifecycle is continuous, not graduated:
144
144
 
145
145
  👋 **Introduce** → 🎓 **Educate** → 🤝 **Join** → 🧭 **Mentor** → ⭐ **Promote**
146
146
 
147
147
  Introduce an agent to your project, educate it until it's autonomous enough, join it to the mesh, and mentor it as things change. No agent or human ever finishes developing — the process is ongoing for every participant.
148
148
 
149
- Read more: **[Agent Lifecycle](docs/agent-lifecycle.md)**
149
+ Read more: **[Reflective Development](docs/reflective-development.md)** · **[Agent Lifecycle](docs/agent-lifecycle.md)**
150
150
 
151
151
  ---
152
152
 
@@ -22,7 +22,7 @@ Claude Code · Codex · Copilot · ACP (Cline, Kiro, OpenCode, Gemini, ...)
22
22
  <br><br>
23
23
  <sub>If you find Culture useful, <a href="https://github.com/OriNachum/culture/stargazers">give it a ⭐</a> — it helps others discover the project.</sub>
24
24
 
25
- <img width="800" alt="Culture" src="https://github.com/user-attachments/assets/e8e589d2-eb04-47cc-9ae3-5a98d750e36c" />
25
+ <img width="800" alt="culture-hero" src="https://github.com/user-attachments/assets/95dc79a2-d740-4554-b817-6e017b6cfd16" />
26
26
 
27
27
  </div>
28
28
 
@@ -116,13 +116,13 @@ Members on any machine see each other in `#general`. @mentions cross boundaries.
116
116
 
117
117
  ## Reflective Development
118
118
 
119
- Culture follows the **Reflective Development** paradigm — agents develop by reflecting on real work, not by configuration. Documentation flows back as context. Code reflects from reference to implementation. The lifecycle is continuous, not graduated:
119
+ Culture follows the **Reflective Development** paradigm — the work, the documentation, and the participants all reflect back on themselves. Documentation flows back as context. Code reflects from reference to implementation. Practitioners review their own output and improve the environment they work in. The lifecycle is continuous, not graduated:
120
120
 
121
121
  👋 **Introduce** → 🎓 **Educate** → 🤝 **Join** → 🧭 **Mentor** → ⭐ **Promote**
122
122
 
123
123
  Introduce an agent to your project, educate it until it's autonomous enough, join it to the mesh, and mentor it as things change. No agent or human ever finishes developing — the process is ongoing for every participant.
124
124
 
125
- Read more: **[Agent Lifecycle](docs/agent-lifecycle.md)**
125
+ Read more: **[Reflective Development](docs/reflective-development.md)** · **[Agent Lifecycle](docs/agent-lifecycle.md)**
126
126
 
127
127
  ---
128
128
 
@@ -0,0 +1,3 @@
1
+ <link rel="icon" type="image/png" sizes="32x32" href="{{ '/assets/images/favicon-32x32.png' | relative_url }}">
2
+ <link rel="icon" type="image/png" sizes="16x16" href="{{ '/assets/images/favicon-16x16.png' | relative_url }}">
3
+ <link rel="apple-touch-icon" sizes="180x180" href="{{ '/assets/images/apple-touch-icon.png' | relative_url }}">
@@ -8,17 +8,31 @@ import logging
8
8
  import os
9
9
  import signal
10
10
  import sys
11
+ from pathlib import Path
12
+
13
+ import yaml
11
14
 
12
15
  from culture.clients.claude.config import (
13
- AgentConfig,
14
- DaemonConfig,
15
16
  add_agent_to_config,
16
17
  archive_agent,
18
+ remove_agent,
19
+ unarchive_agent,
20
+ )
21
+ from culture.config import (
22
+ AgentConfig,
23
+ DaemonConfig,
24
+ ServerConfig,
25
+ ServerConnConfig,
26
+ SupervisorConfig,
27
+ WebhookConfig,
28
+ add_to_manifest,
17
29
  load_config,
18
30
  load_config_or_default,
19
- remove_agent,
31
+ load_culture_yaml,
32
+ remove_from_manifest,
20
33
  sanitize_agent_name,
21
- unarchive_agent,
34
+ save_culture_yaml,
35
+ save_server_config,
22
36
  )
23
37
  from culture.pidfile import (
24
38
  is_process_alive,
@@ -31,6 +45,8 @@ from .shared.constants import (
31
45
  _CONFIG_HELP,
32
46
  DEFAULT_CHANNEL,
33
47
  DEFAULT_CONFIG,
48
+ DEFAULT_SERVER_CONFIG,
49
+ LEGACY_CONFIG,
34
50
  LOG_DIR,
35
51
  NO_AGENTS_MSG,
36
52
  )
@@ -162,11 +178,35 @@ def register(subparsers: argparse._SubParsersAction) -> None:
162
178
  delete_parser.add_argument("nick", help="Agent nick to delete")
163
179
  delete_parser.add_argument("--config", default=DEFAULT_CONFIG, help=_CONFIG_HELP)
164
180
 
181
+ # -- register -------------------------------------------------------------
182
+ register_parser = agent_sub.add_parser("register", help="Register agent directory")
183
+ register_parser.add_argument(
184
+ "path", nargs="?", default=None, help="Directory containing culture.yaml (default: cwd)"
185
+ )
186
+ register_parser.add_argument(
187
+ "--suffix", default=None, help="Agent suffix (required for multi-agent culture.yaml)"
188
+ )
189
+ register_parser.add_argument("--config", default=DEFAULT_SERVER_CONFIG, help=_CONFIG_HELP)
190
+
191
+ # -- unregister -----------------------------------------------------------
192
+ unregister_parser = agent_sub.add_parser("unregister", help="Unregister agent")
193
+ unregister_parser.add_argument("target", help="Agent suffix or full nick")
194
+ unregister_parser.add_argument("--config", default=DEFAULT_SERVER_CONFIG, help=_CONFIG_HELP)
195
+
196
+ # -- migrate --------------------------------------------------------------
197
+ migrate_parser = agent_sub.add_parser(
198
+ "migrate", help="Migrate agents.yaml to server.yaml + culture.yaml"
199
+ )
200
+ migrate_parser.add_argument("--config", default=LEGACY_CONFIG, help="Legacy agents.yaml path")
201
+ migrate_parser.add_argument(
202
+ "--output", default=DEFAULT_SERVER_CONFIG, help="Output server.yaml path"
203
+ )
204
+
165
205
 
166
206
  def dispatch(args: argparse.Namespace) -> None:
167
207
  if not args.agent_command:
168
208
  print(
169
- "Usage: culture agent {create|join|start|stop|status|rename|assign|sleep|wake|learn|message|read|archive|unarchive|delete}",
209
+ "Usage: culture agent {create|join|start|stop|status|rename|assign|sleep|wake|learn|message|read|archive|unarchive|delete|register|unregister|migrate}",
170
210
  file=sys.stderr,
171
211
  )
172
212
  sys.exit(1)
@@ -187,6 +227,9 @@ def dispatch(args: argparse.Namespace) -> None:
187
227
  "archive": _cmd_archive,
188
228
  "unarchive": _cmd_unarchive,
189
229
  "delete": _cmd_delete,
230
+ "register": _cmd_register,
231
+ "unregister": _cmd_unregister,
232
+ "migrate": _cmd_migrate,
190
233
  }
191
234
  handler = handlers.get(args.agent_command)
192
235
  if handler:
@@ -259,7 +302,7 @@ def _create_default_config(full_nick: str, backend: str) -> AgentConfig:
259
302
  """Build a default (claude) AgentConfig."""
260
303
  return AgentConfig(
261
304
  nick=full_nick,
262
- agent=backend,
305
+ backend=backend,
263
306
  directory=os.getcwd(),
264
307
  channels=[DEFAULT_CHANNEL],
265
308
  )
@@ -933,3 +976,145 @@ def _cmd_delete(args: argparse.Namespace) -> None:
933
976
 
934
977
  remove_agent(args.config, args.nick)
935
978
  print(f"Agent deleted: {args.nick}")
979
+
980
+
981
+ # -----------------------------------------------------------------------
982
+ # Register / Unregister
983
+ # -----------------------------------------------------------------------
984
+
985
+
986
+ def _cmd_register(args: argparse.Namespace) -> None:
987
+ """Register a directory containing culture.yaml."""
988
+ directory = args.path if args.path else os.getcwd()
989
+ directory = str(Path(directory).resolve())
990
+
991
+ try:
992
+ agents = load_culture_yaml(directory)
993
+ except FileNotFoundError:
994
+ print(f"No culture.yaml found in {directory}", file=sys.stderr)
995
+ sys.exit(1)
996
+
997
+ if len(agents) > 1 and args.suffix is None:
998
+ print(
999
+ f"Multiple agents in {directory}/culture.yaml. " "Use --suffix to specify which one.",
1000
+ file=sys.stderr,
1001
+ )
1002
+ print("Available suffixes:", file=sys.stderr)
1003
+ for a in agents:
1004
+ print(f" {a.suffix}", file=sys.stderr)
1005
+ sys.exit(1)
1006
+
1007
+ targets = agents if args.suffix is None else [a for a in agents if a.suffix == args.suffix]
1008
+ if not targets:
1009
+ print(f"Suffix {args.suffix!r} not found in culture.yaml", file=sys.stderr)
1010
+ sys.exit(1)
1011
+
1012
+ config = load_config_or_default(args.config)
1013
+ server_name = config.server.name
1014
+
1015
+ for agent in targets:
1016
+ try:
1017
+ add_to_manifest(args.config, agent.suffix, directory)
1018
+ except ValueError as e:
1019
+ print(f"Error: {e}", file=sys.stderr)
1020
+ sys.exit(1)
1021
+ print(f"Registered: {server_name}-{agent.suffix} at {directory}")
1022
+
1023
+
1024
+ def _cmd_unregister(args: argparse.Namespace) -> None:
1025
+ """Remove an agent from the manifest."""
1026
+ target = args.target
1027
+ config = load_config_or_default(args.config)
1028
+
1029
+ prefix = f"{config.server.name}-"
1030
+ suffix = target.removeprefix(prefix) if target.startswith(prefix) else target
1031
+
1032
+ try:
1033
+ remove_from_manifest(args.config, suffix)
1034
+ except ValueError as e:
1035
+ print(f"Error: {e}", file=sys.stderr)
1036
+ sys.exit(1)
1037
+ print(f"Unregistered: {prefix}{suffix}")
1038
+
1039
+
1040
+ # -----------------------------------------------------------------------
1041
+ # Migrate
1042
+ # -----------------------------------------------------------------------
1043
+
1044
+
1045
+ def _cmd_migrate(args: argparse.Namespace) -> None:
1046
+ """Migrate from agents.yaml to server.yaml + per-directory culture.yaml."""
1047
+ legacy_path = Path(args.config)
1048
+ if not legacy_path.exists():
1049
+ print(f"No agents.yaml found at {legacy_path}", file=sys.stderr)
1050
+ sys.exit(1)
1051
+
1052
+ with open(legacy_path) as f:
1053
+ raw = yaml.safe_load(f) or {}
1054
+
1055
+ server_name = raw.get("server", {}).get("name", "culture")
1056
+ prefix = f"{server_name}-"
1057
+
1058
+ # Group agents by directory
1059
+ by_dir: dict[str, list[tuple[str, dict]]] = {}
1060
+ for agent_raw in raw.get("agents", []):
1061
+ nick = agent_raw.get("nick", "")
1062
+ suffix = nick.removeprefix(prefix) if nick.startswith(prefix) else nick
1063
+ directory = str(Path(agent_raw.get("directory", ".")).resolve())
1064
+ by_dir.setdefault(directory, []).append((suffix, agent_raw))
1065
+
1066
+ # Create culture.yaml in each directory
1067
+ manifest: dict[str, str] = {}
1068
+ for directory, entries in by_dir.items():
1069
+ agents = []
1070
+ for suffix, agent_raw in entries:
1071
+ backend = agent_raw.get("agent", "claude")
1072
+ known_fields = {
1073
+ "suffix": suffix,
1074
+ "backend": backend,
1075
+ "channels": agent_raw.get("channels", ["#general"]),
1076
+ "model": agent_raw.get("model", "claude-opus-4-6"),
1077
+ "thinking": agent_raw.get("thinking", "medium"),
1078
+ "system_prompt": agent_raw.get("system_prompt", ""),
1079
+ "tags": agent_raw.get("tags", []),
1080
+ "icon": agent_raw.get("icon"),
1081
+ "archived": agent_raw.get("archived", False),
1082
+ "archived_at": agent_raw.get("archived_at", ""),
1083
+ "archived_reason": agent_raw.get("archived_reason", ""),
1084
+ }
1085
+ skip_keys = set(known_fields.keys()) | {"nick", "directory", "agent"}
1086
+ extras = {k: v for k, v in agent_raw.items() if k not in skip_keys}
1087
+ agents.append(AgentConfig(**known_fields, extras=extras))
1088
+ manifest[suffix] = directory
1089
+
1090
+ dir_path = Path(directory)
1091
+ dir_path.mkdir(parents=True, exist_ok=True)
1092
+ save_culture_yaml(directory, agents)
1093
+ print(f" Created {directory}/culture.yaml ({len(agents)} agent(s))")
1094
+
1095
+ # Create server.yaml
1096
+ server = ServerConnConfig(**raw.get("server", {}))
1097
+ supervisor = SupervisorConfig(**raw.get("supervisor", {}))
1098
+ webhooks = WebhookConfig(**raw.get("webhooks", {}))
1099
+ server_config = ServerConfig(
1100
+ server=server,
1101
+ supervisor=supervisor,
1102
+ webhooks=webhooks,
1103
+ buffer_size=raw.get("buffer_size", 500),
1104
+ poll_interval=raw.get("poll_interval", 60),
1105
+ sleep_start=raw.get("sleep_start", "23:00"),
1106
+ sleep_end=raw.get("sleep_end", "08:00"),
1107
+ manifest=manifest,
1108
+ )
1109
+
1110
+ output_path = Path(args.output)
1111
+ save_server_config(str(output_path), server_config)
1112
+ print(f" Created {output_path}")
1113
+
1114
+ # Back up agents.yaml
1115
+ backup = legacy_path.with_suffix(".yaml.bak")
1116
+ legacy_path.rename(backup)
1117
+ print(f" Backed up {legacy_path} -> {backup}")
1118
+ print(f"\nMigration complete: {len(manifest)} agent(s) across {len(by_dir)} directory(ies)")
1119
+ print(f"\nAgent commands now use {output_path} by default.")
1120
+ print(f"Verify with: culture agent status")
@@ -4,7 +4,7 @@ import os
4
4
 
5
5
  from culture.bots.config import BOT_CONFIG_FILE # noqa: F401
6
6
 
7
- DEFAULT_CONFIG = os.path.expanduser("~/.culture/agents.yaml")
7
+ DEFAULT_CONFIG = os.path.expanduser("~/.culture/server.yaml")
8
8
  LOG_DIR = os.path.expanduser("~/.culture/logs")
9
9
 
10
10
  _CONFIG_HELP = "Config file path"
@@ -15,3 +15,6 @@ DEFAULT_CHANNEL = "#general"
15
15
  NO_AGENTS_MSG = "No agents configured"
16
16
  CULTURE_DIR = ".culture"
17
17
  AGENTS_YAML = "agents.yaml"
18
+
19
+ DEFAULT_SERVER_CONFIG = os.path.expanduser("~/.culture/server.yaml")
20
+ LEGACY_CONFIG = os.path.expanduser("~/.culture/agents.yaml")
@@ -0,0 +1,16 @@
1
+ suffix: harness-acp
2
+ backend: claude
3
+ model: claude-opus-4-6
4
+ channels:
5
+ - "#harness"
6
+ acp_command:
7
+ - opencode
8
+ - acp
9
+ system_prompt: |
10
+ You maintain the ACP agent backend in culture/clients/acp/.
11
+ Listen on #harness for propagation instructions from spark-harness.
12
+ Apply changes using assimilai, adapting for ACP (Cline, OpenCode, Kiro)
13
+ specifics (agent_runner.py, supervisor.py).
14
+ tags:
15
+ - harness
16
+ - acp
@@ -0,0 +1,13 @@
1
+ suffix: harness-claude
2
+ backend: claude
3
+ model: claude-opus-4-6
4
+ channels:
5
+ - "#harness"
6
+ system_prompt: |
7
+ You maintain the Claude agent backend in culture/clients/claude/.
8
+ Listen on #harness for propagation instructions from spark-harness.
9
+ Apply changes using assimilai, adapting for Claude SDK specifics
10
+ (agent_runner.py, supervisor.py).
11
+ tags:
12
+ - harness
13
+ - claude
@@ -0,0 +1,13 @@
1
+ suffix: harness-codex
2
+ backend: codex
3
+ model: gpt-5.4
4
+ channels:
5
+ - "#harness"
6
+ system_prompt: |
7
+ You maintain the Codex agent backend in culture/clients/codex/.
8
+ Listen on #harness for propagation instructions from spark-harness.
9
+ Apply changes using assimilai, adapting for Codex CLI specifics
10
+ (agent_runner.py, supervisor.py).
11
+ tags:
12
+ - harness
13
+ - codex
@@ -0,0 +1,13 @@
1
+ suffix: harness-copilot
2
+ backend: claude
3
+ model: claude-opus-4-6
4
+ channels:
5
+ - "#harness"
6
+ system_prompt: |
7
+ You maintain the Copilot agent backend in culture/clients/copilot/.
8
+ Listen on #harness for propagation instructions from spark-harness.
9
+ Apply changes using assimilai, adapting for Copilot Extensions API
10
+ specifics (agent_runner.py, supervisor.py).
11
+ tags:
12
+ - harness
13
+ - copilot