- Replace all 'openclaw' references with 'pi' (pi coding harness) - Fix Git remote URL in CONTEXT.md - Harmonize health port to 9200 across all docs - Add config.yaml.example with full schema - Add pi-zulip-extension skeleton (TypeScript, pi Extension API) - Add hermes-zulip-plugin skeleton (Python, BasePlatformAdapter) - Add agent-zero-plugin skeleton (Python, A0 plugin API) - Update ADR-007 with pi extension docs reference - Document private topic ACL v1 limitation in CONTEXT.md
60 lines
3.4 KiB
Markdown
60 lines
3.4 KiB
Markdown
# Zulip Platform Plugins — Domain Vocabulary
|
|
|
|
This document captures the shared language and architectural invariants for the multi-platform Zulip agent communication system.
|
|
|
|
## Domain Terms
|
|
|
|
| Term | Definition |
|
|
|------|------------|
|
|
| **Agent** | An AI agent operating on a platform (Hermes/Agent Zero/pi) that can receive and respond to Zulip messages |
|
|
| **Adapter / Plugin** | A platform-native component that bridges Zulip events to the agent framework |
|
|
| **@mention** | A Zulip mention (`@**Tanko Bot**`) that triggers the named agent to respond |
|
|
| **@all-bots** | A dedicated Zulip bot user that, when @mentioned, triggers ALL agents across all platforms |
|
|
| **Topic** | A Zulip conversation thread within a stream |
|
|
| **Private topic** | An agent-named topic (e.g., `tanko-private`) where only the bot and its owner participate |
|
|
| **Owner** | The human user associated with an agent bot, stored in per-agent config |
|
|
|
|
## Naming Conventions
|
|
- Agent Zulip bot display names: lowercase, dash-separated, `-bot` suffix — e.g., `tanko-bot`, `mumuni-bot`
|
|
- Agent Zulip bot emails: `@chat.sysloggh.net` — e.g., `tanko-bot@chat.sysloggh.net`
|
|
- Private topics: `{name}-private` — e.g., `tanko-private`
|
|
- Owner privacy: agent should never expose owner name to other agents or users
|
|
|
|
## Agent Registry
|
|
|
|
| Agent | Platform | Zulip Bot | CT | Private Topic |
|
|
|-------|----------|-----------|-----|---------------|
|
|
| tanko | Hermes (Python) | tanko-bot | amdpve CT 112 | tanko-private |
|
|
| mumuni | Hermes (Python) | mumuni-bot | minipve CT 114 | mumuni-private |
|
|
| koonimo | Hermes (Python) | koonimo-bot | amdpve CT 113 | koonimo-private |
|
|
| koby | Hermes (Python) | koby-bot | amdpve CT 111 | koby-private |
|
|
| kagentz | Agent Zero | kagentz-bot | amdpve CT 105 | kagentz-private |
|
|
| abiba | pi (TypeScript) | abiba-bot | amdpve CT 100 | abiba-private |
|
|
|
|
## @all-bots Resolution
|
|
|
|
@all-bots refers to all 6 agents across all frameworks (Hermes, Agent Zero, pi). When @all-bots is mentioned in any topic:
|
|
1. Each per-agent bot receives the event (since they all share `narrow: stream agent-hub`)
|
|
2. Each bot checks: "Is `All Bots` in `mentioned_users`?"
|
|
3. If yes, bot forwards the message to its agent
|
|
4. @all-bots is a **dedicated Zulip bot user** with display name `All Bots` and email `all-bots@chat.sysloggh.net`
|
|
|
|
## Response Rules
|
|
- **Own topic**: Agent always responds (to its private topic)
|
|
- **Collaboration topic** (any topic that isn't a private topic): Agent responds only when @mentioned
|
|
- **@all-bots**: All agents respond
|
|
- **Private topics**: Only the agent owner + bot are participants; bot enforces this via config owner_email matching
|
|
|
|
## Private Topic ACL (v1 — documented limitation)
|
|
|
|
In v1, private topic access is enforced by matching `sender_email == config.owner_email` on each message. **This is not cryptographically authenticated** — Zulip does not enforce sender identity. A user who knows the owner email can impersonate them. This is an acceptable limitation for v1 internal use. v2 should use Zulip invite-only stream permissions or shared-secret challenge-response.
|
|
|
|
## Monorepo Structure
|
|
|
|
All 3 platform plugins live in a single Gitea repository at `git@git.sysloggh.net:SyslogSolution/zulip-platform-plugins.git`
|
|
|
|
## Guardian Directives
|
|
- All destructive actions require user confirmation before execution
|
|
- Plugin updates are version-controlled through Gitea
|
|
- Config files are per-agent and pushed alongside code
|