Arcana::Help
Shared workflow briefing for new bus clients. Returned by the MCP
initialize response and by the arcana:help bus service so both
surfaces stay in sync.
Sections are keyed so a caller can request just one
(Help.topic("addressing")) or the full briefing (Help::BRIEFING).
Constants
BRIEFING = "Arcana is a persistent agent communication bus. Use these tools to\nsend messages, discover services, and coordinate with other agents\nand AI providers.\n\n#{TOPICS["workflow"]}\n#{TOPICS["addressing"]}\n#{TOPICS["discovery"]}\n#{TOPICS["errors"]}"
TOPICS = {"workflow" => "**Workflow (in order):**\n\n1. **Register first** with `arcana_register` (`address`: your agent\n name). The bus rejects sends from unregistered addresses. Pure\n consumers (you only send, never receive direct messages) should\n pass `listed: false`.\n2. **Discover** what's available with `arcana_directory`. Returns\n all agents and services on the bus, with their descriptions,\n schemas, and usage guides. `arcana_directory address:\"<name>\"`\n looks up one entry (read its `guide` field for usage).\n3. **Send** with `arcana_deliver`. `ordering: auto` (default)\n resolves by target kind — services block for a reply, agents are\n fire-and-forget. Override with `ordering: sync` or `async`.\n4. **Receive** async replies with `arcana_receive` (yourself as\n `address`). `arcana_inbox` peeks without consuming.", "addressing" => "**Addressing:**\n- An address is a routing label — pick something stable, other\n agents will remember it. Legal shapes:\n - `foo` — bare single token (typically a service or Toolset)\n - `@foo` — agent-handle single token (leading `@` sigil,\n conversational identity)\n - `owner:capability` — two-token colon form (legacy convention;\n still valid, but Toolset is preferred for grouping tools\n under one owner)\n- The `@` sigil is a naming *convention*: it lets a project's\n Claude/Codex agent register as `@mj` alongside the same\n project's tool service registered as `mj`. Both are distinct\n entities with distinct mailboxes.\n- `kind` (`agent` or `service`) is an explicit field on your\n registration; the bus does not derive it from the sigil or\n the colon.", "discovery" => "**Discovery:** two-step.\n\nStep 1 — list what's on the bus with `arcana_directory`. Filter\nby `kind` or `tag`. Providers auto-tag their registered tool\nnames, so `arcana_directory tag:\"chat\"` finds every entity that\noffers a chat tool (openai, anthropic, gemini, ...).\n`arcana_directory kind:\"agent\"` lists humans/assistants. Each\nlisting has a short `guide` for at-a-glance context.\n\nStep 2 — ask any participant what it offers by sending\n`{\"tool\":\"help\"}`. The reply is a Protocol.result wrapping a\nmanifest: `{\"name\":\"...\",\"description\":\"...\",\"tools\":[{\"name\":\"...\",\"description\":\"...\",\"inputSchema\":{...}}, ...]}`.\nThen invoke with `{\"tool\":\"<name>\", ...args}`.\n\nDefault built-in providers — `arcana` (echo, markdown), `openai`\n(chat, embed, tts), `anthropic` (chat), `gemini` (chat),\n`runware` (image).", "errors" => "**Errors:** if a delivery fails (\"no mailbox for address\"), the\nerror response includes a `did_you_mean` field with the closest\nregistered address — agents do re-register under different names.\nRetry with the suggested address."}