agentirc-cli 7.3.0__tar.gz → 7.4.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-7.3.0 → agentirc_cli-7.4.0}/CHANGELOG.md +8 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/PKG-INFO +2 -1
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_config.culture.yml +3 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_data/sites.yml +1 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_includes/head_custom.html +1 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/__init__.py +16 -3
- agentirc_cli-7.4.0/culture/cli/agex.py +101 -0
- agentirc_cli-7.4.0/culture/cli/introspect.py +166 -0
- agentirc_cli-7.4.0/docs/reference/cli/agex.md +103 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/cli/index.md +10 -0
- agentirc_cli-7.4.0/docs/superpowers/plans/2026-04-22-agex-integration.md +999 -0
- agentirc_cli-7.4.0/docs/superpowers/specs/2026-04-22-agex-integration-design.md +258 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/pyproject.toml +2 -1
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/sitemap-main.html +1 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/sitemap.html +1 -0
- agentirc_cli-7.4.0/tests/test_cli_agex.py +47 -0
- agentirc_cli-7.4.0/tests/test_cli_introspect.py +119 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/uv.lock +31 -1
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.claude/agents/doc-test-alignment.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.flake8 +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.github/workflows/docs-check.yml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.gitignore +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.pr_agent.toml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/.pylintrc +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/CLAUDE.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/Gemfile +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/Gemfile.lock +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/LICENSE +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/README.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/SECURITY.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_config.base.yml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_sass/color_schemes/dark-terminal.scss +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/IMG_3183.png +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/apple-touch-icon.png +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/favicon-16x16.png +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/favicon-32x32.png +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/favicon.ico +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/og-agentirc.png +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/assets/images/og-culture.png +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/__main__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/CLAUDE.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/__main__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/channel.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/docs/agentirc-architecture.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/docs/agentirc-features.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/docs/agentirc-skill.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/docs/agentirc.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/events.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/history_store.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/ircd.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/remote_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/room_store.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/rooms_util.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/server_link.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/skill.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/skills/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/skills/history.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/skills/icon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/skills/rooms.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/skills/threads.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/agentirc/thread_store.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/aio.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/bot.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/filter_dsl.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/system/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/system/welcome/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/system/welcome/bot.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/system/welcome/handler.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/agent.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/bot.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/channel.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/mesh.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/constants.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/display.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/formatting.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/mesh.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/shared/process.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/cli/skills.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/culture.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/skill/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/culture.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/culture.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/skill/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/culture.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/skill/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/app.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/commands.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/status.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/constants.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/credentials.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/formatting.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/learn_prompt.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/mesh_config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/observer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/overview/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/overview/collector.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/overview/model.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/overview/renderer_text.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/overview/renderer_web.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/overview/web/style.css +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/persistence.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/pidfile.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/commands.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/events.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/message.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/protocol/replies.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/culture/skills/culture/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/README.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/agentirc/architecture-overview.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/agentirc/bots.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/agentirc/events.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/agentirc/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/agentirc/why-agentirc.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/agent-lifecycle.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/choose-a-harness.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/features.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/mental-model.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/operate.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/patterns.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/quickstart.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/reflective-development.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/vision-patterns-index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/vision.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/culture/what-is-culture.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/architecture/agent-harness-spec.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/architecture/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/architecture/layers.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/architecture/threads.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/cli/commands.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/console.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/harnesses/acp.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/harnesses/claude.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/harnesses/codex.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/harnesses/copilot.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/harnesses/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/server/architecture.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/server/config.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/server/deployment.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/server/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/reference/server/security.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/resources/positioning.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/concepts/federation.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/concepts/harnesses.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/concepts/humans-and-agents.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/concepts/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/concepts/persistence.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/concepts/rooms.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/demos/magic-demo.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/guides/first-session.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/guides/index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/guides/join-as-human.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/guides/local-setup.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/guides/multi-machine.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/shared/use-cases-index.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-09-decentralized-agent-config.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-12-console-enhancements.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-15-mesh-events.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/plans/2026-04-18-culture-dev-positioning.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-07-reflective-development-reframe-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-08-reflective-development-deepening-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-09-decentralized-agent-config-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-12-console-enhancements-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-15-mesh-events-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-17-sites-repositioning-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/docs/superpowers/specs/2026-04-18-culture-dev-positioning-design.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/favicon.ico +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/culture.yaml +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/plugins/claude-code/skills/culture/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/plugins/codex/skills/culture-irc/SKILL.md +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/robots.txt +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/sitemap-agentirc.html +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/sonar-project.properties +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/__init__.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/conftest.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_archive.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_bot.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_bot_config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_bot_config_fires_event_toplevel.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_channel.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_channel_cli.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_connection.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_chat_markdown.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_commands.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_connection.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_fixes_224_227.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_icons.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_integration.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_console_status.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_credentials.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_culture_config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_daemon.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_discovery.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_display.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_basic.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_bot_chain.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_bot_trigger.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_cap_fallback.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_catalog.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_federation.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_history.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_lifecycle.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_events_reserved_nick.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_federation.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_filter_dsl.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_history.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_http_listener.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_ipc.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_irc_transport_tags.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_learn_prompt.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_manifest_config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_mention_alias.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_mention_target_cleanup.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_mention_warning.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_mentions.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_mesh_readiness.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_message.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_message_tags.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_messaging.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_migrate_cli.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_modes.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_overview_collector.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_overview_model.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_overview_renderer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_overview_web.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_persistence.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_persistence_timeout.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_pidfile.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_poll_loop.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_register_cli.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_rooms.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_skill_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_skill_docs.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_skills.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_socket_server.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_supervisor.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_template_engine.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_threads.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_wait_for_port.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_webhook.py +0 -0
- {agentirc_cli-7.3.0 → agentirc_cli-7.4.0}/tests/test_welcome_bot.py +0 -0
|
@@ -4,6 +4,14 @@ 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
|
+
## [7.4.0] - 2026-04-22
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- culture agex passthrough to the standalone agex CLI (new subcommand embedding agex via typer)
|
|
12
|
+
- Universal verbs culture explain, culture overview, culture learn at the CLI root, with a per-topic handler registry (culture/cli/introspect.py)
|
|
13
|
+
- agex-cli>=0.13,<1.0 as a library dependency
|
|
14
|
+
|
|
7
15
|
## [7.3.0] - 2026-04-21
|
|
8
16
|
|
|
9
17
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentirc-cli
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.4.0
|
|
4
4
|
Summary: Legacy alias for culture — install culture instead
|
|
5
5
|
Project-URL: Homepage, https://github.com/OriNachum/culture
|
|
6
6
|
Author: Ori Nachum
|
|
@@ -12,6 +12,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Topic :: Communications :: Chat :: Internet Relay Chat
|
|
14
14
|
Requires-Python: >=3.12
|
|
15
|
+
Requires-Dist: agex-cli<1.0,>=0.13
|
|
15
16
|
Requires-Dist: aiohttp>=3.9
|
|
16
17
|
Requires-Dist: anthropic>=0.40
|
|
17
18
|
Requires-Dist: claude-agent-sdk>=0.1
|
|
@@ -36,6 +36,8 @@ aux_links:
|
|
|
36
36
|
- "/agentirc/"
|
|
37
37
|
"Agent Experience":
|
|
38
38
|
- "https://culture.dev/agex/"
|
|
39
|
+
"Citation CLI":
|
|
40
|
+
- "/citation-cli/"
|
|
39
41
|
"GitHub":
|
|
40
42
|
- "https://github.com/OriNachum/culture"
|
|
41
43
|
|
|
@@ -45,4 +47,5 @@ footer_content: >-
|
|
|
45
47
|
Culture — human-agent collaboration built around
|
|
46
48
|
<a href="/agentirc/">AgentIRC</a>.
|
|
47
49
|
Agent Experience via <a href="https://culture.dev/agex/">agex-cli</a>.
|
|
50
|
+
Code distribution via <a href="/citation-cli/">Citation CLI</a>.
|
|
48
51
|
Source on <a href="https://github.com/OriNachum/culture">GitHub</a>.
|
|
@@ -4,3 +4,4 @@
|
|
|
4
4
|
<link rel="icon" type="image/png" sizes="16x16" href="{{ '/assets/images/favicon-16x16.png' | relative_url }}">
|
|
5
5
|
<link rel="apple-touch-icon" sizes="180x180" href="{{ '/assets/images/apple-touch-icon.png' | relative_url }}">
|
|
6
6
|
<link rel="related" href="{{ site.data.sites.agex }}" title="Agent Experience">
|
|
7
|
+
<link rel="related" href="{{ site.data.sites.citation_cli }}" title="Citation CLI">
|
|
@@ -7,6 +7,12 @@ Commands are organized into noun-based groups:
|
|
|
7
7
|
culture channel {list,read,message,who}
|
|
8
8
|
culture bot {create,start,stop,list,inspect,archive,unarchive}
|
|
9
9
|
culture skills {install}
|
|
10
|
+
culture agex {...full passthrough to the standalone `agex` CLI...}
|
|
11
|
+
|
|
12
|
+
Universal verbs (available at the root):
|
|
13
|
+
culture explain [topic] full description of topic (default: culture)
|
|
14
|
+
culture overview [topic] shallow summary
|
|
15
|
+
culture learn [topic] agent-facing onboarding prompt
|
|
10
16
|
"""
|
|
11
17
|
|
|
12
18
|
from __future__ import annotations
|
|
@@ -16,9 +22,16 @@ import logging
|
|
|
16
22
|
import sys
|
|
17
23
|
|
|
18
24
|
from culture import __version__
|
|
19
|
-
from culture.cli import agent, bot, channel, mesh, server, skills
|
|
25
|
+
from culture.cli import agent, agex, bot, channel, introspect, mesh, server, skills
|
|
26
|
+
|
|
27
|
+
GROUPS = [agent, server, mesh, channel, bot, skills, agex, introspect]
|
|
28
|
+
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
def _names_of(group) -> set[str]:
|
|
31
|
+
names = getattr(group, "NAMES", None)
|
|
32
|
+
if names is not None:
|
|
33
|
+
return set(names)
|
|
34
|
+
return {group.NAME}
|
|
22
35
|
|
|
23
36
|
|
|
24
37
|
def _build_parser() -> argparse.ArgumentParser:
|
|
@@ -48,7 +61,7 @@ def main() -> None:
|
|
|
48
61
|
|
|
49
62
|
try:
|
|
50
63
|
for group in GROUPS:
|
|
51
|
-
if args.command
|
|
64
|
+
if args.command in _names_of(group):
|
|
52
65
|
group.dispatch(args)
|
|
53
66
|
return
|
|
54
67
|
parser.print_help()
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""`culture agex` — passthrough to the standalone agex CLI.
|
|
2
|
+
|
|
3
|
+
Also registers universal-verb handlers for the ``agex`` topic so
|
|
4
|
+
``culture explain agex`` / ``culture overview agex`` / ``culture learn agex``
|
|
5
|
+
route through culture's universal-verb path.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import argparse
|
|
11
|
+
import contextlib
|
|
12
|
+
import io
|
|
13
|
+
import sys
|
|
14
|
+
|
|
15
|
+
from culture.cli import introspect
|
|
16
|
+
|
|
17
|
+
NAME = "agex"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _run_agex(argv: list[str]) -> None:
|
|
21
|
+
"""Invoke agex's typer app in-process.
|
|
22
|
+
|
|
23
|
+
Uses standalone_mode=True (the typer default) so typer's own --help,
|
|
24
|
+
--version, and Exit handling work unchanged. Typer calls ``sys.exit``
|
|
25
|
+
when done, raising ``SystemExit``; this function lets that propagate
|
|
26
|
+
so the caller (the ``culture agex`` passthrough) exits with the code
|
|
27
|
+
the user expects. Callers that need to capture output and translate
|
|
28
|
+
the exit into a return value should use :func:`_capture_agex` instead.
|
|
29
|
+
"""
|
|
30
|
+
try:
|
|
31
|
+
from agent_experience.cli import app
|
|
32
|
+
except ImportError as exc: # pragma: no cover — declared dep
|
|
33
|
+
print(f"agex-cli is not installed: {exc}", file=sys.stderr)
|
|
34
|
+
sys.exit(2)
|
|
35
|
+
app(args=argv)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _capture_agex(argv: list[str]) -> tuple[str, int]:
|
|
39
|
+
"""Run agex with stdout + stderr captured, translating SystemExit.
|
|
40
|
+
|
|
41
|
+
The universal-verb handlers need ``(output, exit_code)`` rather than a
|
|
42
|
+
process-level exit, so we deliberately catch ``SystemExit`` here and
|
|
43
|
+
translate it into a return value. The :func:`_run_agex` variant is for
|
|
44
|
+
the passthrough path where the exit must propagate.
|
|
45
|
+
"""
|
|
46
|
+
buf = io.StringIO()
|
|
47
|
+
try:
|
|
48
|
+
with contextlib.redirect_stdout(buf), contextlib.redirect_stderr(buf):
|
|
49
|
+
_run_agex(argv)
|
|
50
|
+
except SystemExit as exc: # NOSONAR S5754 — see docstring
|
|
51
|
+
code = exc.code
|
|
52
|
+
if code is None:
|
|
53
|
+
return buf.getvalue(), 0
|
|
54
|
+
if isinstance(code, int):
|
|
55
|
+
return buf.getvalue(), code
|
|
56
|
+
return buf.getvalue() + str(code), 1
|
|
57
|
+
return buf.getvalue(), 0
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# --- universal-verb topic handlers for ``agex`` ---------------------------
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _agex_explain(_topic: str | None) -> tuple[str, int]:
|
|
64
|
+
return _capture_agex(["explain", "agex"])
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _agex_overview(_topic: str | None) -> tuple[str, int]:
|
|
68
|
+
return _capture_agex(["overview", "--agent", "claude-code"])
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _agex_learn(_topic: str | None) -> tuple[str, int]:
|
|
72
|
+
return _capture_agex(["learn", "--agent", "claude-code"])
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
introspect.register_topic(
|
|
76
|
+
"agex",
|
|
77
|
+
explain=_agex_explain,
|
|
78
|
+
overview=_agex_overview,
|
|
79
|
+
learn=_agex_learn,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# --- CLI group protocol ---------------------------------------------------
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def register(subparsers: "argparse._SubParsersAction") -> None:
|
|
87
|
+
# prefix_chars=chr(0) means the agex subparser has no recognized flag
|
|
88
|
+
# prefix character, so every token (including --help, --version) is
|
|
89
|
+
# treated as positional and captured in agex_args for typer to handle.
|
|
90
|
+
p = subparsers.add_parser(
|
|
91
|
+
NAME,
|
|
92
|
+
help="Run agex (agent-experience CLI) via passthrough",
|
|
93
|
+
add_help=False,
|
|
94
|
+
prefix_chars=chr(0),
|
|
95
|
+
)
|
|
96
|
+
p.add_argument("agex_args", nargs=argparse.REMAINDER, help="Arguments passed to agex")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def dispatch(args: argparse.Namespace) -> None:
|
|
100
|
+
rest = list(getattr(args, "agex_args", []) or [])
|
|
101
|
+
_run_agex(rest)
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""Universal introspection verb dispatcher.
|
|
2
|
+
|
|
3
|
+
Registers three top-level verbs (``explain``, ``overview``, ``learn``)
|
|
4
|
+
on the culture CLI and dispatches each to a per-topic handler.
|
|
5
|
+
|
|
6
|
+
The module conforms to the extended culture CLI group protocol:
|
|
7
|
+
exports ``NAMES`` (frozenset) instead of the singular ``NAME``.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import logging
|
|
14
|
+
from typing import Callable
|
|
15
|
+
|
|
16
|
+
_log = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
Handler = Callable[[str | None], tuple[str, int]]
|
|
19
|
+
|
|
20
|
+
NAMES = frozenset({"explain", "overview", "learn"})
|
|
21
|
+
|
|
22
|
+
_explain: dict[str, Handler] = {}
|
|
23
|
+
_overview: dict[str, Handler] = {}
|
|
24
|
+
_learn: dict[str, Handler] = {}
|
|
25
|
+
|
|
26
|
+
_REGISTRIES: dict[str, dict[str, Handler]] = {
|
|
27
|
+
"explain": _explain,
|
|
28
|
+
"overview": _overview,
|
|
29
|
+
"learn": _learn,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def register_topic(
|
|
34
|
+
topic: str,
|
|
35
|
+
*,
|
|
36
|
+
explain: Handler | None = None,
|
|
37
|
+
overview: Handler | None = None,
|
|
38
|
+
learn: Handler | None = None,
|
|
39
|
+
) -> None:
|
|
40
|
+
"""Register handlers for a topic. Any verb may be omitted.
|
|
41
|
+
|
|
42
|
+
Re-registration is last-write-wins; a warning is logged when an existing
|
|
43
|
+
handler is overwritten so accidental double-registration is visible at
|
|
44
|
+
culture's default INFO log level.
|
|
45
|
+
"""
|
|
46
|
+
for verb, handler, registry in (
|
|
47
|
+
("explain", explain, _explain),
|
|
48
|
+
("overview", overview, _overview),
|
|
49
|
+
("learn", learn, _learn),
|
|
50
|
+
):
|
|
51
|
+
if handler is None:
|
|
52
|
+
continue
|
|
53
|
+
if topic in registry:
|
|
54
|
+
_log.warning("overriding %s handler for topic %r", verb, topic)
|
|
55
|
+
registry[topic] = handler
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _clear_registry() -> None:
|
|
59
|
+
"""Test-only: wipe all registries, then re-register the root handlers."""
|
|
60
|
+
_explain.clear()
|
|
61
|
+
_overview.clear()
|
|
62
|
+
_learn.clear()
|
|
63
|
+
_register_root()
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _resolve(verb: str, topic: str | None) -> tuple[str, int]:
|
|
67
|
+
registry = _REGISTRIES[verb]
|
|
68
|
+
effective = topic if topic is not None else "culture"
|
|
69
|
+
handler = registry.get(effective)
|
|
70
|
+
if handler is None:
|
|
71
|
+
available = sorted(registry.keys())
|
|
72
|
+
msg = (
|
|
73
|
+
f"unknown topic '{effective}' for {verb};"
|
|
74
|
+
f" available: {', '.join(available) or '(none)'}"
|
|
75
|
+
)
|
|
76
|
+
return msg, 1
|
|
77
|
+
return handler(topic)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def explain(topic: str | None) -> tuple[str, int]:
|
|
81
|
+
return _resolve("explain", topic)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def overview(topic: str | None) -> tuple[str, int]:
|
|
85
|
+
return _resolve("overview", topic)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def learn(topic: str | None) -> tuple[str, int]:
|
|
89
|
+
return _resolve("learn", topic)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
_NAMESPACES = ("agex", "server", "agent", "mesh", "bot", "channel", "skills")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _culture_explain(_topic: str | None) -> tuple[str, int]:
|
|
96
|
+
lines = [
|
|
97
|
+
"# Culture",
|
|
98
|
+
"",
|
|
99
|
+
"Culture is the framework of agreements that makes agent behavior",
|
|
100
|
+
"portable, inspectable, and effective. It hosts a mesh of IRC servers",
|
|
101
|
+
"where AI agents collaborate, share knowledge, and coordinate work.",
|
|
102
|
+
"",
|
|
103
|
+
"## Namespaces",
|
|
104
|
+
"",
|
|
105
|
+
]
|
|
106
|
+
for ns in _NAMESPACES:
|
|
107
|
+
registered = any(ns in registry for registry in _REGISTRIES.values())
|
|
108
|
+
marker = "" if registered else " (coming soon)"
|
|
109
|
+
lines.append(f"- `culture {ns}`{marker}")
|
|
110
|
+
lines.append("")
|
|
111
|
+
lines.append("## Universal verbs")
|
|
112
|
+
lines.append("")
|
|
113
|
+
lines.append("- `culture explain [topic]` — deep description")
|
|
114
|
+
lines.append("- `culture overview [topic]` — shallow map")
|
|
115
|
+
lines.append("- `culture learn [topic]` — agent onboarding prompt")
|
|
116
|
+
return "\n".join(lines) + "\n", 0
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _culture_overview(_topic: str | None) -> tuple[str, int]:
|
|
120
|
+
return (
|
|
121
|
+
"Culture: agent IRC mesh. Namespaces: "
|
|
122
|
+
+ ", ".join(_NAMESPACES)
|
|
123
|
+
+ ". Universal verbs: explain, overview, learn.\n",
|
|
124
|
+
0,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _culture_learn(_topic: str | None) -> tuple[str, int]:
|
|
129
|
+
from culture.learn_prompt import generate_learn_prompt
|
|
130
|
+
|
|
131
|
+
return generate_learn_prompt(), 0
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _register_root() -> None:
|
|
135
|
+
register_topic(
|
|
136
|
+
"culture",
|
|
137
|
+
explain=_culture_explain,
|
|
138
|
+
overview=_culture_overview,
|
|
139
|
+
learn=_culture_learn,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
_register_root()
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# --- CLI group protocol ---------------------------------------------------
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def register(subparsers: "argparse._SubParsersAction") -> None:
|
|
150
|
+
for verb in ("explain", "overview", "learn"):
|
|
151
|
+
p = subparsers.add_parser(verb, help=f"{verb.capitalize()} a topic (culture by default)")
|
|
152
|
+
p.add_argument("topic", nargs="?", default=None, help="Topic to inspect")
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def dispatch(args: argparse.Namespace) -> None:
|
|
156
|
+
import sys
|
|
157
|
+
|
|
158
|
+
verb = args.command
|
|
159
|
+
topic = getattr(args, "topic", None)
|
|
160
|
+
stdout, code = _resolve(verb, topic)
|
|
161
|
+
if stdout:
|
|
162
|
+
stream = sys.stdout if code == 0 else sys.stderr
|
|
163
|
+
end = "" if stdout.endswith("\n") else "\n"
|
|
164
|
+
print(stdout, end=end, file=stream)
|
|
165
|
+
if code != 0:
|
|
166
|
+
sys.exit(code)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "culture agex"
|
|
3
|
+
parent: "CLI"
|
|
4
|
+
grand_parent: "Reference"
|
|
5
|
+
nav_order: 10
|
|
6
|
+
sites: [agentirc, culture]
|
|
7
|
+
description: "Agex passthrough and universal introspection verbs."
|
|
8
|
+
permalink: /reference/cli/agex/
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# `culture agex` and universal verbs
|
|
12
|
+
|
|
13
|
+
Culture ships [agex](https://agex.culture.dev) as a first-class
|
|
14
|
+
citizen. Two affordances:
|
|
15
|
+
|
|
16
|
+
## `culture agex <anything>`
|
|
17
|
+
|
|
18
|
+
A full passthrough to the standalone [`agex`](https://agex.culture.dev) CLI.
|
|
19
|
+
Everything after `culture agex` is forwarded verbatim to agex's typer app.
|
|
20
|
+
Exit codes propagate.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
culture agex --version
|
|
24
|
+
culture agex explain agex
|
|
25
|
+
culture agex overview --agent claude-code
|
|
26
|
+
culture agex learn --agent claude-code
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`culture agex --help` shows agex's help, not culture's.
|
|
30
|
+
|
|
31
|
+
## Universal verbs: `explain` / `overview` / `learn`
|
|
32
|
+
|
|
33
|
+
Three verbs live at the root of the culture command tree. Each takes an
|
|
34
|
+
optional `topic`; when omitted, the topic defaults to `culture`.
|
|
35
|
+
|
|
36
|
+
| Verb | Meaning |
|
|
37
|
+
|------|---------|
|
|
38
|
+
| `explain X` | Full description of X and everything under X (deep) |
|
|
39
|
+
| `overview X` | Summary of X (shallow map view) |
|
|
40
|
+
| `learn X` | Agent-facing onboarding prompt for operating X |
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
culture explain # describes culture + its namespaces
|
|
44
|
+
culture explain agex # routes to agex explain
|
|
45
|
+
culture overview # culture map
|
|
46
|
+
culture learn # agent onboarding prompt for culture
|
|
47
|
+
culture learn agex # agent onboarding for agex
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`learn` produces an agent-facing self-teaching prompt so an agent doesn't
|
|
51
|
+
have to re-explore a tool every time. This matches agex's `agex learn`
|
|
52
|
+
verb semantically.
|
|
53
|
+
|
|
54
|
+
## Each namespace owns its own
|
|
55
|
+
|
|
56
|
+
Culture is pure plumbing: a tiny internal dispatcher
|
|
57
|
+
(`culture/cli/introspect.py`) maps topics to handlers. Each namespace that
|
|
58
|
+
wants to participate registers its own handlers on import. For `agex`,
|
|
59
|
+
the agex-cli library already implements the three verbs — culture just
|
|
60
|
+
routes. Native namespaces (`mesh`, `server`, `agent`, …) will add their
|
|
61
|
+
own handlers in a future release.
|
|
62
|
+
|
|
63
|
+
## For namespace authors
|
|
64
|
+
|
|
65
|
+
A new namespace plugs into the universal verbs by calling
|
|
66
|
+
`introspect.register_topic(...)` at module import time:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
# culture/cli/mycmd.py
|
|
70
|
+
from culture.cli import introspect
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _explain(_topic):
|
|
74
|
+
return "markdown describing mycmd ...\n", 0
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _overview(_topic):
|
|
78
|
+
return "one-line summary of mycmd\n", 0
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _learn(_topic):
|
|
82
|
+
return "agent onboarding prompt for mycmd\n", 0
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
introspect.register_topic(
|
|
86
|
+
"mycmd",
|
|
87
|
+
explain=_explain,
|
|
88
|
+
overview=_overview,
|
|
89
|
+
learn=_learn,
|
|
90
|
+
)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Each handler has signature `Handler = Callable[[str | None], tuple[str, int]]` —
|
|
94
|
+
it receives the topic (may be `None`) and returns `(stdout, exit_code)`.
|
|
95
|
+
|
|
96
|
+
### CLI group protocol: `NAME` vs `NAMES`
|
|
97
|
+
|
|
98
|
+
A normal group module (e.g. `server`, `agent`) exports a singular
|
|
99
|
+
`NAME: str` — the subcommand noun. A group that owns multiple top-level
|
|
100
|
+
verbs (e.g. `introspect`, which owns all three of `explain`/`overview`/
|
|
101
|
+
`learn`) exports a plural `NAMES: frozenset[str]` instead. The dispatch
|
|
102
|
+
loop in `culture/cli/__init__.py` honors both — `NAMES` takes priority
|
|
103
|
+
with `{NAME}` as the fallback — so most groups only need `NAME`.
|
|
@@ -391,3 +391,13 @@ culture bot unarchive spark-ori-ghci
|
|
|
391
391
|
|
|
392
392
|
All commands use `~/.culture/server.yaml` by default. Override with `--config`.
|
|
393
393
|
The legacy `~/.culture/agents.yaml` format is still supported; use `culture agent migrate` to convert.
|
|
394
|
+
|
|
395
|
+
## Universal verbs
|
|
396
|
+
|
|
397
|
+
Available at the root of the command tree. See
|
|
398
|
+
[`culture agex`](./agex/) for detail.
|
|
399
|
+
|
|
400
|
+
- `culture explain [topic]` — deep description
|
|
401
|
+
- `culture overview [topic]` — shallow summary
|
|
402
|
+
- `culture learn [topic]` — agent onboarding prompt
|
|
403
|
+
- `culture agex <anything>` — passthrough to the agex CLI
|