--- id: "87c66e59-0919-487f-9134-d3b7e35a202b" name: "app.slack.com" micro_summary: "Slack web UI helper hub: public `slack_*` browser-harness helpers in the config-workspace agent_helpers.py cover notifications, threads, open loops, search, permalinks, demotion signals, and draft-only replies for app.slack.com." status: "in_progress" see_also: [] scope: "Domain hub for Slack web UI skills under browser-harness. Covers logged-in app.slack.com interaction patterns for extracting notifications, threads, search results, permalinks, priority/demotion signals, and safe draft preparation without Slack API or Socket Mode." warnings: "This subtree is app.slack.com browser UI only. Do not route these skills through api.slack.com, Slack API tokens, or Socket Mode unless the node explicitly says so." --- ## Helper family Slack web UI helpers now live in `~/.config/browser-harness/agent-workspace/agent_helpers.py` and are exposed in the stdin runner (see Runtime Invocation) as public `slack_*` functions. Use them from an already-running Chrome session; the helpers operate on app.slack.com only. Start with `slack_open()` if the current tab is not Slack. It uses `new_tab()` for first navigation. For task-specific work, read the matching child skill; each child is now a helper usage note rather than a raw selector recipe. ## Shared contract The helpers return JSON strings. Typical usage: ```python import json items = json.loads(slack_get_notifications(limit=10)) ``` They do not use Slack API, Socket Mode, or api.slack.com. The intended downstream product shape is a small, reviewable set of items with source links, context, confidence, and demotion reasons — not a Slack feed clone. ## Verification 2026-06-01: stdin function discovery showed the expected Slack helper family loaded. Targeted smoke calls covered notification fetching, thread context, permalink capture, demotion/open-loop scoring, search execution, reply-draft label guarding, and safe synthetic-composer draft insertion. Pytest passed in the browser-harness repo.