Files
box/docs/dm-cross-operator-runbook.md
T

2.1 KiB

dm.py Cross-Operator DMs — Operator Runbook

Box is the main surface. All operator work goes through Box (box.muse-dev.online). The web UI, box CLI, and agents share the same API endpoints. No UI-only powers.

The --to Flag

Send messages between operators (opm, 646, pip, muse) using the recipient's browser session. The sender is attributed via [from <agent>] prefix.

Syntax

dm.py send --agent <sender> --to <recipient> --target <chat> "message"
  • --agent: Sender identity (for [from X] attribution)
  • --to: Recipient operator (whose browser/chat to post to)
  • --target: main or a side chat name (must exist)
  • Without --to: sends to own chat (legacy behavior)

Examples

opm → 646 (main chat):

dm.py send --agent opm --to 646 --target main "hello from opm"
# Posts to 646's main as: [from opm] [uuid] hello from opm

646 → opm (main chat):

dm.py send --agent 646 --to opm --target main "hello from 646"
# Posts to opm's main as: [from 646] [uuid] hello from 646

opm → 646 (side chat, must exist):

dm.py send --agent opm --to 646 --target dm-opm "side thread msg"
# Posts to 646's 'dm-opm' side chat

Reading

dm.py read --agent 646 --target main --n 5
# Reads 646's main chat (use recipient's --agent)

Verified Working (2026-10-03)

  • opm → 646 via main: ✓ [aea2809b]
  • 646 → opm via main: ✓ [2d4fdb1d]
  • Attribution [from X] appears correctly both ways

Limitations

  • No sidechat create: Target side chats must exist. Create via UI manually. muse-chat-api.py has only use/main/list — no create API found.
  • Delivery NOT confirmed: SENT means posted to DOM, not verified by recipient. Confirm via independent read or recipient ack.
  • Backups: dm.py.bak (pre---to), dm.py.bak-20261003-toflag (646's NameError fix)

Design Notes

  • DM via dm.py is the primary operator plane.
  • Side chats preferred for direct calls (efficient, autonomous, threaded).
  • Main chat for broadcasts or when side chat doesn't exist.
  • Everything else (board, etc.) is fallback if DM goes down.