agentirc-cli 4.5.0__tar.gz → 4.5.2__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.0 → agentirc_cli-4.5.2}/CHANGELOG.md +19 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/PKG-INFO +1 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/bot.py +1 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/mesh.py +1 -4
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/server.py +2 -2
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/display.py +28 -9
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/ipc.py +1 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/mesh.py +1 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/daemon.py +1 -0
- agentirc_cli-4.5.2/culture/clients/acp/skill/SKILL.md +200 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/daemon.py +1 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/daemon.py +1 -0
- agentirc_cli-4.5.2/culture/clients/codex/skill/SKILL.md +200 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/daemon.py +1 -0
- agentirc_cli-4.5.2/culture/clients/copilot/skill/SKILL.md +200 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/learn_prompt.py +32 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/overview/collector.py +4 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/overview/model.py +1 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/overview/renderer_text.py +4 -2
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/skills/culture/SKILL.md +77 -2
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/agent-harness-spec.md +35 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/bots.md +7 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/cli.md +10 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/daemon.py +2 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/plugins/claude-code/skills/culture/SKILL.md +77 -2
- agentirc_cli-4.5.2/plugins/codex/skills/culture-irc/SKILL.md +200 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/pyproject.toml +1 -1
- agentirc_cli-4.5.2/tests/test_display.py +226 -0
- agentirc_cli-4.5.2/tests/test_learn_prompt.py +53 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_overview_collector.py +45 -1
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_overview_model.py +29 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_overview_renderer.py +39 -0
- agentirc_cli-4.5.2/tests/test_skill_docs.py +127 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/uv.lock +1 -1
- agentirc_cli-4.5.0/culture/clients/acp/skill/SKILL.md +0 -69
- agentirc_cli-4.5.0/culture/clients/codex/skill/SKILL.md +0 -69
- agentirc_cli-4.5.0/culture/clients/copilot/skill/SKILL.md +0 -69
- agentirc_cli-4.5.0/plugins/codex/skills/culture-irc/SKILL.md +0 -69
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.flake8 +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.gitignore +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.pr_agent.toml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/.pylintrc +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/CLAUDE.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/CNAME +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/Gemfile +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/Gemfile.lock +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/LICENSE +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/README.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/SECURITY.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/_config.yml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/_includes/head_custom.html +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/assets/images/apple-touch-icon.png +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/assets/images/favicon-16x16.png +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/assets/images/favicon-32x32.png +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/assets/images/favicon.ico +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/__main__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/aio.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/bot.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/agent.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/channel.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/constants.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/formatting.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/shared/process.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/cli/skills.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/culture.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/culture.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/culture.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/culture.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/app.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/commands.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/credentials.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/formatting.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/mesh_config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/observer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/overview/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/overview/renderer_web.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/overview/web/style.css +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/persistence.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/pidfile.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/commands.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/message.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/protocol/replies.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/__main__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/channel.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/history_store.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/ircd.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/remote_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/room_store.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/rooms_util.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/server_link.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/skill.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/skills/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/skills/history.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/skills/icon.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/skills/rooms.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/skills/threads.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/culture/server/thread_store.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/agents/decentralized-config.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/agent-client.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/harness-conformance.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/index.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/layer2-attention.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/layer3-skills.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/layer4-federation.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/layer5-agent-harness.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/server-architecture.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/architecture/threads.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/channel-polling.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/acp/system-prompt.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/culture-cli.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/getting-started.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/index.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/SECURITY.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/ci.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/docs-site.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/index.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/ops-tooling.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/overview.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/operations/publishing.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/persistent-history.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/reflective-development.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/rooms.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/server-rename.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-09-decentralized-agent-config.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-07-reflective-development-reframe-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-08-reflective-development-deepening-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-09-decentralized-agent-config-design.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/use-cases-index.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/docs/what-is-culture.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/favicon.ico +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/culture.yaml +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/sonar-project.properties +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/__init__.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/conftest.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_archive.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_bot.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_bot_config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_channel.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_connection.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_console_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_console_commands.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_console_connection.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_console_icons.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_console_integration.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_culture_config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_daemon.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_discovery.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_federation.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_history.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_http_listener.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_ipc.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_mention_alias.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_mention_target_cleanup.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_mentions.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_message.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_messaging.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_migrate_cli.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_modes.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_overview_web.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_persistence.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_pidfile.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_poll_loop.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_register_cli.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_rooms.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_skill_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_skills.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_socket_server.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_supervisor.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_template_engine.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_threads.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_wait_for_port.py +0 -0
- {agentirc_cli-4.5.0 → agentirc_cli-4.5.2}/tests/test_webhook.py +0 -0
|
@@ -4,6 +4,25 @@ 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.2] - 2026-04-09
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Agent status shows running when circuit breaker is open (#179)
|
|
13
|
+
- Agent status list does not distinguish paused/sleeping agents (#180)
|
|
14
|
+
- Learn prompt missing compact/clear commands and ask --timeout (#181)
|
|
15
|
+
- Non-Claude backend skill docs missing features - all-backends rule violation (#182)
|
|
16
|
+
- Admin skill and learn prompt missing many CLI commands (#183)
|
|
17
|
+
- Mesh overview shows archived bots without archive indication (#184)
|
|
18
|
+
|
|
19
|
+
## [4.5.1] - 2026-04-09
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Fix mesh overview crash after agent config migration (str has no attribute items)
|
|
25
|
+
|
|
7
26
|
## [4.5.0] - 2026-04-09
|
|
8
27
|
|
|
9
28
|
|
|
@@ -11,10 +11,7 @@ import subprocess
|
|
|
11
11
|
import sys
|
|
12
12
|
import time
|
|
13
13
|
|
|
14
|
-
from culture.
|
|
15
|
-
load_config,
|
|
16
|
-
load_config_or_default,
|
|
17
|
-
)
|
|
14
|
+
from culture.config import ServerConfig, load_config, load_config_or_default
|
|
18
15
|
|
|
19
16
|
from .shared.constants import AGENTS_YAML, CULTURE_DIR, DEFAULT_CONFIG
|
|
20
17
|
from .shared.mesh import build_server_start_cmd, generate_mesh_from_agents
|
|
@@ -159,7 +159,7 @@ def dispatch(args: argparse.Namespace) -> None:
|
|
|
159
159
|
|
|
160
160
|
# Also accept the configured server name
|
|
161
161
|
try:
|
|
162
|
-
from culture.
|
|
162
|
+
from culture.config import load_config_or_default
|
|
163
163
|
|
|
164
164
|
config = load_config_or_default(DEFAULT_CONFIG)
|
|
165
165
|
known_names.add(config.server.name)
|
|
@@ -314,7 +314,7 @@ def _verify_daemon_started(args: argparse.Namespace, pid: int) -> None:
|
|
|
314
314
|
|
|
315
315
|
def _check_server_archived(args: argparse.Namespace) -> None:
|
|
316
316
|
"""Exit if the server is archived."""
|
|
317
|
-
from culture.
|
|
317
|
+
from culture.config import load_config_or_default
|
|
318
318
|
|
|
319
319
|
config_path = getattr(args, "config", DEFAULT_CONFIG)
|
|
320
320
|
config = load_config_or_default(config_path)
|
|
@@ -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
|
+
```
|