Conversation behavior
Adapters use native platform activity instead of posting and deleting progress messages.
Activity
- Slack sets native assistant status to
Thinking..., switches toWorking...on the first tool, and clears status on completion, cancellation, failure, or approval pause. - Discord and Telegram refresh native typing while a turn is active.
- Slack adds an
eyesreaction to accepted app mentions before attachment staging. - Todo progress is a separate editable adapter message when todo support is enabled.
slack({ token, appToken, status: true, reaction: "eyes" });
discord({ token, typing: true });
telegram({ token, typing: true });Set status, typing, or reaction to false to disable that surface.
Busy conversations
busy controls a follow-up received during an active turn:
queueis durable FIFO and is the default;steercalls Pi's activesession.steer();rejectcreates no turn.
Messages with attachments are queued even in steer mode so files can be staged safely.
Event overrides
Adapters expose normalized lifecycle events through events. A custom handler replaces the
platform default; false disables it.
slack({
token,
appToken,
events: {
tool_started: false,
message_queued: async (_event, { send, message }) => {
await send({ conversation: message.conversation, text: "Queued." });
},
},
});See API for the stable event list.