metabot
Metabot enables asynchronous messaging between separate MetaBot instances and bots, with automatic cross-instance routing and peer discovery. Use this skill to delegate tasks to other bots, send messages across federated peers, manage bot discovery, initiate voice calls, or access shared skills from a skill hub.
git clone --depth 1 https://github.com/xvirobotics/metabot /tmp/metabot && cp -r /tmp/metabot/packages/skills/metabot ~/.claude/skills/metabotSKILL.md
## Quickstart
The `metabot` CLI is the single entry point to the metabot-core ecosystem. It wraps four surfaces:
```bash
metabot memory <cmd> # shared knowledge / notes
metabot skills <cmd> # skill registry (alias: skill)
metabot agents <cmd> # peer-bot address book
metabot inbox <cmd> # central inbox for CLI agents (CC / Codex with no bridge)
metabot teams <cmd> # local Agent Teams orchestration
metabot t5t <cmd> # daily team status portal
metabot help # top-level help (also --help, -h, bare invocation)
```
`metabot` is the **single** CLI binary. Beyond the metabot-core surfaces above, it also handles bridge process control (`update`/`start`/`stop`/`restart`/`logs`/`status`) and a bridge daemon API (`bots`/`bot`/`talk`/`schedule`/`voice`/`stats`/`peers`/`metrics`/`health` — see the bridge-local section below). The legacy `mm`, `mh`, and per-bot `bot-skills` surfaces have been removed; `mb` is now a thin deprecation wrapper that forwards to `metabot`. Switch any script still calling them to the `metabot <subcommand>` form (see the migration table below).
Auth is automatic: `METABOT_CORE_TOKEN` (env) or `~/.metabot-core/token` (first line). Server URL is `METABOT_CORE_URL`, default `http://localhost:9200` for a locally self-hosted metabot-core; point it at `https://your-metabot-host.example.com` if you run metabot-core on a remote box behind your own reverse proxy.
**Fastest path for a fresh agent**: run metabot-core locally (or reach your own remote host), then put the API token in `~/.metabot-core/token` (or export `METABOT_CORE_TOKEN`) and set `METABOT_CORE_URL`. No SSO or corporate VPN is required for the personal edition — a single local API token is the only credential. Then `metabot agents whoami` should echo your identity.
## `metabot memory` — shared knowledge
Most-used:
```bash
metabot memory list [folder_id] # browse the tree
metabot memory search "<query>" # full-text search
metabot memory get <id|path> # read a doc (JSON metadata + content)
metabot memory create "<title>" ["<content>"] --share --tags a,b
metabot memory create "<title>" ["<html>"] --share --html --tags docs
metabot memory mkdir "<name>" # create a folder
metabot memory update <id> [content] [--title …] [--tags a,b,c] [--share|--no-share]
metabot memory share <id> [on|off] # toggle one doc's cross-bot visibility
metabot memory visibility [public|private] # default shared flag for new docs
metabot memory health
```
(Replaces the former standalone `mm` CLI — same wire calls, same behavior, single binary.)
**Write target — `create` / `mkdir`.** Both accept an explicit `--path </absolute/path>`:
```bash
metabot memory create "Smoke note" "..." --path /users/<botName>/smoke-note
metabot memory mkdir "smoke-folder" --path /users/<botName>/smoke-folder
```
When `--path` is given the server ACL-checks it and auto-creates any missing
ancestor folders. With **neither** `--path` nor `--folder` (nor a `parent_id`
for `mkdir`), the write **defaults into your own namespace** —
`/users/<botName>/<slug-of-title>` for `create`,
`/users/<botName>/<name>` for `mkdir` — resolved via `GET /api/whoami`. This
is the fix for the old member `403 forbidden`: members cannot write the root
namespace, so a bare `create`/`mkdir` previously failed. Admin tokens keep the
legacy root default. `--folder <id>` still targets an explicit existing folder
as before.
**Read visibility is document-level.** A document's cross-bot visibility is
controlled by its `shared` flag, not by the path. Use `--share` when creating
team-visible memory; use `--no-share` for private notes. Tags are for search
and discovery, not ACL, but they should still describe audience and topic:
```bash
metabot memory create "Runbook" "$CONTENT" --share --tags team,runbook
metabot memory create "Landing page" "$HTML" --share --html --tags metabot,tutorial
metabot memory update <doc_id> --share --tags metabot,public
metabot memory share <doc_id> on
```
**Per-bot default visibility — `memoryPublic`.** Bots can flip the default
`shared` value for new documents without admin intervention. `public` means
new docs default to `shared:true`; `private` means new docs default to
`shared:false`. Explicit `--share` / `--no-share` on create/update always wins.
Default for newly-registered bots is **public** (`memoryPublic: true`):
```bash
metabot memory visibility # prints {state: "public" | "private"}
metabot memory visibility public # new docs default shared:true
metabot memory visibility private # new docs default shared:false
```
Same shape and auth model as `bots.json` `visible` for agent-bus discovery
("bot self-toggles, owner credential or admin only" — PATCH
`/api/agents/<botName>/memory-visibility`). It only changes the default
`shared` value for *new* documents; existing docs are unchanged until you run
`metabot memory share <doc_id> on|off` or `metabot memory update <doc_id>
--share|--no-share`. To pin the choice across bridge restarts, set
`memoryPublic: true|false` on the bot's entry in `bots.json` — the bridge
re-asserts the column on every bulk-register and overrides whatever was last
toggled via CLI. Omitting the field in bots.json leaves CLI toggles sticky.
## `metabot skills` — skill registry
```bash
metabot skills list
metabot skills get <name>
metabot skills publish <name> --from <dir> # reads <dir>/SKILL.md
metabot skills install <name> [--to <dir>] # default --to .claude/skills/<name>
metabot skills remove <name>
metabot skills health
```
**Install location landmine:** `metabot skills install <name>` defaults to `<cwd>/.claude/skills/<name>`. For a Claude-Code-wide install, pass `--to ~/.claude/skills/<name>`:
```bash
metabot skills install metabot --to ~/.claude/skills/metabot
```
(Replaces the former standalone `mh` CLI — same wire calls, same behavior, siGenerate high-quality speech audio using Doubao (豆包/Volcengine) TTS API. Use this skill when the user asks to generate audio, podcasts, voiceovers, or text-to-speech output.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Read and write shared memory documents. Use this when you need to save knowledge, notes, research findings, or project context for future reference across sessions. Also use it to look up previously stored information.
MetaBot's persistent server-side scheduler (cron + one-shot). Optional skill — not installed by default. Use when the user wants tasks that survive Claude session restarts, are visible to other bots, or need to run in MetaBot's PM2 process rather than this Claude session.
The meta-skill: create AI agent teams, individual agents, or custom skills for any project. Use when the user wants to generate a complete agent team, create a single agent, or create a single skill for Claude Code, Kimi, or Codex.
Discover, search, and install shared skills from the Skill Hub registry. Use when the user wants to find available skills, share a skill with other bots, or install a skill from the hub.