agentirc-cli 4.5.1__tar.gz → 5.0.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.
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/CHANGELOG.md +32 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/PKG-INFO +1 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/mesh.py +14 -2
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/display.py +28 -9
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/daemon.py +1 -0
- agentirc_cli-5.0.0/culture/clients/acp/skill/SKILL.md +200 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/daemon.py +1 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/daemon.py +1 -0
- agentirc_cli-5.0.0/culture/clients/codex/skill/SKILL.md +200 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/daemon.py +1 -0
- agentirc_cli-5.0.0/culture/clients/copilot/skill/SKILL.md +200 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/learn_prompt.py +32 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/overview/collector.py +29 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/overview/model.py +2 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/overview/renderer_text.py +37 -18
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/overview/renderer_web.py +7 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/skills/culture/SKILL.md +77 -2
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/agent-harness-spec.md +35 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/layer5-agent-harness.md +3 -3
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/culture-cli.md +16 -16
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/getting-started.md +14 -14
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/bots.md +7 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/cli.md +86 -67
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/overview.md +8 -8
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/daemon.py +2 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/plugins/claude-code/skills/culture/SKILL.md +79 -4
- agentirc_cli-5.0.0/plugins/codex/skills/culture-irc/SKILL.md +200 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/pyproject.toml +1 -1
- agentirc_cli-5.0.0/tests/test_display.py +226 -0
- agentirc_cli-5.0.0/tests/test_learn_prompt.py +53 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_overview_collector.py +45 -1
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_overview_model.py +41 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_overview_renderer.py +109 -0
- agentirc_cli-5.0.0/tests/test_skill_docs.py +127 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/uv.lock +1 -1
- agentirc_cli-4.5.1/culture/clients/acp/skill/SKILL.md +0 -69
- agentirc_cli-4.5.1/culture/clients/codex/skill/SKILL.md +0 -69
- agentirc_cli-4.5.1/culture/clients/copilot/skill/SKILL.md +0 -69
- agentirc_cli-4.5.1/plugins/codex/skills/culture-irc/SKILL.md +0 -69
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.flake8 +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.gitignore +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.pr_agent.toml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/.pylintrc +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/CLAUDE.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/CNAME +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/Gemfile +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/Gemfile.lock +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/LICENSE +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/README.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/SECURITY.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/_config.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/_includes/head_custom.html +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/assets/images/apple-touch-icon.png +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/assets/images/favicon-16x16.png +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/assets/images/favicon-32x32.png +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/assets/images/favicon.ico +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/__main__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/aio.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/bot.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/agent.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/bot.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/channel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/constants.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/formatting.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/mesh.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/shared/process.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/cli/skills.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/app.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/commands.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/credentials.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/formatting.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/mesh_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/observer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/overview/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/overview/web/style.css +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/persistence.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/pidfile.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/commands.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/message.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/protocol/replies.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/__main__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/channel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/history_store.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/ircd.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/remote_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/room_store.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/rooms_util.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/server_link.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/skill.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/skills/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/skills/history.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/skills/icon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/skills/rooms.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/skills/threads.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/culture/server/thread_store.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/agents/decentralized-config.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/agent-client.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/harness-conformance.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/layer2-attention.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/layer3-skills.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/layer4-federation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/server-architecture.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/architecture/threads.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/channel-polling.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/acp/system-prompt.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/SECURITY.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/ci.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/docs-site.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/ops-tooling.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/operations/publishing.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/persistent-history.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/reflective-development.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/rooms.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/server-rename.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-09-decentralized-agent-config.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-07-reflective-development-reframe-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-08-reflective-development-deepening-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-09-decentralized-agent-config-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/use-cases-index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/docs/what-is-culture.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/favicon.ico +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/sonar-project.properties +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/conftest.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_archive.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_bot.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_bot_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_channel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_connection.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_console_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_console_commands.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_console_connection.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_console_icons.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_console_integration.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_culture_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_discovery.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_federation.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_history.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_http_listener.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_mention_alias.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_mention_target_cleanup.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_mentions.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_message.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_messaging.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_migrate_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_modes.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_overview_web.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_persistence.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_pidfile.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_poll_loop.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_register_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_rooms.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_skill_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_skills.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_template_engine.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_threads.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_wait_for_port.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-5.0.0}/tests/test_webhook.py +0 -0
|
@@ -4,6 +4,38 @@ 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
|
+
## [5.0.0] - 2026-04-09
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Mesh overview shows stopped/registered agents from server.yaml manifest (#178)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- CLI docs use correct noun-group syntax (culture agent create, culture channel read, etc.) (#186)
|
|
18
|
+
- Replaced non-existent culture send with culture channel message / culture agent message (#187)
|
|
19
|
+
- All doc references updated from agents.yaml to server.yaml (#188)
|
|
20
|
+
- Documented --mesh-config, --webhook-port, --data-dir server start flags (#189)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Mesh overview now includes agents that are registered but not running
|
|
26
|
+
|
|
27
|
+
## [4.5.2] - 2026-04-09
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- Agent status now reports the circuit-open state correctly instead of showing running (#179)
|
|
33
|
+
- Agent status list now distinguishes paused and sleeping agents correctly (#180)
|
|
34
|
+
- Learn prompt now includes compact/clear commands and ask --timeout (#181)
|
|
35
|
+
- Non-Claude backend skill docs now include the required features and comply with the all-backends rule (#182)
|
|
36
|
+
- Admin skill and learn prompt now include the missing CLI commands (#183)
|
|
37
|
+
- Mesh overview now indicates when bots are archived (#184)
|
|
38
|
+
|
|
7
39
|
## [4.5.1] - 2026-04-09
|
|
8
40
|
|
|
9
41
|
|
|
@@ -120,7 +120,13 @@ def dispatch(args: argparse.Namespace) -> None:
|
|
|
120
120
|
# -----------------------------------------------------------------------
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
def _collect_mesh_data(
|
|
123
|
+
def _collect_mesh_data(
|
|
124
|
+
host: str,
|
|
125
|
+
port: int,
|
|
126
|
+
server_name: str,
|
|
127
|
+
message_limit: int,
|
|
128
|
+
manifest_agents: list | None = None,
|
|
129
|
+
):
|
|
124
130
|
"""Collect mesh state, exiting with an error message on connection failure."""
|
|
125
131
|
from culture.overview.collector import collect_mesh_state
|
|
126
132
|
|
|
@@ -131,6 +137,7 @@ def _collect_mesh_data(host: str, port: int, server_name: str, message_limit: in
|
|
|
131
137
|
port=port,
|
|
132
138
|
server_name=server_name,
|
|
133
139
|
message_limit=message_limit,
|
|
140
|
+
manifest_agents=manifest_agents,
|
|
134
141
|
)
|
|
135
142
|
)
|
|
136
143
|
except ConnectionRefusedError:
|
|
@@ -169,11 +176,16 @@ def _cmd_overview(args: argparse.Namespace) -> None:
|
|
|
169
176
|
agent_filter=args.agent,
|
|
170
177
|
message_limit=message_limit,
|
|
171
178
|
refresh_interval=refresh_interval,
|
|
179
|
+
manifest_agents=config.agents,
|
|
172
180
|
)
|
|
173
181
|
return
|
|
174
182
|
|
|
175
183
|
mesh = _collect_mesh_data(
|
|
176
|
-
config.server.host,
|
|
184
|
+
config.server.host,
|
|
185
|
+
config.server.port,
|
|
186
|
+
config.server.name,
|
|
187
|
+
message_limit,
|
|
188
|
+
manifest_agents=config.agents,
|
|
177
189
|
)
|
|
178
190
|
output = render_text(
|
|
179
191
|
mesh,
|
|
@@ -33,20 +33,31 @@ def print_agent_detail(agent, config_path: str, args: argparse.Namespace) -> Non
|
|
|
33
33
|
"""Print detailed status for a single agent, including live IPC activity query."""
|
|
34
34
|
status, pid = agent_process_status(agent)
|
|
35
35
|
print(agent.nick)
|
|
36
|
-
print(f" Status: {status}")
|
|
37
|
-
print(f" PID: {pid or '-'}")
|
|
38
36
|
|
|
39
37
|
if status == "running":
|
|
40
38
|
query = getattr(args, "full", False)
|
|
41
39
|
resp = asyncio.run(ipc_request(agent_socket_path(agent.nick), "status", query=query))
|
|
42
40
|
if resp and resp.get("ok"):
|
|
43
41
|
data = resp.get("data", {})
|
|
42
|
+
if data.get("circuit_open"):
|
|
43
|
+
status = "circuit-open"
|
|
44
|
+
elif data.get("paused"):
|
|
45
|
+
status = "paused"
|
|
46
|
+
print(f" Status: {status}")
|
|
47
|
+
print(f" PID: {pid or '-'}")
|
|
44
48
|
print(f" Activity: {data.get('description', 'nothing')}")
|
|
45
49
|
print(f" Turns: {data.get('turn_count', 0)}")
|
|
46
50
|
print(f" Paused: {'yes' if data.get('paused') else 'no'}")
|
|
51
|
+
print(
|
|
52
|
+
f" Circuit: {'OPEN (not restarting)' if data.get('circuit_open') else 'closed'}"
|
|
53
|
+
)
|
|
47
54
|
else:
|
|
55
|
+
print(f" Status: {status}")
|
|
56
|
+
print(f" PID: {pid or '-'}")
|
|
48
57
|
print(" Activity: unknown (daemon may need restart)")
|
|
49
58
|
else:
|
|
59
|
+
print(f" Status: {status}")
|
|
60
|
+
print(f" PID: {pid or '-'}")
|
|
50
61
|
print(" Activity: -")
|
|
51
62
|
|
|
52
63
|
channels = agent.channels if isinstance(agent.channels, list) else []
|
|
@@ -68,12 +79,12 @@ def _format_agent_status(base_status: str, archived: bool, show_archived_marker:
|
|
|
68
79
|
return base_status
|
|
69
80
|
|
|
70
81
|
|
|
71
|
-
def
|
|
72
|
-
"""Fetch
|
|
82
|
+
def _fetch_ipc_data(agent) -> dict | None:
|
|
83
|
+
"""Fetch full IPC status data from a running agent."""
|
|
73
84
|
resp = asyncio.run(ipc_request(agent_socket_path(agent.nick), "status"))
|
|
74
85
|
if resp and resp.get("ok"):
|
|
75
|
-
return resp.get("data", {})
|
|
76
|
-
return
|
|
86
|
+
return resp.get("data", {})
|
|
87
|
+
return None
|
|
77
88
|
|
|
78
89
|
|
|
79
90
|
def print_agents_overview(
|
|
@@ -89,12 +100,20 @@ def print_agents_overview(
|
|
|
89
100
|
|
|
90
101
|
for agent in agents:
|
|
91
102
|
base_status, pid = agent_process_status(agent)
|
|
103
|
+
activity = "-"
|
|
104
|
+
# Enrich status from IPC for running agents
|
|
105
|
+
if base_status == "running":
|
|
106
|
+
ipc_data = _fetch_ipc_data(agent)
|
|
107
|
+
if ipc_data:
|
|
108
|
+
if ipc_data.get("circuit_open"):
|
|
109
|
+
base_status = "circuit-open"
|
|
110
|
+
elif ipc_data.get("paused"):
|
|
111
|
+
base_status = "paused"
|
|
112
|
+
if show_activity:
|
|
113
|
+
activity = ipc_data.get("description", "nothing")
|
|
92
114
|
status = _format_agent_status(
|
|
93
115
|
base_status, getattr(agent, "archived", False), show_archived_marker
|
|
94
116
|
)
|
|
95
|
-
activity = (
|
|
96
|
-
_fetch_agent_activity(agent) if show_activity and base_status == "running" else "-"
|
|
97
|
-
)
|
|
98
117
|
if show_activity:
|
|
99
118
|
print(f"{agent.nick:<30} {status:<12} {str(pid or '-'):<10} {activity}")
|
|
100
119
|
else:
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: culture-irc
|
|
3
|
+
description: >
|
|
4
|
+
Communicate over IRC on the Culture network. Use when the user asks to
|
|
5
|
+
read messages, send messages, check who's online, join/part channels, or
|
|
6
|
+
interact with other agents on the IRC mesh.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# IRC Skill for Culture
|
|
10
|
+
|
|
11
|
+
This skill lets you communicate over IRC through the culture daemon.
|
|
12
|
+
The daemon runs as a background process and maintains a persistent IRC connection.
|
|
13
|
+
|
|
14
|
+
## Setup
|
|
15
|
+
|
|
16
|
+
Set the `CULTURE_NICK` environment variable to your agent's nick (e.g. `spark-cline`).
|
|
17
|
+
The skill resolves the socket path automatically:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
$XDG_RUNTIME_DIR/culture-<nick>.sock (falls back to /tmp/culture-<nick>.sock)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Invocation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
python3 -m culture.clients.acp.skill.irc_client <subcommand> [args...]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
All commands print a JSON result to stdout. Whispers from the daemon are printed
|
|
30
|
+
to stderr as `[whisper:<type>] <message>`.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Commands
|
|
35
|
+
|
|
36
|
+
### send — post a message to a channel
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
python3 -m culture.clients.acp.skill.irc_client send <channel> <message>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
python3 -m culture.clients.acp.skill.irc_client send "#general" "hello from ACP"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Output:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{"type": "response", "id": "...", "ok": true}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### read — read recent messages from a channel
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
python3 -m culture.clients.acp.skill.irc_client read <channel> [limit]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`limit` defaults to 50. Example:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python3 -m culture.clients.acp.skill.irc_client read "#general" 20
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Output:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"type": "response",
|
|
73
|
+
"id": "...",
|
|
74
|
+
"ok": true,
|
|
75
|
+
"data": {
|
|
76
|
+
"messages": [
|
|
77
|
+
{"nick": "ori", "text": "hello", "timestamp": 1742000000.0}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### ask — send a question and trigger a webhook alert
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
python3 -m culture.clients.acp.skill.irc_client ask <channel> [--timeout N] <question>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`--timeout` is in seconds (default 30). Example:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python3 -m culture.clients.acp.skill.irc_client ask "#general" --timeout 60 "What is the status of the deploy?"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### join — join a channel
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
python3 -m culture.clients.acp.skill.irc_client join <channel>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### part — leave a channel
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
python3 -m culture.clients.acp.skill.irc_client part <channel>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### channels — list joined channels
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
python3 -m culture.clients.acp.skill.irc_client channels
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Output:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"type": "response",
|
|
126
|
+
"id": "...",
|
|
127
|
+
"ok": true,
|
|
128
|
+
"data": {"channels": ["#general", "#ops"]}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### who — send a WHO query
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
python3 -m culture.clients.acp.skill.irc_client who <target>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`target` can be a channel or a nick.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### compact — compact the agent's context window
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
python3 -m culture.clients.acp.skill.irc_client compact
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Sends `/compact` to the agent session via the daemon's prompt queue.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### clear — clear the agent's context window
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
python3 -m culture.clients.acp.skill.irc_client clear
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Sends `/clear` to the agent session via the daemon's prompt queue.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Whispers
|
|
165
|
+
|
|
166
|
+
The daemon may send unsolicited **whisper** messages to guide the agent.
|
|
167
|
+
These arrive on stderr as:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
[whisper:CORRECTION] Stop retrying — the issue is upstream.
|
|
171
|
+
[whisper:REMINDER] You have been working for 30 minutes.
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Always read stderr after calling this skill.
|
|
175
|
+
|
|
176
|
+
## Python API
|
|
177
|
+
|
|
178
|
+
For use from Python (e.g. tests or other scripts):
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
from culture.clients.acp.skill.irc_client import SkillClient
|
|
182
|
+
|
|
183
|
+
client = SkillClient("/tmp/culture-spark-cline.sock")
|
|
184
|
+
await client.connect()
|
|
185
|
+
|
|
186
|
+
result = await client.irc_send("#general", "hello")
|
|
187
|
+
result = await client.irc_read("#general", limit=20)
|
|
188
|
+
result = await client.irc_ask("#general", "what is happening?", timeout=30)
|
|
189
|
+
result = await client.irc_join("#ops")
|
|
190
|
+
result = await client.irc_part("#ops")
|
|
191
|
+
result = await client.irc_channels()
|
|
192
|
+
result = await client.irc_who("#general")
|
|
193
|
+
result = await client.compact()
|
|
194
|
+
result = await client.clear()
|
|
195
|
+
|
|
196
|
+
# Collect whispers queued during the session
|
|
197
|
+
whispers = client.drain_whispers()
|
|
198
|
+
|
|
199
|
+
await client.close()
|
|
200
|
+
```
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: culture-irc
|
|
3
|
+
description: >
|
|
4
|
+
Communicate over IRC on the Culture network. Use when the user asks to
|
|
5
|
+
read messages, send messages, check who's online, join/part channels, or
|
|
6
|
+
interact with other agents on the IRC mesh.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# IRC Skill for Culture
|
|
10
|
+
|
|
11
|
+
This skill lets you communicate over IRC through the culture daemon.
|
|
12
|
+
The daemon runs as a background process and maintains a persistent IRC connection.
|
|
13
|
+
|
|
14
|
+
## Setup
|
|
15
|
+
|
|
16
|
+
Set the `CULTURE_NICK` environment variable to your agent's nick (e.g. `spark-codex`).
|
|
17
|
+
The skill resolves the socket path automatically:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
$XDG_RUNTIME_DIR/culture-<nick>.sock (falls back to /tmp/culture-<nick>.sock)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Invocation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
python3 -m culture.clients.codex.skill.irc_client <subcommand> [args...]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
All commands print a JSON result to stdout. Whispers from the daemon are printed
|
|
30
|
+
to stderr as `[whisper:<type>] <message>`.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Commands
|
|
35
|
+
|
|
36
|
+
### send — post a message to a channel
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
python3 -m culture.clients.codex.skill.irc_client send <channel> <message>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
python3 -m culture.clients.codex.skill.irc_client send "#general" "hello from Codex"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Output:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{"type": "response", "id": "...", "ok": true}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### read — read recent messages from a channel
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
python3 -m culture.clients.codex.skill.irc_client read <channel> [limit]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`limit` defaults to 50. Example:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
python3 -m culture.clients.codex.skill.irc_client read "#general" 20
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Output:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"type": "response",
|
|
73
|
+
"id": "...",
|
|
74
|
+
"ok": true,
|
|
75
|
+
"data": {
|
|
76
|
+
"messages": [
|
|
77
|
+
{"nick": "ori", "text": "hello", "timestamp": 1742000000.0}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### ask — send a question and trigger a webhook alert
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
python3 -m culture.clients.codex.skill.irc_client ask <channel> [--timeout N] <question>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`--timeout` is in seconds (default 30). Example:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python3 -m culture.clients.codex.skill.irc_client ask "#general" --timeout 60 "What is the status of the deploy?"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### join — join a channel
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
python3 -m culture.clients.codex.skill.irc_client join <channel>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### part — leave a channel
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
python3 -m culture.clients.codex.skill.irc_client part <channel>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### channels — list joined channels
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
python3 -m culture.clients.codex.skill.irc_client channels
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Output:
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"type": "response",
|
|
126
|
+
"id": "...",
|
|
127
|
+
"ok": true,
|
|
128
|
+
"data": {"channels": ["#general", "#ops"]}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### who — send a WHO query
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
python3 -m culture.clients.codex.skill.irc_client who <target>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`target` can be a channel or a nick.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### compact — compact the agent's context window
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
python3 -m culture.clients.codex.skill.irc_client compact
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Sends `/compact` to the agent session via the daemon's prompt queue.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### clear — clear the agent's context window
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
python3 -m culture.clients.codex.skill.irc_client clear
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Sends `/clear` to the agent session via the daemon's prompt queue.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Whispers
|
|
165
|
+
|
|
166
|
+
The daemon may send unsolicited **whisper** messages to guide the agent.
|
|
167
|
+
These arrive on stderr as:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
[whisper:CORRECTION] Stop retrying — the issue is upstream.
|
|
171
|
+
[whisper:REMINDER] You have been working for 30 minutes.
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Always read stderr after calling this skill.
|
|
175
|
+
|
|
176
|
+
## Python API
|
|
177
|
+
|
|
178
|
+
For use from Python (e.g. tests or other scripts):
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
from culture.clients.codex.skill.irc_client import SkillClient
|
|
182
|
+
|
|
183
|
+
client = SkillClient("/tmp/culture-spark-codex.sock")
|
|
184
|
+
await client.connect()
|
|
185
|
+
|
|
186
|
+
result = await client.irc_send("#general", "hello")
|
|
187
|
+
result = await client.irc_read("#general", limit=20)
|
|
188
|
+
result = await client.irc_ask("#general", "what is happening?", timeout=30)
|
|
189
|
+
result = await client.irc_join("#ops")
|
|
190
|
+
result = await client.irc_part("#ops")
|
|
191
|
+
result = await client.irc_channels()
|
|
192
|
+
result = await client.irc_who("#general")
|
|
193
|
+
result = await client.compact()
|
|
194
|
+
result = await client.clear()
|
|
195
|
+
|
|
196
|
+
# Collect whispers queued during the session
|
|
197
|
+
whispers = client.drain_whispers()
|
|
198
|
+
|
|
199
|
+
await client.close()
|
|
200
|
+
```
|