Skip to content
ivralo
Sections

Docs / Integrations

E-mail and chat

ivralo can send what it produced by e-mail, or post a short message to Telegram or Slack. Both are off until you configure them, and every send is approved by you.

Two tools, one rule

ToolSendsGrant
send_emailan e-mail with workspace files attachedmail.send
send_messagea short message to the Telegram or Slack chat you configuredmessage.send

Sending is the one capability that turns an assistant that reads your workspace into a way out of it. So both tools follow the same rule: every call pauses for your approval, and nothing lifts that pause.

The Courier is the specialist for sending, the courier preset, with the mail and notify skills. It is on the team only when a mail backend or a chat is configured. The main agent holds the team's grants, so it can call the same two tools, under the same approval.

Every send asks

The dialog shows what would leave; for mail that is the recipients, the subject, the attachments and the body. It is marked high risk: y sends, and Enter does nothing. The broader answers (a for the turn, s for the session, p for a rule) are not offered on a send.

In a run nobody is watching, such as ivralo ask, a pipe or a job, both tools are refused, because nobody is there to approve. The one exception is a schedule created for it:

ivralo schedule add morning-report --every "weekdays 08:30" "Build the daily error report as a PDF" --mail-to ops@example.com --notify

--mail-to names the addresses that schedule may mail, and is checked against IVRALO_MAIL_ALLOWED when the schedule is created. --notify lets it post to your chat. Nothing else sends unattended. See Schedules.

An instance opened to answer a question never gets either tool.

E-mail

Set a backend and a sender, and the Courier joins the team.

VariableDefaultSets
IVRALO_MAILunsetsmtp or resend; unset means no mail
IVRALO_MAIL_FROMunsetthe sender address
IVRALO_SMTP_HOSTunsetthe SMTP server
IVRALO_SMTP_PORT587its port
IVRALO_SMTP_USER, IVRALO_SMTP_PASSWORDunsetthe login
IVRALO_SMTP_SECURITYstarttlsstarttls, ssl or none (a relay on the local network)
IVRALO_RESEND_API_KEYunsetResend's HTTP API instead of SMTP
IVRALO_MAIL_ALLOWEDunsetaddresses or @domains mail may go to; unset allows any address
IVRALO_MAIL_MAX_MB10the cap on attachments per mail

SMTP works with any provider: a company relay, Amazon SES over SMTP, Outlook, or a Gmail app password.

IVRALO_MAIL=smtp
IVRALO_MAIL_FROM=ivralo@example.com
IVRALO_SMTP_HOST=smtp.example.com
IVRALO_SMTP_USER=ivralo@example.com
IVRALO_SMTP_PASSWORD=change-me
IVRALO_MAIL_ALLOWED=@example.com

A request reads the way you would say it:

send the incident report to oncall@example.com with a one-line note

The report is produced first, then sent with the exact file name and the address. Attachments are workspace files only, under the size cap. The Courier never invents a recipient: with no address it asks you. A refusal, such as an address outside the allow list or a missing file, is reported as the tool said it, not worked around.

Telegram and Slack

VariableSets
IVRALO_TELEGRAM_BOT_TOKEN, IVRALO_TELEGRAM_CHAT_IDa bot from @BotFather and the chat it posts to; files go along as documents
IVRALO_SLACK_WEBHOOK_URLa Slack incoming webhook; text only, since a webhook cannot carry a file

The chat is fixed by the configuration, so the model never picks who receives a message. With one channel configured, that one is used; with both, the call names one.

tell me on Telegram when the report is ready

Checking the setup

ivralo doctor has a mail section and a notify section. Each says off, misconfigured (naming what is missing) or ready. Neither opens a connection, because the only real test of a send would be a send.

These settings belong in your home's .env. Keep the password and the tokens out of any repository; ivralo keeps every variable whose name ends in _KEY, _TOKEN or _SECRET, or contains PASSWORD or WEBHOOK, away from the Python worker.