NanoClaw

NanoClaw tightens mention-sticky routing as Slack setup goes one-click

NanoClaw’s new Slack setup path exposed two routing details: mention-sticky subscription should begin on an actual mention, and the bot needs app_mentions:read. A setup announcement places those fixes inside a simpler operator flow.

← Back to homeOriginal source ↗

nanocoai/nanoclaw PR #3422 is the inspected primary source: “fix(router): mention-sticky subscribes on a mention, not on a session….” The related records below were inspected as supporting context rather than independent confirmation.

The facts

- nanocoai/nanoclaw PR #3422 was created 2026-08-20T20:40:25Z and was open at inspection; its title is “fix(router): mention-sticky subscribes on a mention, not on a session….” - nanocoai/nanoclaw PR #3423 was created 2026-08-20T20:59:21Z and was open at inspection; its title is “fix(add-slack): add missing app_mentions:read bot scope.” - nanocoai/nanoclaw PR #3421 was created 2026-08-20T16:35:31Z and was closed at inspection; its title is “docs+setup: announce one-click Slack agents.” - The repository reported 30580 stars, 928 open issues, default branch main, and last push 2026-08-20T20:29:36Z. - The latest tagged-release baseline checked was v2.2.0 published 2026-08-13T20:43:27Z.

What changed

nanocoai/nanoclaw PR #3422 reports: Type of Change [ ] **Feature skill** - adds a channel or integration (source code changes + SKILL.md) [ ] **Utility skill** - adds a standalone tool (code files in.claude/skills/ /, no source changes) [ ] **Operational/container skill** - adds a workflow or agent skill (SKILL.md only, no source changes) [x] **Fix** - bug fix or security fix to source code [ ] **Simplification** - reduces or simplifies source code [ ] **Documentation** - docs, README, or CONTRIBUTING changes only Description Fixes #3369. On a mention-sticky wiring, the agent starts replying to a group it was never addressed in. evaluateEngage in src/router.ts asked whether a session row existed for (agent, messaging group, thread) and treated that as the subscription. But a session row is also created for context the agent was never asked about: with ignored_message_policy='accumulate', the *first* ambient message in a group creates the session to hold it, so the *second* one finds a session and engages. Accumulation exists so the history is there if the thread ever engages the agent — it must not itself be the engagement. The evidence for "were we ever addressed here" is already recorded: messages_in.trigger is 1 for a message that woke the agent and 0 for one stored as context only. So the fix asks the mailbox — a new hasEngagedMessage()

nanocoai/nanoclaw PR #3423 reports: Problem /add-slack step 6 subscribes the bot to the app_mention event: 6. Event Subscriptions →... under "Subscribe to bot events" add: message.channels, message.groups, message.im, **app_mention**. But the scope list in step 2 omits app_mentions:read, which that event requires: 2. OAuth & Permissions → add these Bot Token Scopes: chat:write, im:write, channels:history, groups:history, im:history, channels:read, groups:read, mpim:read, users:read, reactions:write, files:read, files:write. Following the walkthrough literally produces an app that cannot receive app_mention. That matters here because the wiring's default engage_mode is mention / mention-sticky, so a channel-wired agent stays silent. How it surfaced Creating the app from a manifest built out of the documented scope list is rejected with: We can't translate a manifest with errors. Slack highlights the bot_events block, not the missing scope, so the message points away from the cause. Adding app_mentions:read clears it immediately; the app then creates with 13 scopes and all 4 bot events, and an @mention in a private channel gets a reply over Socket Mode. Change Adds app_mentions:read to the scope list. Applied to **both** the Socket Mode and webhook variants, which carry the same list. Docs only, no code, no behavior change to existing installs. Existing installs that already receive mentions are unaffected. Anyone whose bot ignores @mention can add the single scope in **OAuth & Permissions** and reinstall. Verified on

nanocoai/nanoclaw PR #3421 reports: docs+setup: announce one-click Slack agents The announcement layer over the default flip (#3404 — this PR stacks on it and retargets when it merges): **README banner** under the masthead: Add Agent to Slack — run setup, pick Slack, "Create it for me"; app + avatar + workspace install in one step, teammates arrive as their own bots with rooms and canvases. **Quick Start** channel list now leads with Slack (it wasn't listed at all). **Wizard channel picker** highlights Slack with a NEW!! one-click install hint. Content only — no behavior changes. setup/ suite 278 passing, tsc --noEmit clean. Generated with Claude Code

Why it matters

One-click channel setup is only real when scopes and routing semantics match. Subscribing on session creation or omitting mention visibility can produce silent non-delivery despite a successful installation. The operator test is whether the system remains bounded and its receipts still describe the action after failure, retry or restart.

Current

The primary record was open when captured on 2026-08-21. The tagged-release baseline was v2.2.0 published 2026-08-13T20:43:27Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.

Evidence

The primary URL is https://github.com/nanocoai/nanoclaw/pull/3422. Supporting records are https://github.com/nanocoai/nanoclaw/pull/3423 and https://github.com/nanocoai/nanoclaw/pull/3421. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.

Source boundary

Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.

Operator take

Validate required Slack scopes during setup, trigger sticky routing only from observed mentions, and verify delivery in both addressed and unaddressed channel traffic. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.

Caveat

Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.

Source inspected; source state, environment and release boundary remain explicit.