Slack notifications
Neens can post its insights (new failure modes, regressions, alert rule breaches, pre-production gate failures, judge drift and more) into the Slack channels your teams already watch. Your company, each org and each agent can have its own channels and its own rules, so the returns team hears about the returns agent and the platform team hears about everything critical, without anyone sharing a firehose.
At a glance
| Where | Settings → Integrations |
| Building blocks | Slack workspaces you connect, channels and webhooks Neens may post to, and routing rules that pick which insights go where |
| Scopes | Company, org or agent. Each one owns its own channels and rules |
| Limits | None. Connect any number of workspaces, add any number of channels, and send one rule to any number of channels |
| Who can change it | An admin, for the parts of the company they administer. Everyone else sees the channels and rules for the parts they can access, read-only |
| Delivery | Immediately, or as a daily or weekly digest, with an optional cooldown |
| What is sent | Metadata by default: titles, severities, counts and a link back to Neens. See What Neens shares with Slack |
| Acting from Slack | Triage, Mute 7d and Generate fix on new-failure-mode cards, once you link your Slack account. Every button runs as you, with your Neens permissions |
| Asking from Slack | The /neens command, link previews, a morning inbox DM, review DMs and @Neens in a thread. All run as you, and only for people who linked their account |
| Audit | Every change, and every button pressed in Slack, is recorded in the audit log (chat.* events) |
How the pieces fit
- A Slack workspace connection is made once, by an admin, with Add to Slack. Every part of your company can then use it, unless the admin who connected it limits it to their own org or agent. You can connect as many workspaces as your teams use.
- A channel (or an incoming webhook) is a place Neens may post. It is owned by your company, an org or an agent. The owner decides whether rules further down may use it too.
- A routing rule belongs to your company, an org or an agent, and says which insights to send where: insight types, a minimum severity, optional tags, which agents, and one or more channels.
Rules are additive. Every rule that matches an insight sends it, and Neens de-duplicates by
channel: if a company rule and an agent rule both send the same insight to #alerts, it is posted
there once.
Who can do what
| You are… | You can |
|---|---|
| A company-wide admin | Connect and disconnect any workspace; manage every channel and rule in the company |
| An org admin | Connect a workspace for your org; manage the channels and rules of your org and its agents |
| An admin of one agent | Connect a workspace for that agent; manage that agent’s channels and rules |
| A member or viewer | See the channels, rules and delivery log for the parts of the company you can access. You can’t change them |
A rule can only send to a channel owned by the same scope, or to a channel an ancestor scope has shared down (the Let rules for orgs and agents below this scope use this channel option). An agent’s rule can never post to another agent’s channel or to a sibling org’s channel.
Being an admin of a Slack workspace doesn’t give you any rights in Neens, and being a Neens admin doesn’t give you any in Slack. Connecting a workspace needs both: a Neens admin who can also approve apps in that Slack workspace.
Connect a Slack workspace
Open Settings → Integrations
Find Slack workspaces at the top of the tab.
Select Add to Slack
If you administer more than one scope, Neens asks Connect Slack for…. Pick your company, an org or an agent. That only records where the connection came from; by default the whole company can still use it.
Approve the app in Slack
Slack shows the permissions Neens asks for (listed below). Choose the workspace and select Allow. On Slack Enterprise Grid you can instead choose your organization, to install Neens in every workspace at once (see Enterprise Grid).
Back in Neens
You return to Settings → Integrations with a confirmation, and the workspace is listed as Active. Repeat for every workspace your teams use.
Neens asks for the smallest set of Slack permissions it needs:
| Permission | Why |
|---|---|
chat:write | Post and update messages in channels Neens has been invited to |
channels:read | List public channel names in the channel picker |
groups:read | List the private channels Neens has been invited to in the channel picker |
commands | Receive the /neens command |
links:read, links:write | Preview Neens links posted in Slack |
im:write | Send the morning inbox DM and review DMs to the people who ask for them |
app_mentions:read | Answer @Neens in a thread |
If a later Neens feature needs another permission, the workspace shows Missing permissions
and an Update permissions button. Nothing stops working in the meantime; only the new feature
waits for your approval. A workspace connected before /neens, previews, DMs and @Neens
arrived shows Update permissions until an admin approves them.
Enterprise Grid: install for the whole organization
On Slack Enterprise Grid, a Slack org admin can approve Neens for the whole organization in the Approve the app in Slack step. Neens then shows one row for the organization, labelled <organization> (organization), and every workspace in it can use Neens with no separate install.
- Requests from any workspace of the organization reach your Neens account.
- An organization and the workspaces in it belong to one Neens company. If another Neens company already connected the organization, or any workspace in it, the install ends with This Slack workspace is already connected to another Neens company, the same as for a single workspace. The same applies the other way round: a workspace inside an organization that another company connected can’t be connected on its own.
- Slack lists channels one workspace at a time, so when you add a channel from
an organization, Neens first asks Workspace in this organization. It lists only the
workspaces the app has been added to. If it lists none, or the one you need is missing, a Slack
organization admin adds the Neens app to that workspace in Slack’s organization settings first.
You can also type
/neens subscribe #channel <agent>in the workspace. - Removing the app from the organization in Slack disconnects it in Neens.
Limit a workspace to one org or agent
By default a connected workspace is usable by the whole company. To stop other teams from adding channels from it, open the row’s ⋯ menu and choose Limit to … (the org or agent it was connected from). Let the whole company use it undoes that.
Add a channel
Invite the Neens bot to the channel in Slack
In the Slack channel, type /invite @Neens. Neens can only post in channels it is a member of,
public or private. It never posts into a channel it hasn’t been invited to.
Select New channel
Under Channels and webhooks, select New channel and keep Slack channel selected.
Choose who owns it
Owned by lists only the scopes you administer. It defaults to the agent you have selected.
Pick the channel
Choose the Slack workspace, then search for the channel. If the channel you pick doesn’t have
Neens in it yet, the dialog reminds you to /invite @Neens there first.
If you choose a whole Enterprise Grid organization, also choose the Workspace in this organization the channel is in; the channel list then shows that workspace’s channels. The list holds only workspaces the app was added to: a Slack organization admin adds it to more in Slack’s organization settings.
Decide whether rules below may use it
For a company or org channel, Let rules for orgs and agents below this scope use this channel lets an org or agent admin route their own insights into it. It is off by default.
Select Add channel, then Send test message
From the channel’s row, Send test message posts a short test card and reports Test message sent or, if something is wrong, why (for example Neens isn’t in the channel).
Recipes
Critical insights for one agent, and a weekly digest for the team
“Send every critical insight for the returns agent to #returns-agent-alerts right away, and
everything else about it to #team-weekly once a week.”
Add both channels
Select the returns agent in the agent switcher. In Settings → Integrations, add
#returns-agent-alerts and #team-weekly with Owned by set to that agent (invite @Neens to
both first).
Create the critical rule
Select New rule:
- Name:
Returns agent: critical - Applies to: the returns agent
- Insight types: leave all unticked (every type)
- Minimum severity: Critical
- Delivery: Immediately
- Send to:
#returns-agent-alerts
Create the digest rule
Select New rule again:
- Name:
Returns agent: weekly digest - Applies to: the returns agent
- Minimum severity: Low (Neens switches Delivery to Digest for you)
- Delivery: Digest, How often Weekly, Day Monday, Time (UTC)
09:00 UTC(the picker also shows the time where you are) - Send to:
#team-weekly
A critical insight now reaches #returns-agent-alerts immediately. It also matches the digest
rule, so it appears in Monday’s digest in #team-weekly as well. The two rules send to different
channels, so each channel gets it once.
A Monday summary of every agent for the team
“Every Monday at 09:00 UTC, post one summary per agent to #agent-review: its KPIs, its top
failure modes and the fixes that held last week.”
Add the channel
In Settings → Integrations, add #agent-review with Owned by set to your company (invite
@Neens to it first).
Create the weekly agent digest rule
Select New rule:
- What to send: Weekly agent digest
- Name:
Monday agent review - Applies to: your company (or one org, to cover only its agents)
- Agents: All agents in scope, or Only these agents
- Day Monday, Time (UTC)
09:00 UTC - Send to:
#agent-review
Each Monday, #agent-review gets one message per agent. Changing the day or time later in the
week doesn’t send that week’s digest a second time.
One org-wide channel for every agent in an org
“Post every high-severity insight from any agent in the Customer Support org to
#support-quality, except the sandbox agent.”
- Add
#support-qualitywith Owned by set to the org. - Create a rule that Applies to the org, keep All agents in scope, and tick the sandbox agent under Except these agents.
- Set Minimum severity to High, Delivery to Immediately, and Send to
#support-quality.
New agents created in the org later are included automatically, because the rule covers the whole org.
To let each agent’s own admin route insights into that channel too, edit the channel and turn on Let rules for orgs and agents below this scope use this channel.
A company-wide “anything critical” channel
Add #neens-alerts owned by your company, then a company rule: Minimum severity
Critical, Delivery Immediately, Send to #neens-alerts. Turn on the share-down
option on the channel if teams should be able to add their own rules that post there.
An incoming webhook instead of the app
Use an incoming webhook when you can’t install the Neens app in a workspace, or want to post into a channel without inviting a bot.
Create the webhook in Slack
In Slack, create an incoming webhook for the channel (Slack’s Incoming Webhooks app, or your
own Slack app) and copy its URL. It starts with https://hooks.slack.com/services/.
Add it in Neens
Select New channel, choose Incoming webhook, give it a Display name (for example
Support weekly), choose Owned by, paste the Webhook URL and select Add channel.
Neens encrypts the URL and never shows it again; the list shows only its last few characters. To point the destination at a new webhook, edit it and choose Replace URL.
A webhook can only post. Neens can’t edit a message it posted through a webhook, so when an insight is resolved it posts a short Resolved follow-up instead of updating the original card, and a mute is not reflected there at all. Use a Slack channel through the app when you want cards to update in place.
Writing a rule
| Field | What it does |
|---|---|
| Name | Up to 120 characters |
| What to send | Matching insights, or a Weekly agent digest (see below). Fixed once the rule is created |
| Applies to | The company, org or agent whose insights the rule sees. Fixed once the rule is created |
| Agents | For a company or org rule: All agents in scope (optionally Except these agents), or Only these agents |
| Insight types | Leave all unticked for every type, or tick the types you want |
| Only insights with any of these tags | Optional. Matches insights carrying at least one of the tags |
| Minimum severity | Low, Medium, High or Critical. An insight with no severity never matches |
| Delivery | Immediately, or Digest: daily or weekly, at an hour in UTC |
| Cooldown (minutes) | 0 to 10080 (one week). See below |
| Message content | Metadata only or Redacted excerpts. See What Neens shares with Slack |
| Send to | One or more channels. Only channels this rule may use are listed |
| Rule is on | Turn a rule off without deleting it |
New rules default to High and Immediately.
Cooldown: held, never dropped
A cooldown limits how often one rule posts to one channel. After the rule sends an insight to a channel, any further insights it matches for that channel during the cooldown are held, then sent together as one summary message when the cooldown ends. Nothing is dropped. Updates to cards that were already posted (resolved, recurred) are never delayed by a cooldown.
Digests
A digest rule holds the insights it matches and posts one summary at the chosen hour (daily) or day and hour (weekly), listing each insight and its current state, so an insight that resolved in the meantime is shown as resolved rather than silently left out.
Weekly agent digest
A Weekly agent digest rule posts one summary per agent, once a week, on the day and hour (UTC) you choose: the agent’s KPIs against their targets, its top open failure modes, and the fixes that held in production that week. It ignores insight types, tags, severity and cooldown, and always sends metadata only. A section Neens could not read says so instead of showing zero. If Neens was down at that hour, the digest still goes out within the next few hours, and never twice for the same week.
Low-severity insights are usually best left to digests, so picking Low for a Matching insights rule switches its delivery to Digest (you can change it back).
When several rules match
Every matching rule counts, and each channel gets the insight once. If any of those rules wants it immediately (and is not in a cooldown), it is posted immediately; otherwise it waits for the earliest cooldown end or digest. Excerpts are included only if every rule sending to that channel asks for them.
What a message looks like
Each insight is posted as a card with its title, a short summary, its severity, the agent and company it is about, a few key numbers, and a link back to Neens. When the same insight recurs, Neens updates the original card and replies in its thread instead of posting a new one; when it is resolved, the card is updated and a reply says so.
For example, an alert rule breach on the Help Bot agent arrives in #agent-alerts as:
┃ Alert: Error rate
┃ Error rate is 25% over the last 1h.
┃
┃ Value Threshold
┃ 0.25 > 0.1
┃ Measure Window
┃ error_rate 1h
┃
┃ [ Open alerts ]
┃ High · Open · Acme Corp · Help Bot · 2026-10-14 09:30 UTCThe coloured bar on the left follows the severity (red for critical and high, orange for medium),
turns green once the insight is resolved and grey when it is muted. The same card is what you see in a notification preview:
[HIGH] Alert: Error rate — Acme Corp · Help Bot · 2026-10-14 09:30 UTC.
A digest or a cooldown summary is one message listing every held insight with its severity, its current state and a link, for example [HIGH] 2 insights since 2026-10-13 09:00 UTC.
With Redacted excerpts turned on for both the rule and the agent, a failure-mode or novelty
card also carries a short excerpt of one example conversation (User: … / Agent: …), with
personal data masked. See What Neens shares with Slack.
Muting an insight in Neens greys out its card in Slack and posts nothing new. A webhook message can’t be edited, so for a webhook destination a resolve is posted as a short Resolved: … message and a mute posts nothing.
Link your account
Buttons on Neens cards in Slack act as you, so Neens first needs to know which Neens login belongs to your Slack account. You link it once per Slack workspace (and per Neens account, if several Neens accounts share that workspace).
Press any button on a Neens card in Slack
If your Slack account isn’t linked yet, the button does nothing except reply to you privately (only you see it) with Connect your account.
Open the link and sign in to Neens
The link opens Neens. Sign in as you normally do (password, single sign-on or two-factor). The page shows exactly what will be linked: the Slack user, the Slack workspace, your Neens login and the Neens account. The link expires after 10 minutes and works once.
Select Continue with Slack
Slack asks you to sign in to Slack. This proves you are the Slack user who pressed the button, so a link forwarded to someone else can’t connect the wrong account. You land on Settings → Integrations with Your Slack account is linked.
Press the button again
From now on the buttons act as you.
Neens never links accounts by email address, and a Slack workspace admin gets no extra rights in Neens. What a button can do depends only on your role in Neens, for the agent the card is about.
Linked Slack accounts in Settings → Integrations lists the Slack accounts linked to you, with Unlink. A company-wide admin can switch to Everyone to see and unlink any account in the company. Removing someone from the company unlinks their Slack accounts at once.
Act from Slack
A card about a new failure mode (or a novel failing session) shows the failure mode, how many sessions it affects, a link to an example trace, and three buttons:
| Button | What it does | Who can use it |
|---|---|---|
| Triage | Opens the failure mode in Neens | Anyone who can see that agent in Neens |
| Mute 7d | Mutes the insight for 7 days, recorded as your rating. The card turns grey; after 7 days Neens un-mutes it and the card reopens | Members and admins of that agent |
| Generate fix | Drafts a fix for the failure mode, as if you selected Generate fix in Neens. A reply in the card’s thread links to it | Members and admins of that agent |
Each button acts once per press: pressing the same button again within a minute (a double-click) is ignored. Each button runs the same permission check as Neens itself, as you. If your role doesn’t allow an action, Slack tells you privately (Your Neens role doesn’t allow this) and nothing changes. A card from another Neens account in a shared workspace only works for people linked in that account.
Follow a fix in the card’s thread
Once a failure-mode card is posted, the fix’s progress is added as replies in that card’s thread, so one thread tells the whole story:
| Reply | When |
|---|---|
| Fix drafted | Someone pressed Generate fix |
| Fix PR opened | A pull request for the fix was opened (by the fix engine or a coding agent) |
| Fix merged | The pull request was merged |
| Fix held in production or Fix regressed in production | Neens measured the failure mode before and after the merge, with the session counts |
Replies are added only under a card that was actually posted to that channel. Incoming webhooks can’t be threaded, so a webhook channel gets these as separate messages, without buttons.
The /neens command
Type /neens in any channel or DM of a connected workspace. Replies are visible only to you,
and every command runs as you, with your Neens permissions. If your Slack account isn’t linked yet,
/neens only replies with how to link it (or type /neens link).
| Command | What it does | Example |
|---|---|---|
/neens status [agent] | What changed in the last 7 days: new failures, regressions, metric anomalies, fixes waiting for review and fixes that held. With an agent, also its business KPIs against target | /neens status Returns Bot |
/neens failures [agent] | The top failures right now, ranked by how many sessions they hit, with links | /neens failures |
/neens subscribe #channel <agent> | Sends the agent’s high and critical insights to the channel, immediately. Creates a channel and a routing rule for that agent, exactly as Settings → Integrations would. Needs admin rights on the agent | /neens subscribe #returns-alerts Returns Bot |
/neens review <agent> | Sends you the next trace from your review queue as a DM, with Pass and Fail | /neens review Returns Bot |
/neens inbox on [hour], /neens inbox off | Turns your morning inbox DM on (at the hour you give, 0–23 in UTC) or off | /neens inbox on 8 |
/neens link, /neens unlink | Link your Slack account, or unlink it | |
/neens use <account> | Pick the Neens account to use when your Slack account is linked in several | /neens use acme |
/neens help | Lists the commands |
The agent is matched by its name (or its slug); quotes are optional. With no agent, status and
failures cover every agent you can open, and subscribe and review ask which one you mean.
Neens only ever lists agents you can open, so a name you can’t access gets No agent called … that
you can open in Neens. Use here instead of #channel to subscribe the channel you are typing
in. If Neens isn’t in that channel yet, the reply tells you to type /invite @Neens there.
/neens subscribe is a shortcut, not a different system: the channel and rule it creates show up
in Settings → Integrations, where you can change or delete them, and the audit log records
them as yours, from Slack.
Link previews
When someone posts a link to Neens in Slack, Neens adds a preview under it:
| Who posted the link | Preview |
|---|---|
| A person who linked their Slack account and can open that page in Neens | The page’s name and a few facts: a failure mode’s name, its session count and status; a fix’s title and status; a trace’s agent, status and duration |
| Anyone else (not linked, or can’t open that page) | Only the kind of page, for example Neens · Failure mode |
A preview is visible to everyone in the channel, so it never includes trace content, even for
agents that allow excerpts in cards. Links need the agent in them to get a full preview, as links
copied from Neens do (…/clusters/<id>?project=<agent>). Links to other sites are left alone.
Your morning inbox DM
Neens can DM you each morning with the items that need you, ranked like your action inbox in Insights: each item’s title, severity, agent and how many sessions it hit in the last 24 hours, plus a link. It lists only agents you can open, and it is sent only on days when something needs you.
It is off until you turn it on, for each linked Slack account:
- in Neens: Settings → Account → Slack, switch Morning inbox DM on and pick Send at (shown in UTC and in your own time), or
- in Slack:
/neens inbox on 8(8:00 UTC), and/neens inbox offto stop.
The DM arrives in the Neens app’s Messages tab in Slack.
Review traces from Slack
Label traces without leaving Slack: type /neens review <agent> and Neens DMs you the next trace
from your review queue for that agent, with why it was picked and
Pass and Fail buttons. Your verdict is saved as your label, exactly as on the Review
page, and is what judges are aligned against. The next trace follows
automatically until your queue is done.
- The DM shows a short, redacted excerpt of the trace (the user’s first message and the agent’s final answer, with personal data masked) only when the agent’s Data shared with Slack setting is Redacted excerpts. Otherwise it shows the reason and a link to the trace.
- Reviewing needs the member or admin role on the agent. A viewer gets Your Neens role can’t review traces in ….
Ask @Neens in a thread
Mention @Neens with a question, in a channel Neens is in, and it answers in the thread:
@Neens what’s failing in Returns Bot this week?
@Neens which fixes held after release for the Stylist agent?
@Neens how do I set up a weekly digest?
- It answers as you, from the Neens data you can read, using the same tools as the assistant in Neens, but read-only: from Slack it can’t create, change or run anything.
- It uses the LLM connection your agent uses in Neens. If none is set up it says so; an admin can add one in Settings → LLM providers.
- Ask about an agent you can’t open and it refuses, without reading anything about it. Refusals and setup hints are shown only to you, not to the channel.
- Links in its answers are live only when they point to Neens; anything Slack would treat as a mention or a channel-wide notification is shown as plain text.
- Each person can ask a few questions a minute. Past that, it replies (only to you) that it is answering too many questions; wait a minute and ask again.
- Its answer is visible to the channel, so it is told never to quote trace content. Neither your question nor its answer is stored in Neens.
- If it can’t answer, it replies with a short reference such as (ref: 3f2a…); give it to your Neens admin to look up.
Several Neens accounts in one workspace
This only happens when your Neens deployment lets several Neens accounts share one Slack
workspace (by default a workspace belongs to one account). If your Slack account is linked in more
than one Neens account that shares the same Slack workspace, /neens, link previews and @Neens need to know which one you mean. They ask you
to choose once:
/neens use acmeButtons on cards don’t need this: each card already belongs to one Neens account.
The delivery log
Delivery log at the bottom of the tab lists every message Neens tried to send in the last 30 days, for the channels you can see, with what happened:
| Status | Meaning |
|---|---|
| Waiting to send | Queued, or waiting to retry after Slack asked Neens to slow down or was unavailable |
| Sending | Being sent now |
| Sent | Posted |
| Held for a digest or cooldown | Will go out with the next digest or when the cooldown ends (the time is shown) |
| Sent in a batch | Went out as part of a digest or cooldown summary |
| Not sent | Deliberately skipped, for example the channel is off or the workspace is disconnected |
| Failed | Slack refused it for a reason a retry can’t fix, such as Neens isn’t in the channel |
| Gave up | Slack stayed unavailable for too long (72 hours), so Neens stopped retrying |
When Slack is down, messages wait and are delivered once it recovers; they are not lost.
Disconnect, reconnect and update permissions
- Disconnect (the row’s ⋯ menu) tells you how many channels stop receiving messages, then removes the connection and tells Slack to revoke Neens’ access. Your channels and rules stay in Neens, so reconnecting later brings them back without setting anything up again.
- A Slack workspace can be connected to only one Neens company at a time: Slack gives the Neens app a single access token per workspace, so a second company would see and could post in the first company’s channels. If your deployment’s operator has allowed a workspace to be shared and another Neens account also uses it, Neens removes only your connection and leaves the app in place for them. The confirmation says so.
- To remove Neens from Slack’s side instead, open Slack’s Manage apps page for your workspace, pick Neens and select Remove App. The connection then shows as Disconnected in Neens.
- Only an admin of the scope a workspace was connected from (or of a scope above it) can reconnect a workspace that was disconnected, so an agent admin can’t undo a company admin’s disconnect.
- An org or agent admin can disconnect a workspace they connected only while no channel outside their scope uses it; otherwise a company-wide admin has to.
- A workspace someone removed from Slack’s side shows as Disconnected. One whose access Slack rejected shows Needs attention. Use Reconnect from the ⋯ menu.
- Deleting an agent removes its channels, rules and delivery history, and disconnects a workspace that was connected from that agent and used only by it.
Demo workspaces
A demo environment comes with a workspace labelled Demo: messages are not sent, with example channels and rules. Neens routes insights through those rules for real, and the delivery log shows what would have been posted as Not sent (demo workspace). Nothing is ever sent to Slack from a demo workspace.
The company admin also has a demo Slack account linked, with the morning inbox DM switched on
under Settings → Account → Slack. A demo link can’t act and never receives a message, so
/neens, previews and @Neens need a real workspace.
Manage it with the API
Everything on the tab is also available under /api/integrations/, with a session token or an
admin’s credentials (a project API key can read but not change anything). For example, to create
a rule:
curl -s -X POST https://neens.example.com/api/integrations/chat/rules \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Returns agent: critical",
"scopeType": "project",
"scopeId": "<agent id>",
"minSeverity": "critical",
"mode": "immediate",
"destinationIds": ["<channel id>"]
}'| Route | Purpose |
|---|---|
GET /api/integrations/chat/scopes | The company, orgs and agents you may view and manage |
GET /api/integrations/chat/installations | Connected Slack workspaces |
GET /api/integrations/chat/installations/{id}/teams | The workspaces a connection covers (every workspace of an Enterprise Grid organization the app was added to) |
GET /api/integrations/chat/installations/{id}/channels | A workspace’s channels; for an organization, pass teamId from the list above |
GET, POST /api/integrations/chat/destinations | Channels and webhooks |
POST /api/integrations/chat/destinations/{id}/test | Send a test message |
GET, POST /api/integrations/chat/rules | Routing rules |
GET /api/integrations/chat/insight-types | The insight types and severities a rule can match |
GET /api/integrations/chat/deliveries | The delivery log |
GET /api/integrations/chat/prefs, PUT /api/integrations/chat/prefs/{linkId} | Your morning inbox DM setting, per linked Slack account |
The full reference, with every field and error code, is in the API reference.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Add to Slack isn’t shown | You don’t administer any scope, or Slack isn’t set up on this Neens deployment (the tab says so) | Ask an admin; incoming webhooks work either way |
| A channel shows Neens isn’t in this channel | The bot wasn’t invited | Type /invite @Neens in the channel, then Send test message |
| New channel for an organization says Choose a workspace in this Slack organization | An Enterprise Grid organization covers several workspaces, and Slack lists channels for one at a time | Pick the Workspace in this organization first |
| New channel for an organization lists no workspaces, or says Neens isn’t added to that workspace | The app was approved for the organization but not added to that workspace | A Slack organization admin adds the Neens app to the workspace in Slack’s organization settings, then you try again |
| A private channel is missing from the picker | Neens only sees private channels it has been invited to | Invite @Neens, then search again |
| A rule can’t pick a channel | The channel belongs to another scope and isn’t shared down | Edit the channel’s owner scope, or turn on its share-down option |
| A rule shows only allows metadata, so excerpts are not sent | The agent’s own setting caps it at metadata | Change Data shared with Slack for that agent, if you mean to |
| Nothing arrives for low-severity insights | The rule is a digest | Wait for the digest hour, or switch the rule to Immediately |
| A webhook destination shows Webhook no longer works | The webhook was deleted or its channel archived in Slack | Create a new webhook and use Replace URL |
| You came back from Slack with The connection was started in a different browser or session | The install was finished in a different browser | Start Add to Slack again from the same browser |
| A Slack button only replies Connect your account | Your Slack account isn’t linked to Neens in the account that owns the card | Follow the link it sends you (Link your account) |
| A Slack button replies Your Neens role doesn’t allow this | Your role for that agent is viewer | Ask an admin of the agent to change your role, or act in Neens |
| Linking ends with A different Slack account signed in | Slack was signed in as someone else in that browser | Sign in to Slack as yourself, press the button again and use the new link |
| A card has no Mute 7d or Generate fix button | It was sent through an incoming webhook, or it isn’t a failure-mode card | Use Triage or open it in Neens |
| You came back from Slack with This Slack workspace is already connected to another Neens company | Another Neens company already uses that workspace, and a workspace can’t be shared between companies | Use a workspace your company owns, or an incoming webhook; ask your Neens operator if the two companies really should share it |
| A channel shows Neens can’t post in this channel | The channel only lets certain people post (for example an announcement-only channel) | Allow the Neens app to post there in the channel settings, or pick another channel, then Send test message |
| A workspace shows Needs attention | Slack rejected Neens’ access token (it was revoked, or the workspace was deactivated) | Reconnect from the ⋯ menu |
| A workspace shows Missing permissions | It was connected before Neens asked for a permission it now needs | Select Update permissions and approve in Slack |
| Send test message works but no insights arrive | The rule is turned off, its minimum severity is higher than the insights you expect, it is limited to other agents, or the channel is turned off | Check the rule’s fields and the channel’s switch, then look for the insight in the Delivery log |
Slack says /neens failed, or the command doesn’t exist | The workspace was connected before /neens arrived | An admin selects Update permissions on the workspace |
/neens subscribe replies Only an admin of … can subscribe a channel | You aren’t an admin of that agent | Ask one of its admins, or ask for the rule in Settings → Integrations |
/neens asks you to pick an account with /neens use | Your Slack account is linked in several Neens accounts on this workspace | Type /neens use <account> once |
| A Neens link shows only Neens · … | The person who posted it isn’t linked, can’t open that page, or the link has no agent in it | Link your account, or copy the link from Neens |
| @Neens says no LLM connection is set up | The agent has no LLM connection in Neens | An admin adds one in Settings → LLM providers |
| @Neens replies I’m answering too many questions right now | You asked several questions within a minute, or many people are asking at once | Wait a minute and ask again |
/neens review says Check your DMs but no DM arrives | The workspace was connected before DMs arrived and is missing the permission to send them | An admin selects Update permissions on the workspace |
| A Pass or Fail button on someone else’s review DM says the button isn’t valid | Review buttons only work for the person the DM was sent to | Run /neens review <agent> yourself |
| No morning DM arrives | It is off, nothing needed you that day, or your link was removed | Check Settings → Account → Slack; /neens inbox shows the current setting |
Related: What Neens shares with Slack · Insights · Alert rules · Members & roles