agentirc-cli 4.5.2__tar.gz → 5.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/CHANGELOG.md +26 -6
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/PKG-INFO +1 -1
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/mesh.py +14 -2
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/overview/collector.py +25 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/overview/model.py +1 -1
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/overview/renderer_text.py +35 -18
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/overview/renderer_web.py +7 -1
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/layer5-agent-harness.md +3 -3
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/culture-cli.md +16 -16
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/getting-started.md +14 -14
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/cli.md +77 -68
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/overview.md +8 -8
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/plugins/claude-code/skills/culture/SKILL.md +5 -5
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/pyproject.toml +1 -1
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_overview_model.py +12 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_overview_renderer.py +70 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/uv.lock +1 -1
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.claude/skills/pr-review/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.flake8 +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.github/workflows/pages.yml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.github/workflows/publish.yml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.github/workflows/security-checks.yml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.github/workflows/tests.yml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.gitignore +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.markdownlint-cli2.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.pr_agent.toml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.pre-commit-config.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/.pylintrc +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/CLAUDE.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/CNAME +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/Gemfile +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/Gemfile.lock +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/LICENSE +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/README.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/SECURITY.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/_config.yml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/_includes/head_custom.html +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/_sass/color_schemes/anthropic.scss +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/_sass/custom/custom.scss +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/assets/images/apple-touch-icon.png +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/assets/images/favicon-16x16.png +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/assets/images/favicon-32x32.png +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/assets/images/favicon.ico +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/__main__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/aio.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/bot.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/bot_manager.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/http_listener.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/template_engine.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/bots/virtual_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/agent.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/bot.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/channel.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/constants.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/display.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/formatting.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/mesh.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/shared/process.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/cli/skills.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/agent_runner.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/culture.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/irc_transport.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/message_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/skill/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/socket_server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/supervisor.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/acp/webhook.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/__main__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/agent_runner.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/culture.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/irc_transport.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/message_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/skill/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/socket_server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/supervisor.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/claude/webhook.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/agent_runner.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/culture.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/irc_transport.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/message_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/skill/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/socket_server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/supervisor.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/codex/webhook.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/agent_runner.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/culture.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/irc_transport.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/message_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/skill/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/socket_server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/supervisor.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/clients/copilot/webhook.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/app.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/commands.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/widgets/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/widgets/chat.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/widgets/info_panel.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/console/widgets/sidebar.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/credentials.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/formatting.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/learn_prompt.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/mesh_config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/observer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/overview/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/overview/web/style.css +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/persistence.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/pidfile.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/commands.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/extensions/federation.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/extensions/history.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/extensions/icons.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/extensions/rooms.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/extensions/tags.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/extensions/threads.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/message.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/protocol-index.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/protocol/replies.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/__main__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/channel.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/history_store.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/ircd.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/remote_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/room_store.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/rooms_util.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/server_link.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/skill.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/skills/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/skills/history.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/skills/icon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/skills/rooms.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/skills/threads.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/server/thread_store.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/culture/skills/culture/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/agentic-self-learn.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/agents/decentralized-config.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/agent-client.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/agent-harness-spec.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/harness-conformance.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/index.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/layer2-attention.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/layer3-skills.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/layer4-federation.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/server-architecture.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/architecture/threads.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/channel-polling.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/acp/overview.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/acp/system-prompt.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/configuration.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/context-management.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/irc-tools.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/overview.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/setup.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/supervisor.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/claude/webhooks.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/configuration.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/context-management.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/irc-tools.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/overview.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/setup.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/supervisor.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/codex/webhooks.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/configuration.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/context-management.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/irc-tools.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/overview.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/setup.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/supervisor.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/clients/copilot/webhooks.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/index.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/SECURITY.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/bots.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/ci.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/docs-site.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/index.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/ops-tooling.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/operations/publishing.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/persistent-history.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/reflective-development.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/resources/github-copilot-sdk-instructions.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/rooms.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/server-rename.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-19-layer1-core-irc.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-21-layer5-agent-harness.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-30-overview.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-03-30-rooms-management.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-02-conversation-threads.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-02-ops-tooling.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-04-culture-rename.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-05-docs-speak-culture.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-06-console-chat.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/plans/2026-04-09-decentralized-agent-config.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-19-agentirc-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-21-layer5-agent-harness-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-30-overview-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-03-30-rooms-management-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-02-conversation-threads-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-02-ops-tooling-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-03-bots-webhooks-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-04-culture-rename-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-05-docs-speak-culture-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-05-lifecycle-reframe-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-06-cli-reorganization-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-06-console-chat-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-07-entity-archiving-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-07-reflective-development-reframe-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-08-reflective-development-deepening-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/superpowers/specs/2026-04-09-decentralized-agent-config-design.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/01-pair-programming.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/02-code-review-ensemble.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/03-cross-server-delegation.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/04-knowledge-propagation.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/05-the-observer.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/06-cross-server-ops.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/07-supervisor-intervention.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/08-apps-as-agents.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/09-research-swarm.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases/10-agent-lifecycle.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/use-cases-index.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/docs/what-is-culture.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/favicon.ico +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/README.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/culture.yaml +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/irc_transport.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/message_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/skill/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/skill/irc_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/socket_server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/packages/agent-harness/webhook.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/plugins/claude-code/skills/irc/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/plugins/codex/skills/culture-irc/SKILL.md +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/sonar-project.properties +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/__init__.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/conftest.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_acp_daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_agent_runner.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_archive.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_bot.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_bot_config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_bot_manager.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_bots_integration.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_channel.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_codex_daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_connection.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_console_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_console_commands.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_console_connection.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_console_icons.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_console_integration.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_copilot_daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_culture_config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_daemon.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_daemon_config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_daemon_ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_discovery.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_display.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_federation.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_history.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_http_listener.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_integration_layer5.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_ipc.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_irc_transport.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_learn_prompt.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_link_reconnect.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_mention_alias.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_mention_target_cleanup.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_mentions.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_mesh_config.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_message.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_message_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_messaging.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_migrate_cli.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_modes.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_overview_cli.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_overview_collector.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_overview_web.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_persistence.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_pidfile.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_poll_loop.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_register_cli.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_room_persistence.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_rooms.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_rooms_federation.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_rooms_integration.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_server_icon_skill.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_setup_update_cli.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_skill_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_skill_docs.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_skills.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_socket_server.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_supervisor.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_template_engine.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_thread_buffer.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_threads.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_virtual_client.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_wait_for_port.py +0 -0
- {agentirc_cli-4.5.2 → agentirc_cli-5.0.0}/tests/test_webhook.py +0 -0
|
@@ -4,17 +4,37 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/).
|
|
6
6
|
|
|
7
|
+
## [5.0.0] - 2026-04-09
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Mesh overview shows stopped/registered agents from server.yaml manifest (#178)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- CLI docs use correct noun-group syntax (culture agent create, culture channel read, etc.) (#186)
|
|
18
|
+
- Replaced non-existent culture send with culture channel message / culture agent message (#187)
|
|
19
|
+
- All doc references updated from agents.yaml to server.yaml (#188)
|
|
20
|
+
- Documented --mesh-config, --webhook-port, --data-dir server start flags (#189)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Mesh overview now includes agents that are registered but not running
|
|
26
|
+
|
|
7
27
|
## [4.5.2] - 2026-04-09
|
|
8
28
|
|
|
9
29
|
|
|
10
30
|
### Fixed
|
|
11
31
|
|
|
12
|
-
- Agent status
|
|
13
|
-
- Agent status list
|
|
14
|
-
- Learn prompt
|
|
15
|
-
- Non-Claude backend skill docs
|
|
16
|
-
- Admin skill and learn prompt missing
|
|
17
|
-
- Mesh overview
|
|
32
|
+
- Agent status now reports the circuit-open state correctly instead of showing running (#179)
|
|
33
|
+
- Agent status list now distinguishes paused and sleeping agents correctly (#180)
|
|
34
|
+
- Learn prompt now includes compact/clear commands and ask --timeout (#181)
|
|
35
|
+
- Non-Claude backend skill docs now include the required features and comply with the all-backends rule (#182)
|
|
36
|
+
- Admin skill and learn prompt now include the missing CLI commands (#183)
|
|
37
|
+
- Mesh overview now indicates when bots are archived (#184)
|
|
18
38
|
|
|
19
39
|
## [4.5.1] - 2026-04-09
|
|
20
40
|
|
|
@@ -120,7 +120,13 @@ def dispatch(args: argparse.Namespace) -> None:
|
|
|
120
120
|
# -----------------------------------------------------------------------
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
def _collect_mesh_data(
|
|
123
|
+
def _collect_mesh_data(
|
|
124
|
+
host: str,
|
|
125
|
+
port: int,
|
|
126
|
+
server_name: str,
|
|
127
|
+
message_limit: int,
|
|
128
|
+
manifest_agents: list | None = None,
|
|
129
|
+
):
|
|
124
130
|
"""Collect mesh state, exiting with an error message on connection failure."""
|
|
125
131
|
from culture.overview.collector import collect_mesh_state
|
|
126
132
|
|
|
@@ -131,6 +137,7 @@ def _collect_mesh_data(host: str, port: int, server_name: str, message_limit: in
|
|
|
131
137
|
port=port,
|
|
132
138
|
server_name=server_name,
|
|
133
139
|
message_limit=message_limit,
|
|
140
|
+
manifest_agents=manifest_agents,
|
|
134
141
|
)
|
|
135
142
|
)
|
|
136
143
|
except ConnectionRefusedError:
|
|
@@ -169,11 +176,16 @@ def _cmd_overview(args: argparse.Namespace) -> None:
|
|
|
169
176
|
agent_filter=args.agent,
|
|
170
177
|
message_limit=message_limit,
|
|
171
178
|
refresh_interval=refresh_interval,
|
|
179
|
+
manifest_agents=config.agents,
|
|
172
180
|
)
|
|
173
181
|
return
|
|
174
182
|
|
|
175
183
|
mesh = _collect_mesh_data(
|
|
176
|
-
config.server.host,
|
|
184
|
+
config.server.host,
|
|
185
|
+
config.server.port,
|
|
186
|
+
config.server.name,
|
|
187
|
+
message_limit,
|
|
188
|
+
manifest_agents=config.agents,
|
|
177
189
|
)
|
|
178
190
|
output = render_text(
|
|
179
191
|
mesh,
|
|
@@ -73,12 +73,33 @@ async def _collect_room(
|
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _inject_stopped_agents(
|
|
77
|
+
all_agents: dict[str, Agent],
|
|
78
|
+
manifest_agents: list,
|
|
79
|
+
server_name: str,
|
|
80
|
+
) -> None:
|
|
81
|
+
"""Add stopped/registered agents from manifest that aren't on IRC."""
|
|
82
|
+
for agent_cfg in manifest_agents:
|
|
83
|
+
if agent_cfg.nick in all_agents or getattr(agent_cfg, "archived", False):
|
|
84
|
+
continue
|
|
85
|
+
all_agents[agent_cfg.nick] = Agent(
|
|
86
|
+
nick=agent_cfg.nick,
|
|
87
|
+
status="stopped",
|
|
88
|
+
activity="",
|
|
89
|
+
channels=agent_cfg.channels if isinstance(agent_cfg.channels, list) else [],
|
|
90
|
+
server=server_name,
|
|
91
|
+
backend=getattr(agent_cfg, "backend", None),
|
|
92
|
+
directory=getattr(agent_cfg, "directory", None),
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
|
|
76
96
|
async def collect_mesh_state(
|
|
77
97
|
host: str,
|
|
78
98
|
port: int,
|
|
79
99
|
server_name: str,
|
|
80
100
|
message_limit: int = 4,
|
|
81
101
|
ipc_enabled: bool = True,
|
|
102
|
+
manifest_agents: list | None = None,
|
|
82
103
|
) -> MeshState:
|
|
83
104
|
"""Collect a full mesh snapshot.
|
|
84
105
|
|
|
@@ -115,6 +136,10 @@ async def collect_mesh_state(
|
|
|
115
136
|
if agent.server == server_name:
|
|
116
137
|
agent.tags = await _query_tags(reader, writer, nick, agent_nick)
|
|
117
138
|
|
|
139
|
+
# Add stopped/registered agents from manifest
|
|
140
|
+
if manifest_agents:
|
|
141
|
+
_inject_stopped_agents(all_agents, manifest_agents, server_name)
|
|
142
|
+
|
|
118
143
|
# Collect bot info from disk
|
|
119
144
|
bots = _collect_bots()
|
|
120
145
|
|
|
@@ -20,7 +20,7 @@ class Agent:
|
|
|
20
20
|
"""An agent on the mesh (local or remote)."""
|
|
21
21
|
|
|
22
22
|
nick: str
|
|
23
|
-
status: str # "active", "idle", "paused", "remote"
|
|
23
|
+
status: str # "active", "idle", "paused", "remote", "stopped", "circuit-open"
|
|
24
24
|
activity: str
|
|
25
25
|
channels: list[str]
|
|
26
26
|
server: str
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from culture.formatting import relative_time as _relative_time
|
|
6
6
|
|
|
7
|
-
from .model import Agent, MeshState, Message, Room
|
|
7
|
+
from .model import Agent, BotInfo, MeshState, Message, Room
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def _escape_cell(text: str) -> str:
|
|
@@ -73,6 +73,34 @@ def render_text(
|
|
|
73
73
|
return _render_default(mesh, message_limit)
|
|
74
74
|
|
|
75
75
|
|
|
76
|
+
def _summary_line(mesh: MeshState, fed_str: str) -> str:
|
|
77
|
+
"""Build the summary line with room/agent counts."""
|
|
78
|
+
room_str = f"{len(mesh.rooms)} room{'s' if len(mesh.rooms) != 1 else ''}"
|
|
79
|
+
stopped = [a for a in mesh.agents if a.status == "stopped"]
|
|
80
|
+
if stopped:
|
|
81
|
+
online = len(mesh.agents) - len(stopped)
|
|
82
|
+
agent_str = f"{online} online, {len(stopped)} stopped ({len(mesh.agents)} total)"
|
|
83
|
+
else:
|
|
84
|
+
agent_str = f"{len(mesh.agents)} agent{'s' if len(mesh.agents) != 1 else ''}"
|
|
85
|
+
return f"{room_str} | {agent_str} | {fed_str}"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _bots_section(bots: list[BotInfo]) -> list[str]:
|
|
89
|
+
"""Render the bots table section."""
|
|
90
|
+
parts = [
|
|
91
|
+
"",
|
|
92
|
+
"## Bots",
|
|
93
|
+
"",
|
|
94
|
+
"| Bot | Trigger | Channels | Owner |",
|
|
95
|
+
"|-----|---------|----------|-------|",
|
|
96
|
+
]
|
|
97
|
+
for bot in bots:
|
|
98
|
+
channels = ", ".join(bot.channels) if bot.channels else "-"
|
|
99
|
+
name = f"{bot.name} [archived]" if bot.archived else bot.name
|
|
100
|
+
parts.append(f"| {name} | {bot.trigger_type} | {channels} | {bot.owner} |")
|
|
101
|
+
return parts
|
|
102
|
+
|
|
103
|
+
|
|
76
104
|
def _render_default(mesh: MeshState, message_limit: int) -> str:
|
|
77
105
|
"""Render the full mesh overview."""
|
|
78
106
|
fed_count = len(mesh.federation_links)
|
|
@@ -80,29 +108,18 @@ def _render_default(mesh: MeshState, message_limit: int) -> str:
|
|
|
80
108
|
if mesh.federation_links:
|
|
81
109
|
fed_str += f" ({', '.join(mesh.federation_links)})"
|
|
82
110
|
|
|
83
|
-
parts = [f"# {mesh.server_name} mesh"]
|
|
84
|
-
parts.append("")
|
|
85
|
-
parts.append(
|
|
86
|
-
f"{len(mesh.rooms)} room{'s' if len(mesh.rooms) != 1 else ''} | "
|
|
87
|
-
f"{len(mesh.agents)} agent{'s' if len(mesh.agents) != 1 else ''} | "
|
|
88
|
-
f"{fed_str}"
|
|
89
|
-
)
|
|
111
|
+
parts = [f"# {mesh.server_name} mesh", "", _summary_line(mesh, fed_str)]
|
|
90
112
|
|
|
91
113
|
for room in mesh.rooms:
|
|
92
114
|
parts.append("")
|
|
93
115
|
parts.append(_render_room(room, message_limit))
|
|
94
116
|
|
|
95
|
-
|
|
117
|
+
stopped_agents = [a for a in mesh.agents if a.status == "stopped"]
|
|
118
|
+
if stopped_agents:
|
|
119
|
+
parts.extend(["", "## Stopped agents", "", _agent_table(stopped_agents)])
|
|
120
|
+
|
|
96
121
|
if mesh.bots:
|
|
97
|
-
parts.
|
|
98
|
-
parts.append("## Bots")
|
|
99
|
-
parts.append("")
|
|
100
|
-
parts.append("| Bot | Trigger | Channels | Owner |")
|
|
101
|
-
parts.append("|-----|---------|----------|-------|")
|
|
102
|
-
for bot in mesh.bots:
|
|
103
|
-
channels = ", ".join(bot.channels) if bot.channels else "-"
|
|
104
|
-
name = f"{bot.name} [archived]" if bot.archived else bot.name
|
|
105
|
-
parts.append(f"| {name} | {bot.trigger_type} | {channels} | {bot.owner} |")
|
|
122
|
+
parts.extend(_bots_section(mesh.bots))
|
|
106
123
|
|
|
107
124
|
return "\n".join(parts) + "\n"
|
|
108
125
|
|
|
@@ -42,7 +42,7 @@ def _load_css() -> str:
|
|
|
42
42
|
|
|
43
43
|
def _inject_status_badges(html: str) -> str:
|
|
44
44
|
"""Replace status text in table cells with styled badges."""
|
|
45
|
-
for status in ("active", "idle", "paused", "remote"):
|
|
45
|
+
for status in ("active", "idle", "paused", "remote", "stopped", "circuit-open"):
|
|
46
46
|
html = re.sub(
|
|
47
47
|
rf"(<td>)\s*{status}\s*(</td>)",
|
|
48
48
|
rf'\1<span class="status-{status}">{status}</span>\2',
|
|
@@ -148,6 +148,7 @@ class _OverviewHandler(SimpleHTTPRequestHandler):
|
|
|
148
148
|
agent_filter: str | None = None
|
|
149
149
|
message_limit: int = 4
|
|
150
150
|
refresh_interval: int = 5
|
|
151
|
+
manifest_agents: list | None = None
|
|
151
152
|
|
|
152
153
|
def do_GET(self):
|
|
153
154
|
mesh = asyncio.run(
|
|
@@ -156,6 +157,7 @@ class _OverviewHandler(SimpleHTTPRequestHandler):
|
|
|
156
157
|
port=self.irc_port,
|
|
157
158
|
server_name=self.server_name,
|
|
158
159
|
message_limit=self.message_limit,
|
|
160
|
+
manifest_agents=self.manifest_agents,
|
|
159
161
|
)
|
|
160
162
|
)
|
|
161
163
|
html = render_html(
|
|
@@ -184,6 +186,7 @@ def _make_overview_handler(
|
|
|
184
186
|
agent_filter: str | None,
|
|
185
187
|
message_limit: int,
|
|
186
188
|
refresh_interval: int,
|
|
189
|
+
manifest_agents: list | None = None,
|
|
187
190
|
) -> type[_OverviewHandler]:
|
|
188
191
|
"""Return an _OverviewHandler subclass with config bound as class attrs."""
|
|
189
192
|
return type(
|
|
@@ -197,6 +200,7 @@ def _make_overview_handler(
|
|
|
197
200
|
"agent_filter": agent_filter,
|
|
198
201
|
"message_limit": message_limit,
|
|
199
202
|
"refresh_interval": refresh_interval,
|
|
203
|
+
"manifest_agents": manifest_agents,
|
|
200
204
|
},
|
|
201
205
|
)
|
|
202
206
|
|
|
@@ -228,6 +232,7 @@ def serve_web(
|
|
|
228
232
|
message_limit: int = 4,
|
|
229
233
|
refresh_interval: int = 5,
|
|
230
234
|
serve_port: int = 0,
|
|
235
|
+
manifest_agents: list | None = None,
|
|
231
236
|
) -> None:
|
|
232
237
|
"""Start a local HTTP server serving the live overview."""
|
|
233
238
|
pid_name = f"overview-{server_name}"
|
|
@@ -241,6 +246,7 @@ def serve_web(
|
|
|
241
246
|
agent_filter,
|
|
242
247
|
message_limit,
|
|
243
248
|
refresh_interval,
|
|
249
|
+
manifest_agents=manifest_agents,
|
|
244
250
|
)
|
|
245
251
|
httpd = HTTPServer(("127.0.0.1", serve_port), handler_cls)
|
|
246
252
|
actual_port = httpd.server_address[1]
|
|
@@ -54,13 +54,13 @@ Both delegate to Claude Code's built-in mechanisms.
|
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
56
|
# Start a single agent
|
|
57
|
-
culture start spark-culture
|
|
57
|
+
culture agent start spark-culture
|
|
58
58
|
|
|
59
59
|
# Start all configured agents
|
|
60
|
-
culture start --all
|
|
60
|
+
culture agent start --all
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
Configuration lives at `~/.culture/
|
|
63
|
+
Configuration lives at `~/.culture/server.yaml`.
|
|
64
64
|
|
|
65
65
|
## Detailed Documentation
|
|
66
66
|
|
|
@@ -28,7 +28,7 @@ Bring agents and humans into your culture.
|
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
cd ~/my-project
|
|
31
|
-
culture join --server spark
|
|
31
|
+
culture agent join --server spark
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
This creates a member for the project and starts it immediately. The member
|
|
@@ -37,8 +37,8 @@ joins `#general`, introduces itself, and waits for work.
|
|
|
37
37
|
For a two-step process — define first, start later:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
culture create --server spark
|
|
41
|
-
culture start spark-my-project
|
|
40
|
+
culture agent create --server spark
|
|
41
|
+
culture agent start spark-my-project
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
## Linking cultures
|
|
@@ -62,11 +62,11 @@ Members on both servers appear in the same rooms. `spark-ori` and
|
|
|
62
62
|
Watch how your culture lives — without disturbing it.
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
culture overview # see everything at a glance
|
|
66
|
-
culture read "#general"
|
|
67
|
-
culture who "#general"
|
|
68
|
-
culture
|
|
69
|
-
culture overview --serve # live web dashboard
|
|
65
|
+
culture mesh overview # see everything at a glance
|
|
66
|
+
culture channel read "#general" # read recent conversation
|
|
67
|
+
culture channel who "#general" # see who is in a room
|
|
68
|
+
culture channel list # list all gathering places
|
|
69
|
+
culture mesh overview --serve # live web dashboard
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
These commands connect directly to the server — no running member
|
|
@@ -77,10 +77,10 @@ daemon required.
|
|
|
77
77
|
Cultures have downtime. Members can sleep and wake on schedule.
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
culture sleep spark-culture # pause a member
|
|
81
|
-
culture wake spark-culture # resume a member
|
|
82
|
-
culture sleep --all # everyone rests
|
|
83
|
-
culture wake --all # everyone resumes
|
|
80
|
+
culture agent sleep spark-culture # pause a member
|
|
81
|
+
culture agent wake spark-culture # resume a member
|
|
82
|
+
culture agent sleep --all # everyone rests
|
|
83
|
+
culture agent wake --all # everyone resumes
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
Members auto-sleep and auto-wake on configurable schedules — quiet
|
|
@@ -91,8 +91,8 @@ hours are natural.
|
|
|
91
91
|
Teach a member how to participate in the culture.
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
culture learn # print self-teaching prompt
|
|
95
|
-
culture learn --nick spark-claude # for a specific member
|
|
94
|
+
culture agent learn # print self-teaching prompt
|
|
95
|
+
culture agent learn --nick spark-claude # for a specific member
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
This generates a prompt your agent reads to learn the IRC tools,
|
|
@@ -103,8 +103,8 @@ collaboration patterns, and how to use skills within the culture.
|
|
|
103
103
|
Make your culture permanent with auto-start services.
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
culture setup
|
|
107
|
-
culture update
|
|
106
|
+
culture mesh setup # install services from mesh.yaml
|
|
107
|
+
culture mesh update # upgrade and restart everything
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
This installs platform services (systemd, launchd, Task Scheduler) so
|
|
@@ -50,20 +50,20 @@ agent backend to work on that project.
|
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
cd ~/your-project
|
|
53
|
-
culture join --server spark
|
|
53
|
+
culture agent join --server spark
|
|
54
54
|
# -> Agent created: spark-your-project
|
|
55
55
|
# -> Agent 'spark-your-project' started
|
|
56
56
|
|
|
57
57
|
# Or choose a different backend:
|
|
58
|
-
culture join --server spark --agent codex
|
|
59
|
-
culture join --server spark --agent copilot
|
|
60
|
-
culture join --server spark --agent acp --acp-command '["cline","--acp"]'
|
|
58
|
+
culture agent join --server spark --agent codex
|
|
59
|
+
culture agent join --server spark --agent copilot
|
|
60
|
+
culture agent join --server spark --agent acp --acp-command '["cline","--acp"]'
|
|
61
61
|
|
|
62
|
-
culture status
|
|
62
|
+
culture agent status
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
> `culture join` creates and starts the agent in one step. For a two-step
|
|
66
|
-
> workflow, use `culture create --server spark` then `culture start`.
|
|
65
|
+
> `culture agent join` creates and starts the agent in one step. For a two-step
|
|
66
|
+
> workflow, use `culture agent create --server spark` then `culture agent start`.
|
|
67
67
|
|
|
68
68
|
The agent joins `#general`, idles, and responds to @mentions. It runs the
|
|
69
69
|
configured backend with full access to the project directory.
|
|
@@ -114,7 +114,7 @@ the IRC tools to read and send messages on your behalf.
|
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
116
|
cd ~/your-workspace
|
|
117
|
-
culture join --server spark --nick ori
|
|
117
|
+
culture agent join --server spark --nick ori
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
### Step 2: Set the environment variable
|
|
@@ -190,9 +190,9 @@ Now you can just ask your agent: "read #general", "send hello to #general",
|
|
|
190
190
|
Watch how your culture lives — no running daemon required:
|
|
191
191
|
|
|
192
192
|
```bash
|
|
193
|
-
culture
|
|
194
|
-
culture who "#general"
|
|
195
|
-
culture read "#general"
|
|
193
|
+
culture channel list # list active channels
|
|
194
|
+
culture channel who "#general" # see who's in a channel
|
|
195
|
+
culture channel read "#general" # read recent messages
|
|
196
196
|
```
|
|
197
197
|
|
|
198
198
|
Useful for anyone curious about what's happening.
|
|
@@ -201,8 +201,8 @@ Useful for anyone curious about what's happening.
|
|
|
201
201
|
|
|
202
202
|
```bash
|
|
203
203
|
culture server status --name spark # server running
|
|
204
|
-
culture status
|
|
205
|
-
culture who "#general"
|
|
204
|
+
culture agent status # agents connected
|
|
205
|
+
culture channel who "#general" # all participants visible
|
|
206
206
|
```
|
|
207
207
|
|
|
208
208
|
Send a test message and verify an agent responds:
|
|
@@ -226,7 +226,7 @@ enforces this — names always identify which culture a member belongs to.
|
|
|
226
226
|
## What's Next
|
|
227
227
|
|
|
228
228
|
- [Agent Lifecycle](agent-lifecycle.md) — the Introduce → Educate → Join → Mentor → Promote lifecycle
|
|
229
|
-
- [Configuration Reference](clients/claude/configuration.md) — full
|
|
229
|
+
- [Configuration Reference](clients/claude/configuration.md) — full server.yaml schema
|
|
230
230
|
- [CLI Reference](operations/cli.md) — all culture commands
|
|
231
231
|
- [Federation](architecture/layer4-federation.md) — link cultures across machines
|
|
232
232
|
- [Supervisor](clients/claude/supervisor.md) — monitor member behavior
|