Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b5909af
docs: add channel subscription design spec
spacedragon Jun 3, 2026
c7cfefd
docs: add channel subscription implementation plan
spacedragon Jun 3, 2026
a1f2ecb
feat: add subscribedChannels config and SlackSessionMeta.threadTs
spacedragon Jun 3, 2026
70f8203
feat: add pure classifySubscription routing logic
spacedragon Jun 3, 2026
a7e8274
feat: add resolveThreadSession to bind threads to sessions
spacedragon Jun 3, 2026
fa96bff
feat: route subscribed-channel messages through classifier
spacedragon Jun 3, 2026
b0f76d7
feat: wire channel subscription into the Slack adapter
spacedragon Jun 3, 2026
985a738
feat: thread agent output into the subscribed channel thread
spacedragon Jun 3, 2026
0f4dd58
fix: thread queued/config/attachment notices into subscription threads
spacedragon Jun 3, 2026
cec2a5e
feat: protect subscribed channels from archival; scope permission cle…
spacedragon Jun 3, 2026
eb90f85
feat: restore subscription threadTs across restarts
spacedragon Jun 3, 2026
5fa5f00
docs: document Slack channel subscription
spacedragon Jun 3, 2026
84caeb8
fix: correct handleNewSession args and post-restart thread resume
spacedragon Jun 3, 2026
377232b
fix: resolve session meta by slug for first post-restart slash command
spacedragon Jun 3, 2026
1aac7c8
fix: drop removed InstallContext.legacyConfig from install hook
spacedragon Jun 3, 2026
b347cab
feat: non-interactive setup when Slack creds are in the environment
spacedragon Jun 3, 2026
75a08f2
feat: mentionAnyChannel — respond to @mentions in any invited channel
spacedragon Jun 4, 2026
a922eb9
feat(slack): add respondToDms config flag (default true)
spacedragon Jun 4, 2026
cfe8661
feat(slack): keep DM channels out of the subscription path
spacedragon Jun 4, 2026
fa766bc
feat(slack): add resolveDmSession for DM-bound sessions
spacedragon Jun 4, 2026
7833a53
feat(slack): route DM channels to onDmSession callback
spacedragon Jun 4, 2026
8ad10e2
feat(slack): converse in DMs via handleDmSession
spacedragon Jun 4, 2026
915a366
fix(slack): don't archive DM channels; coalesce concurrent DM resolution
spacedragon Jun 4, 2026
8f6bd77
refactor(slack): DMs reply in-thread via the subscription path
spacedragon Jun 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ Add to your `~/.openacp/config.json`:
| `allowedUserIds` | Optional. Restrict access to specific Slack user IDs |
| `autoCreateSession` | Create a startup session on boot. Default: `true` |
| `outputMode` | Default verbosity: `"low"`, `"medium"`, or `"high"`. Default: `"medium"` |
| `subscribedChannels` | Optional. Channels to watch: `[{ "channelId": "C...", "trigger": "mention" \| "all" }]`. Invite the bot to each. Default: `[]` |

### Output Mode

Expand All @@ -52,6 +53,26 @@ The adapter renders agent activity in real time using Slack threads:

Change the mode on the fly with `/outputmode low|medium|high`, or open an interactive modal with `/outputmode`. Requires the slash command to be registered in the Slack app settings — see the [setup guide](https://docs.openacp.dev/platform-setup/slack).

### Channel Subscription

Beyond the per-session channels the bot creates, you can point it at **existing**
channels. Invite the bot to the channel and list it under `subscribedChannels`:

```json
"subscribedChannels": [
{ "channelId": "C0123ABCD", "trigger": "mention" }
]
```

- `trigger: "mention"` (default) — the bot starts a session only when a top-level
message `@mentions` it.
- `trigger: "all"` — every top-level message starts a session.

Each top-level trigger opens a **thread**; the agent works and replies inside that
thread, and any reply in the thread continues the same session (with full context).
Tool-permission requests appear as buttons in the thread. The bot never archives a
subscribed channel.

## Development

```bash
Expand Down
Loading