In Japanese mythology, Ame-no-Uzume performed a divine dance before the closed doors of Amano-Iwato — the heavenly rock cave where Amaterasu had hidden herself, plunging the world into darkness. Her dance, accompanied by music and laughter, drew the sun goddess back into the world. This was the first kagura (神楽) — "the entertainment of the gods."
Kagura brings that spirit to Slack. Run Anthropic Claude Agent SDK natively in your workspace — @mention the bot, it routes the session into the right repository, and replies with Slack-native rich text, live progress, and persistent memory.
Running a Claude agent inside Slack requires gluing together thread context, workspace routing, streaming UX, session persistence, and memory — all adapted to Slack's API conventions. kagura handles that full lifecycle via Socket Mode, so you can focus on the agent's behavior.
@mention / Message Action
→ resolve target repo
→ load thread history (text + files + images)
→ run agent in repo cwd
→ stream progress → post rich-text reply and generated attachments
→ persist session & memory to SQLite
Conversation — Thread-aware multimodal context (text + files + images), session resumption across restarts, layered memory (global / workspace / preferences).
Slack UX — Rich text rendering (headings, lists, code blocks, auto-splitting), live progress indicators, reaction lifecycle, native assistant typing.
Workspace routing — Each thread binds to a repo/workdir. Auto-detected from message text, or manually chosen via Message Action.
Agent control — Pluggable provider registry, stop via stop/cancel keyword, :octagonal_sign: reaction, or message shortcut, slash commands for introspection (/usage, /workspace, /memory, /session, /version, /provider).
Operations — Auto-provisioned manifest (commands + shortcuts), online-presence heartbeat, Home tab, Zod-validated inputs, secret redaction in logs.
git clone https://github.com/Innei/kagura.git
cd kagura
pnpm install
cp .env.example .env # fill in SLACK_BOT_TOKEN, SLACK_APP_TOKEN, SLACK_SIGNING_SECRET, REPO_ROOT_DIR
pnpm dev # or: pnpm build && pnpm startSee docs/configuration.md for the full environment variable reference, Slack app manifest, token rotation, and Docker deployment.
| Document | Contents |
|---|---|
| Configuration | Environment variables, Slack manifest, token rotation, Docker |
| Architecture | Composition root, agent providers, rendering, workspace routing, memory model, project structure |
| Slash commands & controls | All slash commands, stop controls, reaction lifecycle |
| Live E2E testing | E2E setup, environment, running scenarios |
| Specs | Detailed subsystem specifications |
| Command | Description |
|---|---|
pnpm dev |
Run with nodemon + tsx |
pnpm build |
Compile TypeScript |
pnpm test |
Run Vitest test suite |
pnpm start |
Run compiled output |
pnpm typecheck |
Type-check without emitting |
pnpm e2e |
Run all live Slack E2E cases |
pnpm e2e -- <id> |
Run a specific scenario by id |
pnpm e2e -- --interactive |
Interactive scenario picker |
pnpm e2e -- --list |
List all discovered scenarios |
pnpm e2e -- --search <term> |
Search/filter by keyword |
pnpm db:generate |
Generate Drizzle migrations |
pnpm db:migrate |
Apply migrations |
pnpm db:studio |
Open Drizzle Studio |
MIT © Innei, Released under the MIT License.
Personal Website · GitHub @Innei