Experimental Slack Block Kit UI for the Hermes Agent Kanban board.
This package adds a native Slack /board command that renders Hermes Kanban tasks as interactive Slack cards. It is a fast-public release extracted from a working Hermes Agent v0.12.0 installation, with an installer that backs up the target checkout before applying changes.
/boardnative Slack slash command with immediate ACK, then async board rendering.- Slack Block Kit board with status filtering, approvals filter, pagination, and card carousel support.
- Global task creation modal.
- Task movement modal.
- Task detail modal with editable title, description, assignee, project, archive action, run history, events, comments, worker log tail, and approval actions.
- Duplicate-click lock to reduce repeated Slack actions while a board message is repainting.
- Tests for renderer and Slack action payload behavior.
Tested against:
- Hermes Agent v0.12.0 (2026年4月30日) and v0.13.0 (2026年5月7日).
- Python 3.11.
- Slack Bolt Socket Mode.
v0.13.0 ships a baseline gateway/platforms/slack_kanban_board.py upstream (~924 lines), but it does not yet wire /board as a Slack slash command and does not expose extension hooks for Slack Bolt action/view handlers. This package replaces the upstream module with an extended version (~1,927 lines) that adds: short-option and natural-language parsing, status pagination, approval filter and approve/request-changes flow, task creation modal with dependencies and project options, edit modal, dependency/project selectors, debug detail blocks, and richer help/text output. The original upstream file is backed up under ~/.hermes/backups/hermes-slack-board-* before replacement.
This is not yet a pure Hermes plugin because Hermes plugins can register general slash commands, but the current public plugin surface does not expose Slack Bolt Block Kit action/view registration hooks. The installer patches the Slack adapter directly and creates a backup.
Once the upstream extension hooks API (NousResearch/hermes-agent#20936) is merged, this project will be re-released as a pure Hermes plugin (no core patches), and the installer will become a thin compatibility shim.
For most users, run the install wizard on the server that runs Hermes:
curl -fsSL https://raw.githubusercontent.com/dandacompany/hermes-slack-board/main/scripts/install-remote.sh | bashThe wizard auto-detects common Hermes checkout locations, shows the detected path, and asks for confirmation before patching.
If you prefer to inspect the installer before running it:
curl -fsSL https://raw.githubusercontent.com/dandacompany/hermes-slack-board/main/scripts/install-remote.sh -o /tmp/install-hermes-slack-board.sh less /tmp/install-hermes-slack-board.sh bash /tmp/install-hermes-slack-board.sh
If Hermes is installed in a custom location, pass the path:
curl -fsSL https://raw.githubusercontent.com/dandacompany/hermes-slack-board/main/scripts/install-remote.sh | bash -s -- --hermes-root /opt/hermes-agentOr use an environment variable:
curl -fsSL https://raw.githubusercontent.com/dandacompany/hermes-slack-board/main/scripts/install-remote.sh | HERMES_AGENT_DIR=/opt/hermes-agent bashDevelopers can also clone or copy this project onto the server:
git clone https://github.com/dandacompany/hermes-slack-board.git cd hermes-slack-board ./scripts/install.sh ~/.hermes/hermes-agent
This repository also includes a Hermes setup guide skill:
mkdir -p ~/.hermes/skills/hermes-slack-board-setup cp -R skills/hermes-slack-board-setup/* ~/.hermes/skills/hermes-slack-board-setup/ hermes skills check
Use it when you want Hermes to walk through /board installation, Slack App setup, App Configuration Token automation, command options, and smoke tests step by step.
The installer:
- Backs up
gateway/platforms/slack.py,gateway/platforms/slack_kanban_board.py, andtests/test_slack_kanban_board.pyunder~/.hermes/backups/hermes-slack-board-*. - Copies the Slack board renderer and tests into the Hermes checkout.
- Inserts the
/boardSlack command, Block Kit handlers, and board helper methods intogateway/platforms/slack.py. - Runs
py_compile. - Runs
pytest tests/test_slack_kanban_board.pyunless--skip-testsis passed.
If your Hermes checkout is not at ~/.hermes/hermes-agent, pass the path explicitly.
The installer cannot change Slack app configuration. Add these settings in Slack:
- Open
https://api.slack.com/appsand select your Hermes Slack app. - Go to Slash Commands.
- Add command
/board. - Use any HTTPS request URL Slack accepts for Socket Mode manifests. Hermes receives the command over Socket Mode.
- Go to Interactivity & Shortcuts and turn Interactivity on.
- Reinstall the app to the workspace after changing commands or scopes.
- Invite the Hermes bot to the channels where
/boardshould work.
Restart Hermes gateway after install and Slack app changes:
hermes gateway restart
For systemd deployments:
systemctl --user restart hermes-gateway.service
Open the default board:
/board
/board --help
/board -h
Filter by project, status, approval, search query, and card limit:
/board -p youtube
/board --project youtube
/board -s ready
/board --status ready
/board -a
/board --approval
/board -q "bright data"
/board -l 10
/board --assignee manager
/board --page 2
/board --archived
Options can be combined:
/board -p youtube -s ready -a
/board --project youtube --status blocked --approval
Open a text report instead of the Block Kit board:
/board -t
/board --text
/board -t --summary
/board -t --full
/board -t -p youtube -s blocked
/board -t --public
Create, edit, inspect, or archive a task from the slash command:
/board -n
/board --new "AI news scrape" -p youtube -s todo
/board -e t_425b5e75
/board --edit t_425b5e75
/board --detail t_425b5e75
/board -d t_425b5e75
/board --delete t_425b5e75
--delete opens the task detail modal so the user can confirm with the Archive button.
The command also accepts simple natural-language requests:
/board youtube 프로젝트 ready 텍스트로 보여줘
/board bright data 조사 추가
/board t_425b5e75 상세 보기
/board 승인 필요한 일만 요약
Supported option aliases:
| Long option | Short | Purpose |
|---|---|---|
--project |
-p |
Project filter. Legacy --tenant still works. |
--status |
-s |
Status filter. |
--approval |
-a |
Show approval-required tasks. Legacy --approval-required still works. |
--limit |
-l |
Max cards/items per status. |
--query |
-q |
Search title, description, or task id. |
--assignee |
-u |
Assignee/profile filter. |
--page |
Page number for long status lists. | |
--archived |
Include archived tasks. | |
--text |
-t |
Return a plain text report. |
--summary |
Text mode summary. | |
--full |
Text mode with descriptions. | |
--public |
Post text report to the channel. Text mode is ephemeral by default. | |
--new |
-n |
Open the new task modal, optionally with a title. |
--edit |
-e |
Open the editable task detail modal. |
--delete |
-d |
Open task detail for archive confirmation. |
--help |
-h |
Show command help. |
Triage: rough ideas or unshaped requests. The dispatcher should not claim these until a human/specifier promotes them.Todo: task is created but not yet ready to run, often because dependencies remain.Ready: assigned and eligible for dispatcher claim.In Progress: a Hermes worker has claimed and is running the task.Blocked: human input, approval, missing config, auth failure, or circuit breaker intervention is needed.Done: completed task.
The Add modal intentionally offers only Triage, Todo, and Ready, because users usually should not create tasks directly into In Progress, Blocked, or Done.
Restore the latest backup:
./scripts/uninstall.sh ~/.hermes/hermes-agentOr restore a specific backup:
./scripts/uninstall.sh ~/.hermes/hermes-agent ~/.hermes/backups/hermes-slack-board-YYYYMMDD_HHMMSS
Restart the gateway after uninstalling.
- This is a direct Slack adapter extension, not a clean third-party Hermes plugin yet.
- Slack carousel elements are limited; the UI uses status filters and pagination to avoid oversized messages.
- Slack does not support drag-and-drop Block Kit task movement. Movement is implemented through buttons and modals.
- Slack
alertblocks may be unsupported in normalchat.postMessage/chat.updatemessages in some workspaces, so board section headers use standardsectionblocks.
The target second phase is an upstreamable Hermes Slack UI extension point, so this board can become a normal installable plugin instead of a direct adapter patch.
- Research notes: docs/research-phase-2.md
- Maintainer-facing proposal: docs/upstream-pr-proposal.md
- Draft upstream PR description: docs/pr-description.md
- Generalization audit: docs/generalization-audit.md