Skip to content

Add Slack Voice Operator — LLM-summarised channels, @mention daemon, voice send - #365

Open
hassan1731996 wants to merge 4 commits into
openhome-dev:devfrom
hassan1731996:feature/slack-voice-operator
Open

Add Slack Voice Operator — LLM-summarised channels, @mention daemon, voice send#365
hassan1731996 wants to merge 4 commits into
openhome-dev:devfrom
hassan1731996:feature/slack-voice-operator

Conversation

@hassan1731996

Copy link
Copy Markdown
Contributor

What this adds

A voice-first Slack companion that goes beyond raw message reading with three differentiators:

  1. LLM summarisation — channel activity condensed to 2–3 sentences focused on decisions, blockers, and action items — never a raw dump
  2. Background @mention daemon — polls every 10 minutes, interrupts only when there are new @mentions, urgency-scored (HIGH/MEDIUM/LOW), batched into one spoken alert
  3. Natural resolution — "message Jake" or "summarise my product channel" works via fuzzy match + LLM fallback; no exact handle required

Intents

Intent Example
MENTIONS "any mentions?" / "did anyone ping me?"
SUMMARY "what's happening in #engineering?"
SEND "message Jake: I'll be 5 minutes late"
CHANNELS "list my Slack channels"
SETUP first run / "change my Slack settings"

SDK patterns applied

  • Platform profile (user_profile.md / user_summary.md) read first for user name; only asks if empty
  • Passive data capture: SEND extracts recipient + message in one LLM call; single follow-up only if both fields are missing
  • EXIT_WORDS = standalone tokens only; EXIT_PHRASES for multi-word exits
  • Storage upsert: create_key first → fallback update_key
  • Background daemon: background_daemon_mode set before CapabilityWorker
  • resume_normal_flow() in finally on foreground; at top of watch_loop() in daemon
  • All API calls via get_api_keys("slack_bot_token") — no hardcoded credentials

Setup required

User creates a Slack app, adds scopes (channels:history, channels:read, groups:history, groups:read, im:history, im:read, chat:write, users:read), installs to workspace, and saves the bot token in OpenHome settings as slack_bot_token. First-voice-run setup resolves their Slack User ID by display name (fully voice-native, no copy-pasting IDs).

Validation

✅ All checks passed!

Voice-first Slack companion with LLM-powered channel summaries, proactive @mention alerts via background daemon, natural name/channel resolution, and voice message sending with confirmation.
@hassan1731996
hassan1731996 requested a review from a team as a code owner August 14, 2026 21:51
@github-actions

Copy link
Copy Markdown
Contributor

🔀 Branch Merge Check

PR direction: feature/slack-voice-operatordev

Passedfeature/slack-voice-operatordev is a valid merge direction

@github-actions

Copy link
Copy Markdown
Contributor

✅ Community PR Path Check — Passed

All changed files are inside the community/ folder. Looks good!

@github-actions github-actions Bot added the community-ability Community-contributed ability label Aug 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Ability Validation Passed

📋 Validating: community/slack-voice-operator
  ✅ All checks passed!

@github-actions

Copy link
Copy Markdown
Contributor

🔍 Lint Results

🔧 Formatting fixes available

This PR is from a fork, so fixes could not be pushed automatically. Download the python-lint-results artifact from the workflow run for the patch file, then run:

git apply autofix.patch

__init__.py — Empty as expected

Files linted: community/slack-voice-operator/background.py community/slack-voice-operator/main.py

✅ Flake8 — Passed

✅ All checks passed!

hassan1731996 and others added 2 commits August 20, 2026 17:22
- Replace get_api_keys("slack_bot_token") with get_slack_key() — platform OAuth
- Replace requests HTTP calls with slack_sdk WebClient method calls
- Use auth_test() to resolve user ID directly — removes display name setup question
- Catch SlackApiError instead of checking result.get("ok")
- Simplify setup flow and update README to reflect platform-linked auth

@uzair401 uzair401 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address these blockers before merging:

  • get_slack_key() does not exist in the current SDK. Use the supported get_token("slack") API.
  • Verify the get_single_key() response shape. The implementation may need to unwrap the stored value before reading the Slack configuration.
  • Remove resume_normal_flow() from the background worker.
  • Add pagination for Slack history, channels, and users.
  • The “all channels” option currently monitors only the first 10 channels.
  • Handle empty or malformed LLM responses safely.
    Also, OpenHome already has an official Slack ability available in the Marketplace. Please review it, clarify the overlap, and link to it in the README.

@Rizwan-095
Rizwan-095 deleted the branch openhome-dev:dev September 2, 2026 07:03
@Rizwan-095 Rizwan-095 closed this Sep 2, 2026
@Rizwan-095 Rizwan-095 reopened this Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-ability Community-contributed ability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants