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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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,afterfor new only).Safety shape
BUS_ORG(defaultteahubxyz); Gitea decides.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.pyupdated 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.