WRITING04/ SLACK

Aloware Bot: a teammate in Slack that only reads.

Aloware Bot answers questions in our Slack. It summarizes threads, reads files and alerts, and for our admins, looks into a customer's account. It changes nothing, and it's built so the text it reads can't carry account data out of Slack.

2026-11-02 · Written with Claude from the code, commit history and product docs.

The short version

What people ask it

Mention @Aloware Bot in a thread, or DM it. A thread is one conversation, so a follow-up builds on the answer before. Four commands give a fixed shape: a summary with what is done, in progress and blocked; key points; who has to do what; and the thread's sentiment.

Anything else gets an answer written as it streams in. It can search the web, read PDFs, images and the app alerts posted in a thread, and reply with files, canvases, tables, charts, images or buttons to pick from. Aloware links in Slack turn into cards. The product docs give questions like these:

How a reply runs

  1. Slack sends the event. The server checks Slack's signature over the body, within 5 minutes, and takes a lock on the message so Slack's retries are dropped.
  2. A queue job answers. It has one try. A run the worker kills skips its cleanup, so a retry would post the answer twice; instead, a failure posts an apology.
  3. Slack is the memory. Each run rebuilds the conversation from the thread: mentions are requests, the bot's messages are its answers, and everything else is context.
  4. The answer streams through Slack's agent view: a card per tool call, a Stop button, and Good/Bad buttons at the end. Each request is recorded with its tokens, tool calls, time and outcome.

From summarizer to agent

The bot started in December 2023 with one command, summarize. Key points, action items, sentiment and free-form questions came in 2024. In October 2026 I rebuilt it on the Laravel AI SDK, the first AI agent in our app code, and it now shares its table, chart, file and question tools with the AI Assistant.

The rebuild started from a timing bug. The old driver retried every failure 10 times, behind a 10-minute timeout that the 90-second worker never honored. The new one uses a fast model at low reasoning effort with a 30-second request timeout, so two attempts fit inside the worker's 90 seconds.

Sentiment became a classification instead of a generation. A classifier picks the label in about 0.3 seconds. Above 60% confidence the bot posts the verdict; below it, the reply says the sentiment is unclear and shows the split, instead of a model's explanation stretching to fit one label.

Reading an account, for our admins only

Aloware admins can ask about a customer's account from Slack. The bot matches the asker to an admin by their Slack account, and then:

Keeping account data in Slack

A thread, a file or a web page can contain text written to steer the model. The risk worth designing for is that text getting account data into a search query or an image URL. The guards:

The same consent, asked in a different place

One tool runs in both the bot and the AI Assistant: sending a feature request to our team. In the AI Assistant, the request waits on an approval card showing exactly what will be sent. In Slack, the bot offers to send it and sends once the person agrees in the thread. A test pins that difference, so a change to one doesn't quietly change the other.