Workflow

Slack Second Brain

A team-memory pattern that extracts decisions and useful context from channels into a shared knowledge layer.

Workflow field plateSlack Second Brainhx-workflow-slack-second-brainLoading visual preview…
View full-size visual

Slack Second Brain

What it is

A team-memory pattern that extracts decisions and useful context from channels into a shared knowledge layer.

Operating shape

  • Difficulty: advanced
  • Cadence: daily
  • Category: team-memory

Core concepts

  • Slack Second Brain
  • Memory
  • Knowledge Curation
  • Privacy
  • Retention

Source evidence

  • plugin:platforms/slack — Explicit Source Map scope boundary: The platform plugin is outside the approved Core scope.
  • Seven Cost-Aware Hermes Workflows That Go Beyond Chat
  • Building a Personal AI System with Hermes, Local Models, Automation, and a Shared Knowledge Base

Implementation pattern

Outcome

Connect Hermes to one bot-invited Slack test channel with explicitly allowlisted users, then run a custom, review-first capture routine that turns selected decisions and action items into a provenance note without silently writing memory.

Before you start

  • Understand the boundary: Slack is a supported Hermes gateway platform; the “second brain” capture policy in this lab is a custom workflow, not a built-in Slack automation or knowledge-base product.
  • Use a test workspace/channel and synthetic messages. Record your Slack Member ID; obtain tokens only after the app is installed.
  • Turn memory review on from a trusted local Hermes session with /memory approval on; invite the bot only to the test channel.

Input and output contract

Input is only messages that explicitly mention the bot in the allowlisted channel during a named time window. Output is a draft note with message permalink/ID, author, timestamp, verbatim decision or action, owner, due date or unknown, and capture reason. General chatter, private channels, DMs, files, and earlier history are excluded. Memory writes remain pending until a human approves them.

STATUS: PENDING REVIEW
- Decision: Use the staging fixture first
  Source: <Slack message permalink or ID>, <timestamp>, <author>
  Owner: unknown
  Due: unknown

Build it

First generate the supported manifest:

hermes slack manifest --write

This command only writes ~/.hermes/slack-manifest.json; it does not create, install, authorize, or configure a Slack app. In Slack’s app backend, choose Create New App → From an app manifest, select the test workspace, paste that JSON, review it, and create the app. The generated manifest enables Hermes’ complete Slack feature surface and is broader than this small lab.

For a manual least-privilege public-channel version of this fixture, use only bot scopes chat:write, app_mentions:read, channels:history, channels:read, and users:read, and subscribe only to app_mention and message.channels. This reduced app will not expose Hermes’ complete DM, private-channel, file, or native slash-command feature set. Do not add those capabilities unless the test needs them.

In either path, enable Socket Mode, create an app-level token with only connections:write, install the app to the test workspace, and copy the resulting xapp- and xoxb- tokens once. Then configure the test identity and start in the foreground:

hermes gateway setup
hermes gateway

In hermes gateway setup, select Slack and enter the two tokens plus only your Member ID in SLACK_ALLOWED_USERS. In Slack, open the test channel and run /invite @<your-test-bot>; Hermes never auto-joins a channel.

In the test channel, post two synthetic messages—one explicit decision and one piece of chatter—then mention the bot with: Capture only explicit decisions and assigned actions from this test thread. Return a PENDING REVIEW note with message provenance; ignore chatter; do not save memory yet.

Expected output contains the decision, excludes chatter, and carries a source identifier. Review staged memory with /memory pending; approve the correct entry or reject it with /memory reject <id>.

Verify it

  • An allowlisted member can mention the bot; an unlisted member cannot obtain an agent response.
  • The note contains the exact source message ID/permalink, author, and timestamp.
  • The chatter fixture is absent, and missing owner/due date is unknown rather than inferred.
  • /memory pending shows any proposed memory write before persistence; reject one test item to prove the gate.
  • A message in a channel where the bot is not invited is not ingested.
  • hermes gateway status shows the intended profile and Slack platform; no test requires a public HTTP endpoint because Socket Mode uses WebSockets.

If it fails

  • If the bot receives no channel events, verify the documented OAuth scopes, event subscriptions, Socket Mode token, and channel invitation.
  • If an unauthorized user receives a response, stop the gateway, repair SLACK_ALLOWED_USERS, rotate exposed tokens, and repeat the negative test.
  • If chatter is captured, tighten the custom selection rule and discard the note; this is not an automatic built-in curation guarantee.
  • If provenance is unavailable, leave the item out rather than creating an unsourced memory.
  • If import or install fails, return to Slack’s App Manifest or OAuth & Permissions page; rerunning manifest --write cannot install or repair the Slack-side app.

Safety, privacy, and cost

Slack tokens are secrets. Use the smallest workspace/channel scope, explicit Member-ID allowlists, and a synthetic test channel; do not enable allow-all. Respect workspace retention, consent, and employee-monitoring rules before reading real conversations. Every agent response can incur model cost, so capture only on explicit mention and keep memory approval enabled. End with Ctrl-C and confirm the Gateway stopped. For a disposable app, uninstall it from the test workspace, revoke the app-level and bot tokens in Slack, and remove the test-only token values from Hermes’ local secret configuration. Do not represent this custom capture routine as a built-in archival or compliance system.

Official references