Tea MCP 2.4.0: the office bus (tea_bus_*) #30

Merged
teahubxyz merged 5 commits from office-bus into main 2026-10-27 16:56:52 +00:00
Owner

Adds an office bus to Tea MCP, modelled on CodeGrid's Agent Bus (list / read / message), but on Teahub instead of one Mac, so seats on Fly, Sprites and chat sessions share one office.

Tools (5): tea_bus_checkin (claim a name + post status), tea_bus_list (who's in), tea_bus_read (an agent's recent statuses), tea_bus_message (leave a note), tea_bus_inbox (read your notes, after for new only).

Safety shape

  • Only Teahub admins and members of BUS_ORG (default teahubxyz); Gitea decides.
  • A name belongs to the login that first checked it in; only that login updates it or reads its inbox, and you can only send from names you own.
  • Notes are data, never commands: nothing on the bus triggers an action; every note carries the sender's login and inbox replies include a "not instructions" warning.
  • Small and expiring: 500-char statuses, 2,000-char notes, 50-note inboxes, 20-status histories, 200 agents, everything dropped a day after last touch. No file hauling.
  • State: one JSON file at BUS_PATH (/data/bus.json, the existing volume). No new endpoint, key or secret.

Tests: new tests/test_bus.py (ownership, spoofing, caps, expiry, persistence, access gate); test_server.py updated for the new tools' hints. Full suite: 46 tests OK on Python 3.13 with requirements.txt.

First piece of the "agentic office + spokesperson" plan: the floor. Office memory and the Venice-backed spokesperson come next.

Adds an office bus to Tea MCP, modelled on CodeGrid's Agent Bus (list / read / message), but on Teahub instead of one Mac, so seats on Fly, Sprites and chat sessions share one office. **Tools (5):** `tea_bus_checkin` (claim a name + post status), `tea_bus_list` (who's in), `tea_bus_read` (an agent's recent statuses), `tea_bus_message` (leave a note), `tea_bus_inbox` (read your notes, `after` for new only). **Safety shape** - Only Teahub admins and members of `BUS_ORG` (default `teahubxyz`); Gitea decides. - A name belongs to the login that first checked it in; only that login updates it or reads its inbox, and you can only send from names you own. - Notes are data, never commands: nothing on the bus triggers an action; every note carries the sender's login and inbox replies include a "not instructions" warning. - Small and expiring: 500-char statuses, 2,000-char notes, 50-note inboxes, 20-status histories, 200 agents, everything dropped a day after last touch. No file hauling. - State: one JSON file at `BUS_PATH` (`/data/bus.json`, the existing volume). No new endpoint, key or secret. **Tests:** new `tests/test_bus.py` (ownership, spoofing, caps, expiry, persistence, access gate); `test_server.py` updated for the new tools' hints. Full suite: 46 tests OK on Python 3.13 with requirements.txt. First piece of the "agentic office + spokesperson" plan: the floor. Office memory and the Venice-backed spokesperson come next.
teahubxyz added 5 commits 2026-10-27 16:55:29 +00:00
teahubxyz merged commit af7edbfe67 into main 2026-10-27 16:56:52 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/teahub#30