Skip to content

Add the Slack focus board as the dashboard's Slack tab - #53

Merged
elitecoder merged 7 commits into
mainfrom
slack-focus-tab
Oct 21, 2026
Merged

elitecoder merged 7 commits into
mainfrom
slack-focus-tab

Conversation

@elitecoder

Copy link
Copy Markdown
Owner

Summary

This adds a Slack tab to the dashboard. It's the standalone focus board (OneAdobe/focus-board) ported into Assistant: the Slack threads where the next move is yours, in Do first, Promise, This week, and Optional, plus Done by you, Just read, Set aside, and Auto-resolved.

  • Refresh from Slack starts bin/slack-focus.py in the background through todo-server.py. The button shows each step, and the page reloads itself when the run finishes.
  • Done and Undo check a row off. A row comes back when its thread gets a new reply.
  • Everything about you lives in the slack_focus block of ~/.assistant/comms/config.json. Your Slack ID, name, and workspace come from the token, and the token stays in ~/.zprofile.
  • The pipeline is in src/assistant/slack_focus/. Sorting is rules only. One model call, with tools off, writes the titles; it's metered as caller="slack_focus".
  • The Slack client refuses any method outside a read allowlist, so it never posts, reacts, or marks anything read.

The README's "Slack focus list" section has setup steps, and the CHANGELOG lists every behavior change from the focus board.

Testing

  • Full suite with coverage: 3,174 passed. Every changed Python line and branch, and all 80 changed dashboard JavaScript lines (47 blocks), are covered. All 39 targeted mutations were rejected.
  • Real browser run against a copy of the server started like launchd does, with no token in its environment. The token resolved from ~/.zprofile, a 7-day pull of 304 threads took about 4 minutes, and the page reloaded with the new list. The phone-width layout has no horizontal scroll.
  • Real model step with your account: 52 seconds, about $0.17, and the top asks matched the ones you'd pick by hand.
  • Two independent reviews. Both cleared after fixes for check-offs that came back during a refresh, a timeout that retry loops could swallow, and browser coverage that a page reload had hidden.

After merging

Restart the dashboard server so it picks up the new routes:

launchctl kickstart -k gui/$(id -u)/com.assistant.assistant-todo-server

🤖 Generated with Claude Code

elitecoder and others added 7 commits October 20, 2026 21:24
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… state

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…udge feature name)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the model on it, retry the run lock

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… gaps with tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@elitecoder
elitecoder merged commit c693c74 into main Oct 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant