agentirc-cli 4.5.1__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.1 → agentirc_cli-4.5.2}/CHANGELOG.md +12 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/PKG-INFO +1 -1
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/display.py +28 -9
- {agentirc_cli-4.5.1 → 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.1 → agentirc_cli-4.5.2}/culture/clients/claude/daemon.py +1 -0
- {agentirc_cli-4.5.1 → 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.1 → 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.1 → agentirc_cli-4.5.2}/culture/learn_prompt.py +32 -1
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/overview/collector.py +4 -1
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/overview/model.py +1 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/overview/renderer_text.py +4 -2
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/skills/culture/SKILL.md +77 -2
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/agent-harness-spec.md +35 -1
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/bots.md +7 -1
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/cli.md +10 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/daemon.py +2 -0
- {agentirc_cli-4.5.1 → 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.1 → 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.1 → agentirc_cli-4.5.2}/tests/test_overview_collector.py +45 -1
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_overview_model.py +29 -0
- {agentirc_cli-4.5.1 → 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.1 → agentirc_cli-4.5.2}/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-4.5.2}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.flake8 +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.gitignore +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.pr_agent.toml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/.pylintrc +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/CLAUDE.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/CNAME +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/Gemfile +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/Gemfile.lock +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/LICENSE +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/README.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/SECURITY.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/_config.yml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/_includes/head_custom.html +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/assets/images/apple-touch-icon.png +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/assets/images/favicon-16x16.png +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/assets/images/favicon-32x32.png +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/assets/images/favicon.ico +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/__main__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/aio.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/bot.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/agent.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/bot.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/channel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/mesh.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/constants.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/formatting.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/mesh.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/shared/process.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/cli/skills.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/app.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/commands.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/credentials.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/formatting.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/mesh_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/observer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/overview/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/overview/renderer_web.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/overview/web/style.css +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/persistence.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/pidfile.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/commands.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/message.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/protocol/replies.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/__main__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/channel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/history_store.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/ircd.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/remote_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/room_store.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/rooms_util.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/server_link.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/skill.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/skills/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/skills/history.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/skills/icon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/skills/rooms.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/skills/threads.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/culture/server/thread_store.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/agents/decentralized-config.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/agent-client.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/harness-conformance.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/layer2-attention.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/layer3-skills.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/layer4-federation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/layer5-agent-harness.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/server-architecture.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/architecture/threads.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/channel-polling.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/acp/system-prompt.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/culture-cli.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/getting-started.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/SECURITY.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/ci.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/docs-site.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/ops-tooling.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/operations/publishing.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/persistent-history.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/reflective-development.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/rooms.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/server-rename.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/plans/2026-04-09-decentralized-agent-config.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-07-reflective-development-reframe-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-08-reflective-development-deepening-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/superpowers/specs/2026-04-09-decentralized-agent-config-design.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/use-cases-index.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/docs/what-is-culture.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/favicon.ico +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/culture.yaml +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/sonar-project.properties +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/__init__.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/conftest.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_archive.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_bot.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_bot_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_channel.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_connection.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_console_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_console_commands.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_console_connection.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_console_icons.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_console_integration.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_culture_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_daemon.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_discovery.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_federation.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_history.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_http_listener.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_ipc.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_mention_alias.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_mention_target_cleanup.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_mentions.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_message.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_messaging.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_migrate_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_modes.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_overview_web.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_persistence.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_pidfile.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_poll_loop.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_register_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_rooms.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_skill_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_skills.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_socket_server.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_supervisor.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_template_engine.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_threads.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_wait_for_port.py +0 -0
- {agentirc_cli-4.5.1 → agentirc_cli-4.5.2}/tests/test_webhook.py +0 -0
|
@@ -4,6 +4,18 @@ 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
|
+
|
|
7
19
|
## [4.5.1] - 2026-04-09
|
|
8
20
|
|
|
9
21
|
|
|
@@ -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
|
+
```
|