Slack Source Adapter
Slack capture is a workspace-scoped, API-read-only adapter owned by
source.absorb, not a browser job with direct wiki-write authority.
Current State
slack-sync is a paused Automation V2 definition. The durable collector is now
implemented, but no dedicated Slack OAuth token with the exact full read scope
set is configured. Reactivation requires one workspace fixture proving list,
history, thread pagination, edits, attachments, identity, and complete-run
receipts.
Route
After readiness passes, run the API collector and then plan:
SLACK_READ_TOKEN=... \
SLACK_READ_SCOPES=channels:read,channels:history,groups:read,groups:history,im:read,im:history,mpim:read,mpim:history,files:read \
npm run sync:slack -- --hours 8
npm run brain -- workflow plan source.absorb source:slack.archive
The collector calls only auth.test, conversations.list,
conversations.history, conversations.replies, and authenticated private-file
GETs. It cursor-pages every accessible public/private/DM/MPIM conversation,
rehydrates a thread as one semantic unit, preserves edit payloads, freezes
attachment bytes, and versions the complete unit by digest. It never calls
conversations.mark or any chat/reaction/mutation method. Slack documents the
required per-conversation read/history scopes and cursor pagination for these
routes. Source: conversations.list;
conversations.history;
conversations.replies;
auth.test
Browser automation remains useful for a user-directed visual inspection, but it is not the scheduled source transport: opening a Slack conversation can change server-side read state, contradicting the collector's zero-mutation contract.
digimata/slack 0.5.2 is retained as an alternative CLI adapter candidate. Its
MIT source offers list/thread/search plus JSON output, multiple workspaces,
name-ambiguity refusal, local mode-0600 credentials, bounded 429 retry,
--dry-run identity/target disclosure, and prompted/--yes destructive
commands. Prefer its supported private-app user token (xoxp) or bot token
(xoxb); the xoxc plus browser-cookie route is explicitly unsupported and
session-coupled. Pin the checksum/revision and build read-only fixtures before
use: the captured 32-blob repository has a release workflow but no detected
tests, so its README and guardrails are claims rather than sufficient connector
proof. Do not install it globally from the one-line script during review.
Its proposed slack render design is a useful future adapter shape—selected
channels only, deterministic incremental Markdown, cursor/edit/deletion and
tombstone semantics, downloads off by default—but it is an unimplemented idea
document, not a shipped command. Source: X/@meatmagi 2084056274451447902;
digimata/slack@950569ce, README, Cargo manifest, source tree, release workflow,
and docs/.ideas/slack-render.md, reviewed 2026-08-12
Completion Proof
- workspace and account boundaries remain distinct;
- missing scopes, rate limits, edit-history, and attachment gaps are explicit;
- no send, react, archive, mark-read, edit, or delete action occurred;
- transient chat remains evidence rather than a wiki page;
- any proposed stable-owner diff appears once in Daily Brief.
Timeline
-
2026-08-12 | Replaced the unimplemented scheduled browser route with a read-only Slack Web API collector. It validates all four conversation read/history scope pairs plus
files:read, derives workspace/actor identity, cursor-pages conversations and threads, freezes attachments, and writes content-addressed units plus a complete-run receipt before freshness moves. Browser inspection remains manual because page visits can mutate read state. Source:scripts/lib/slack-read.ts;scripts/sync-slack.ts; Slack Conversations API documentation -
2026-08-12 | Retained
digimata/slack0.5.2 as a guarded CLI adapter candidate: supported token path first, JSON and dry-run/ambiguity/destructive safeguards preserved, unsupported cookie auth isolated, and no install until read-only fixtures compensate for its zero detected tests. Itsslack rendernote remains an unimplemented design. Source: X2084056274451447902;digimata/slack@950569ce -
2026-08-12 | Recast the legacy four-hour browser runbook as a paused, workspace-scoped, proposal-only source adapter under
source.absorb. Source:automations/slack-sync.md -
2026-06-30 | Original Slack sync page created. Source:
automations/slack-sync.md