|
@@ -43,7 +43,7 @@ Capabilities natively implemented by the Chatto plugin adapter:
|
|
|
| file attachments | yes (chunked upload) |
|
|
| file attachments | yes (chunked upload) |
|
|
|
| image / video / audio / documents | yes (native attachments) |
|
|
| image / video / audio / documents | yes (native attachments) |
|
|
|
| DM participation | only once the person has DMed the bot — a bot cannot start a DM on Chatto, see [DM Initiation](#dm-initiation) |
|
|
| DM participation | only once the person has DMed the bot — a bot cannot start a DM on Chatto, see [DM Initiation](#dm-initiation) |
|
|
|
-| plugin tools | yes (thirteen tools covering sending, reading, pinning, attachments, custom status, link previews and room groups — see [Plugin tools](#plugin-tools)) |
|
|
|
|
|
|
|
+| plugin tools | yes (fourteen tools covering sending, self-deleting notices, reading, pinning, attachments, custom status, link previews and room groups — see [Plugin tools](#plugin-tools)) |
|
|
|
| room creation | yes |
|
|
| room creation | yes |
|
|
|
| room join/leave over DM | yes (`/join`, `/leave`) |
|
|
| room join/leave over DM | yes (`/join`, `/leave`) |
|
|
|
| member directory | yes (cached) |
|
|
| member directory | yes (cached) |
|
|
@@ -391,10 +391,11 @@ Two refusals by design: direct messages cannot be left, and leaving the configur
|
|
|
|
|
|
|
|
## Plugin tools
|
|
## Plugin tools
|
|
|
|
|
|
|
|
-Beyond answering inbound messages, the agent can act on Chatto on its own initiative. The plugin registers thirteen tools, available to the agent in the gateway and, with `hermes tools`, in the CLI:
|
|
|
|
|
|
|
+Beyond answering inbound messages, the agent can act on Chatto on its own initiative. The plugin registers fourteen tools, available to the agent in the gateway and, with `hermes tools`, in the CLI:
|
|
|
|
|
|
|
|
| Tool | What it does |
|
|
| Tool | What it does |
|
|
|
|------|--------------|
|
|
|------|--------------|
|
|
|
|
|
+| `chatto_send_ephemeral` | Posts a notice into a channel that deletes itself after `ttl_seconds` (default 60, range 5-3600), for progress or status updates that should not stay in the timeline. Same room rules as `chatto_send_room`. Deletion is best-effort: a gateway restart before the TTL expires leaves the notice behind. |
|
|
|
| `chatto_list_rooms` | Lists the rooms visible to the bot with their IDs, kinds and membership. Optional `name` filters case-insensitively by substring. Useful for turning a channel name into the `platform:chat_id` address a cron `deliver` target needs. |
|
|
| `chatto_list_rooms` | Lists the rooms visible to the bot with their IDs, kinds and membership. Optional `name` filters case-insensitively by substring. Useful for turning a channel name into the `platform:chat_id` address a cron `deliver` target needs. |
|
|
|
| `chatto_send_room` | Posts a message into a channel or DM room, by `room_id` or `room_name`. Can post inside an existing thread (`thread_root_event_id`) or open a new one (`create_thread`). Either way the bot follows the thread afterwards, so later replies in it reach the agent. |
|
|
| `chatto_send_room` | Posts a message into a channel or DM room, by `room_id` or `room_name`. Can post inside an existing thread (`thread_root_event_id`) or open a new one (`create_thread`). Either way the bot follows the thread afterwards, so later replies in it reach the agent. |
|
|
|
| `chatto_send_dm` | Posts a message into the DM room you already have with a person, addressed by `user_id` or `user_login`. |
|
|
| `chatto_send_dm` | Posts a message into the DM room you already have with a person, addressed by `user_id` or `user_login`. |
|
|
@@ -411,11 +412,11 @@ Beyond answering inbound messages, the agent can act on Chatto on its own initia
|
|
|
|
|
|
|
|
Five boundaries are deliberate, and each tool reports them as an error instead of half-doing the job:
|
|
Five boundaries are deliberate, and each tool reports them as an error instead of half-doing the job:
|
|
|
|
|
|
|
|
-- **A channel must be opted in.** `chatto_send_room` only posts into a room listed in `CHATTO_REQUIRE_MENTION_ROOMS` or `CHATTO_OPTIONAL_MENTION_ROOMS` (DM rooms are never gated). A room on neither list stays read-only — a human message there would never have produced output either. The refusal names both settings so you can paste the room ID into `~/.hermes/.env`. The read tools are exempt: `chatto_get_message`, `chatto_get_history`, `chatto_list_room_attachments`, `chatto_list_pinned_messages` and `chatto_list_room_groups` read any room the server lets the bot see, because reading answers nothing and posts nothing — the server's own visibility rules are the only gate.
|
|
|
|
|
|
|
+- **A channel must be opted in.** `chatto_send_room` and `chatto_send_ephemeral` only post into a room listed in `CHATTO_REQUIRE_MENTION_ROOMS` or `CHATTO_OPTIONAL_MENTION_ROOMS` (DM rooms are never gated). A room on neither list stays read-only — a human message there would never have produced output either. The refusal names both settings so you can paste the room ID into `~/.hermes/.env`. The read tools are exempt: `chatto_get_message`, `chatto_get_history`, `chatto_list_room_attachments`, `chatto_list_pinned_messages` and `chatto_list_room_groups` read any room the server lets the bot see, because reading answers nothing and posts nothing — the server's own visibility rules are the only gate.
|
|
|
- **Pinning is a write.** `chatto_pin_message` changes what the room shows everyone, so it obeys the same opt-in rule as `chatto_send_room`: an unlisted channel refuses the pin and names both settings. A DM is never gated.
|
|
- **Pinning is a write.** `chatto_pin_message` changes what the room shows everyone, so it obeys the same opt-in rule as `chatto_send_room`: an unlisted channel refuses the pin and names both settings. A DM is never gated.
|
|
|
- **The bot cannot open a DM.** Only a person can start a direct message on Chatto, so `chatto_send_dm` needs a recipient who has written to the bot at least once. To reach someone else, mention them in a channel message.
|
|
- **The bot cannot open a DM.** Only a person can start a direct message on Chatto, so `chatto_send_dm` needs a recipient who has written to the bot at least once. To reach someone else, mention them in a channel message.
|
|
|
- **A name is not an identity.** If several rooms share the name you passed, `chatto_send_room` returns their IDs and asks for `room_id` instead of picking one. Same rule as `/join #name`. The read tools resolve names by the same rule.
|
|
- **A name is not an identity.** If several rooms share the name you passed, `chatto_send_room` returns their IDs and asks for `room_id` instead of picking one. Same rule as `/join #name`. The read tools resolve names by the same rule.
|
|
|
-- **Visible is not joined.** `chatto_list_rooms` lists rooms the bot can see, which includes channels it has not joined; check `is_member` before posting into one. `chatto_send_room` and `chatto_pin_message` refuse an unjoined room and say how to get in, because the server would reject the write with an error naming neither the room nor the fix. Reading needs no membership beyond what the server allows — a room the bot merely sees stays readable if the server permits the timeline.
|
|
|
|
|
|
|
+- **Visible is not joined.** `chatto_list_rooms` lists rooms the bot can see, which includes channels it has not joined; check `is_member` before posting into one. `chatto_send_room`, `chatto_send_ephemeral` and `chatto_pin_message` refuse an unjoined room and say how to get in, because the server would reject the write with an error naming neither the room nor the fix. Reading needs no membership beyond what the server allows — a room the bot merely sees stays readable if the server permits the timeline.
|
|
|
|
|
|
|
|
Credentials never come from the model: no tool takes a server URL or a token as an argument, so the configured bot token cannot be pointed at another host. Inside a channel, mention people in the message text (`@login, …`) — there is no separate mention parameter.
|
|
Credentials never come from the model: no tool takes a server URL or a token as an argument, so the configured bot token cannot be pointed at another host. Inside a channel, mention people in the message text (`@login, …`) — there is no separate mention parameter.
|
|
|
|
|
|