Repository navigation
Conversation
…prove from there - Socket Mode client (no public URL, no new dependencies) - /codeoid auth <key>: each allowlisted Slack user signs in with their own ZeroID key; a slash command isn't posted, so the key doesn't stay in Slack - a DM goes to the conductor (made on first use with the user's own token) or an attached session; replies come back to the DM - approval cards with Approve/Deny, naming the workstream, risk and sandbox; only the user a card was sent to can press it - a DM when another of your sessions waits on you (SessionManager.onNeedsOwner) - docs/slack.md: setup with an app manifest, and use Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it came to, fast acks without duplicate prompts, pasted keys refused - a card is bound to the sign-in and session it came with; re-signing in drops it (the Telegram GHSA-4g69 rule) - events and presses are acknowledged at once and handled in order; a retried event is dropped; a slow slash command answers at response_url; a refreshed connection replaces the old one only once it is up - a key or token pasted into the DM is never sent on - codeoid's Slack variables are CODEOID_SLACK_* (kept from every agent and server config like the rest of CODEOID_); settings manifest entries - attaching shows what the session already waits on; a card answered elsewhere closes (PendingToolApproval.messageId) - model text escaped, no unfurling; the DM opened at sign-in (im:write); question tools point to the web UI; cut text says so; optional CODEOID_SLACK_TEAM_ID; notices rate-limited; API calls time out Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e user's handling never blocks another's - cards show the command, the file and what it writes, or the plan, from the call's input (the description only names the arguments), split across sections and cut only with a note; the same on the attach path - one inbound queue per Slack user, each envelope bounded at 60 s - resent presses and commands dropped like events; a repeated press says nothing more; every live socket closed on stop; a start that can't reach Slack retries, a refused app token stops - the pasted-key check reuses the known key formats (redact.ts KNOWN_KEY_FORMATS) plus JWTs and private keys - a card answered before it was posted isn't posted; cards close for every Slack user holding them; their bookkeeping is let go with them - a DM re-checks the sign-in after each wait; a DM that can't be opened at sign-in is said Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A Slack frontend for codeoid. You can message the conductor from a Slack DM and approve or deny tool calls there. It is the first Slack phase (S1: control).
src/frontends/slack/socket.ts), so the daemon needs no public URL.response_urlwhen they take longer.disconnectit reconnects. Fatal auth errors stop it.src/frontends/slack/index.ts. It follows the Telegram template, including the GHSA-4g69 rules:CODEOID_SLACK_ALLOWED_USER_IDS), and each one acts with their own ZeroID key (/codeoid auth <key>). The bot refuses to start in local mode.KNOWN_KEY_FORMATS, now exported frommcp/redact.tswithxapp-added./codeoid auth | ls | attach | conductor | stop | who. A plain DM goes to the conductor, which is created on first use.SessionManager.onNeedsOwnertells you when another of your sessions is waiting on you, at most once every 10 minutes per session.PendingToolApproval.messageIdis added, so a card is tied to the exact message that asked.CODEOID_SLACK_*, a--no-slackflag, anddocs/slack.mdwith the app manifest and setup steps.Inbound text from other people (S2) and posting replies as you (S3) are later phases.
Audits
I did two rounds of deep audit, and the fixes are in this PR.
Tests
src/tests/slack-frontend.test.tsandsrc/tests/slack-socket.test.ts: 26 pass on Bun 1.3.13 and 1.4.4.main.main.🤖 Generated with Claude Code