Skip to main content
Uses: Python · TypeScript · CLI
Slack is usually the first place an agent needs to reach: it answers questions in a channel, posts summaries, or files what it found. With Engini the model calls Slack tools directly and never sees a bot token.

1. Connect Slack

Steps 1-2 are one-time setup, shown in the CLI because its guided flow is the fastest path - the connection it creates is immediately usable from both SDKs (and step 3 does the same discovery in SDK code):
That walks you through the credential or OAuth flow, verifies the connection, and leaves you with a connection id. Doing it from your own product instead? See Connect a customer’s app.

2. Find the tools you actually have

Tool slugs vary by connector version, so discover rather than assume:
Pick the ones your assistant needs - typically a “post message” and a “list/read messages” tool - and note their slugs. Then read one contract in full before you write any code:

3. Scope a toolset

Give the agent only what it needs. An assistant that should never delete anything simply isn’t handed a delete tool:

4. The agent loop

Identical to the monday assistant - the loop is app-agnostic:
Anthropic needs every tool result for one assistant turn in a single user message - that’s the flattening in the last line. See the monday recipe for why.

Posting without an LLM

Plenty of “Slack agents” don’t need a model at all - a scheduled job that posts a digest is just a tool call:
Wire that into CI or cron and you have notifications without writing a Slack integration.

Where to take it next

  • Scope it harder - toolsets make “read-only in #support” an API-enforced guarantee rather than a prompt instruction
  • Add a second app - bind two connections in one toolset and the agent can read Slack and file a ticket in the same turn
  • Handle failures - a Slack rate limit surfaces as isSuccess: false with the downstream status in executionInfo; see debugging