{"_id":"@buzzie-ai/slack-claude","_rev":"6-39870a2161949dc22e32b1fb7df15cd1","name":"@buzzie-ai/slack-claude","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"@buzzie-ai/slack-claude","version":"0.1.0","keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"author":{"url":"https://github.com/Buzzie-AI","name":"Buzzie AI"},"license":"MIT","_id":"@buzzie-ai/slack-claude@0.1.0","maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"homepage":"https://github.com/Buzzie-AI/slack-claude#readme","bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"bin":{"slack-claude":"dist/cli.js"},"dist":{"shasum":"4fc8155d41194d14e55d966ed3c977528a3a36e0","tarball":"https://registry.npmjs.org/@buzzie-ai/slack-claude/-/slack-claude-0.1.0.tgz","fileCount":15,"integrity":"sha512-sVP8HeZ/QOdZA5aSykqUMqTmHWC+8/kCjqCStxC/ulFtoKilJZJyk5DAyAzgWdBGe4UX2ZDjFlrSlmZhvH6hjA==","signatures":[{"sig":"MEQCIBnIJfoYkrBvu7S1nMT3QmGg3CQ5x/jCIZ3Pc3KLLfs1AiBSCD366BKjvBwAzeH0EFwbfVRcjZ37N2dMiWwQhHPuxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45292},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx src/cli.ts","build":"tsc","start":"node dist/cli.js","prestart":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"},"repository":{"url":"git+https://github.com/Buzzie-AI/slack-claude.git","type":"git"},"_npmVersion":"10.9.4","description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@slack/bolt":"^4.7.2","@buzzie-ai/claude-inject":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slack-claude_0.1.0_1778188676478_0.46525111437580713","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@buzzie-ai/slack-claude","version":"0.2.0","keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"author":{"url":"https://github.com/Buzzie-AI","name":"Buzzie AI"},"license":"MIT","_id":"@buzzie-ai/slack-claude@0.2.0","maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"homepage":"https://github.com/Buzzie-AI/slack-claude#readme","bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"bin":{"slack-claude":"dist/cli.js"},"dist":{"shasum":"6f1bc10ba18a4faabec864fc680f2b6b5c723450","tarball":"https://registry.npmjs.org/@buzzie-ai/slack-claude/-/slack-claude-0.2.0.tgz","fileCount":19,"integrity":"sha512-md/oy2jIS/li/mOhbG3M+cx6VgLqqY3XAMJs9SPOvX1wtGKmOgzMyA9591cg3eCgQGIYcQ6onAbDnyy+vKkhvA==","signatures":[{"sig":"MEQCIAFPZmpXh94H3h4wg/6ZEgLRmd55eYrDO3RpGiZwlxB9AiAZfUwYJ+ycmeA6+EwV0gCISpBoeMWD0bQhhDNB8V4R5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60175},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx src/cli.ts","build":"tsc","start":"node dist/cli.js","prestart":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"},"repository":{"url":"git+https://github.com/Buzzie-AI/slack-claude.git","type":"git"},"_npmVersion":"10.9.4","description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@slack/bolt":"^4.7.2","@buzzie-ai/claude-inject":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slack-claude_0.2.0_1778190088153_0.41412941433827566","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@buzzie-ai/slack-claude","version":"0.2.1","keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"author":{"url":"https://github.com/Buzzie-AI","name":"Buzzie AI"},"license":"MIT","_id":"@buzzie-ai/slack-claude@0.2.1","maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"homepage":"https://github.com/Buzzie-AI/slack-claude#readme","bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"bin":{"slack-claude":"dist/cli.js"},"dist":{"shasum":"28653913259d552a883658df65766c7799d13033","tarball":"https://registry.npmjs.org/@buzzie-ai/slack-claude/-/slack-claude-0.2.1.tgz","fileCount":19,"integrity":"sha512-Xn5hmbpK0BU4VHot9dvoXPTIx9AzA/NIqacSetmd2HjUmB/dtEIB8VpDrfRKi+BEB0gGPtKFEf8kNC5ZxNkK5A==","signatures":[{"sig":"MEQCIEzrsdI6g/v9n2f1l+9wR6JdpFbgJtX5AX48Srrl1O8sAiAOEmV5YLFTDVuREsm5NN0VDPG8i886rD5DEFhpjIvu0g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64414},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx src/cli.ts","build":"tsc","start":"node dist/cli.js","prestart":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"},"repository":{"url":"git+https://github.com/Buzzie-AI/slack-claude.git","type":"git"},"_npmVersion":"10.9.4","description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@slack/bolt":"^4.7.2","@buzzie-ai/claude-inject":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slack-claude_0.2.1_1778272931031_0.00258832652834573","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@buzzie-ai/slack-claude","version":"0.3.0","keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"author":{"url":"https://github.com/Buzzie-AI","name":"Buzzie AI"},"license":"MIT","_id":"@buzzie-ai/slack-claude@0.3.0","maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"homepage":"https://github.com/Buzzie-AI/slack-claude#readme","bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"bin":{"slack-claude":"dist/cli.js"},"dist":{"shasum":"9f5e1bee834701f9ec128096180bdd8d8cfd55ae","tarball":"https://registry.npmjs.org/@buzzie-ai/slack-claude/-/slack-claude-0.3.0.tgz","fileCount":19,"integrity":"sha512-R66OHSaxQw9C4XhJ6EOJ5inKtZxNC8cH1jazMn+rG2iImJ5QjqNeMITjGomRahSWQqLD8NDGB+JkeNSyZq45ug==","signatures":[{"sig":"MEUCID9mpmkOi0ACFAOQPLm6nNg34XC9bBBoHjm7OnYr26nMAiEAgAq5mChu0hkKqqIKAzowTRK//XsoL8egN+rTdkPBhq8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66418},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx src/cli.ts","build":"tsc","start":"node dist/cli.js","prestart":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"},"repository":{"url":"git+https://github.com/Buzzie-AI/slack-claude.git","type":"git"},"_npmVersion":"10.9.4","description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@slack/bolt":"^4.7.2","@buzzie-ai/claude-inject":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slack-claude_0.3.0_1778273134131_0.7041956021357454","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@buzzie-ai/slack-claude","version":"0.4.0","keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"author":{"url":"https://github.com/Buzzie-AI","name":"Buzzie AI"},"license":"MIT","_id":"@buzzie-ai/slack-claude@0.4.0","maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"homepage":"https://github.com/Buzzie-AI/slack-claude#readme","bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"bin":{"slack-claude":"dist/cli.js"},"dist":{"shasum":"f2a5181d8e8092a34b029bf4aacbb63b25710a8a","tarball":"https://registry.npmjs.org/@buzzie-ai/slack-claude/-/slack-claude-0.4.0.tgz","fileCount":19,"integrity":"sha512-JPt/9Sr7Wy9WF1XCjzDYOsf9iUD6in+iZGBbS2NoesifOSOht2lLlf3CC3PV8k+4pxNLjNDgfSy1e16zMcqhKQ==","signatures":[{"sig":"MEUCIER+iC0Y1UlMO5QhKUB0eXXTQeEpjVRPsPztOt4IFrdXAiEAxrPcUB//ITa+85kYSooKn/TL/9xYIYQlEtzX0XZOQdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68564},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"scripts":{"dev":"tsx src/cli.ts","build":"tsc","start":"node dist/cli.js","prestart":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"},"repository":{"url":"git+https://github.com/Buzzie-AI/slack-claude.git","type":"git"},"_npmVersion":"10.9.4","description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@slack/bolt":"^4.7.2","@buzzie-ai/claude-inject":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.4.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slack-claude_0.4.0_1778273309961_0.9259351621289194","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@buzzie-ai/slack-claude","version":"0.5.0","description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","main":"dist/index.js","types":"dist/index.d.ts","bin":{"slack-claude":"dist/cli.js"},"scripts":{"build":"tsc","prestart":"npm run build","start":"node dist/cli.js","dev":"tsx src/cli.ts","prepublishOnly":"npm run build"},"keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"author":{"name":"Buzzie AI","url":"https://github.com/Buzzie-AI"},"license":"MIT","homepage":"https://github.com/Buzzie-AI/slack-claude#readme","repository":{"type":"git","url":"git+https://github.com/Buzzie-AI/slack-claude.git"},"bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"publishConfig":{"access":"public"},"engines":{"node":">=20"},"dependencies":{"@buzzie-ai/claude-inject":"^0.1.0","@slack/bolt":"^4.7.2"},"devDependencies":{"@types/node":"^20.0.0","tsx":"^4.0.0","typescript":"^5.4.0"},"_id":"@buzzie-ai/slack-claude@0.5.0","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-ObyUbFDbdPBkfQ7f6KzvyfOUQH+yXnU1kUikIpE1/ac7dRj6OV99VxFd44FhC2m20uVFLC5b7ic1drEwtTXBew==","shasum":"ccfbe3c97958f11414f87b8a6fba4756e5639c24","tarball":"https://registry.npmjs.org/@buzzie-ai/slack-claude/-/slack-claude-0.5.0.tgz","fileCount":19,"unpackedSize":78345,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHCWhRsJj9VkA/ixw0MvFtjlQDTQ4gkMpJ6CU5Ttll7lAiBqwOcEBZeepBsqe7IOL7pGvmAnUFUT2hTRWmuUe25mYg=="}]},"_npmUser":{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"},"directories":{},"maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/slack-claude_0.5.0_1778283826375_0.5691506156257273"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-07T21:17:56.366Z","modified":"2026-05-08T23:43:46.667Z","0.1.0":"2026-05-07T21:17:56.639Z","0.2.0":"2026-05-07T21:41:28.344Z","0.2.1":"2026-05-08T20:42:11.214Z","0.3.0":"2026-05-08T20:45:34.261Z","0.4.0":"2026-05-08T20:48:30.167Z","0.5.0":"2026-05-08T23:43:46.523Z"},"bugs":{"url":"https://github.com/Buzzie-AI/slack-claude/issues"},"author":{"name":"Buzzie AI","url":"https://github.com/Buzzie-AI"},"license":"MIT","homepage":"https://github.com/Buzzie-AI/slack-claude#readme","keywords":["claude","claude-code","anthropic","slack","slack-bot","bolt","socket-mode","agent","automation"],"repository":{"type":"git","url":"git+https://github.com/Buzzie-AI/slack-claude.git"},"description":"Slack bot that bridges a Slack workspace to Claude Code via Socket Mode and @buzzie-ai/claude-inject. Receives Slack messages, forwards them to a persistent Claude Code session per thread, and posts replies back.","maintainers":[{"name":"buzzie","email":"arvind.raj.naidu@gmail.com"}],"readme":"# @buzzie-ai/slack-claude\n\nSlack ↔ Claude Code bridge. Connects to Slack over Socket Mode, forwards messages to a persistent Claude Code session per thread (via [`@buzzie-ai/claude-inject`](https://www.npmjs.com/package/@buzzie-ai/claude-inject)), and posts the replies back into the same thread.\n\n```\n┌──────────┐   WebSocket    ┌──────────────────┐   stdin/stdout   ┌──────────────┐\n│  Slack   │  ◄──────────►  │  slack-claude    │  ◄────────────►  │  claude -p   │\n│  events  │   Socket Mode  │  (this package)  │     stream-json   │  (logged in) │\n└──────────┘                └──────────────────┘                  └──────────────┘\n```\n\nOne Claude session per Slack thread (or per DM channel), kept alive across follow-up messages so the conversation has memory.\n\n## Quick start\n\nEither export the tokens:\n\n```bash\nexport SLACK_APP_TOKEN=xapp-...      # app-level token (Socket Mode)\nexport SLACK_BOT_TOKEN=xoxb-...      # bot OAuth token\n\nnpx @buzzie-ai/slack-claude\n```\n\n…or drop them in a `.env` file in your current directory (auto-loaded on\nstartup; real env vars win over file values):\n\n```bash\ncp .env.example .env   # then edit .env\nnpx @buzzie-ai/slack-claude\n```\n\nUse `DOTENV_CONFIG_PATH=/path/to/file` to load from a non-default location.\n\nThat's it. The bot connects, prints `⚡️ slack-claude bot online …`, and starts handling:\n\n- **@-mentions** in any channel it's been invited to (every message — re-mention to continue)\n- **Direct messages** in DMs (every message; no mention needed since there's only one bot per DM)\n\nPass `--follow-threads` to also reply to follow-up messages in any thread it's already in, without needing a re-mention. Default is **off** so multi-bot threads behave correctly (only the addressed bot answers).\n\n## Requirements\n\n- **Node ≥ 20**\n- **Claude Code installed and logged in.** The `claude` CLI must be on your `PATH` and already authenticated (`claude` should run interactively without prompting for login).\n- **A Slack app** with Socket Mode enabled — see [Slack app setup](#slack-app-setup) below.\n\n## Slack app setup\n\nOne-time, ~3 minutes. From [api.slack.com/apps](https://api.slack.com/apps):\n\n1. **Create app** → \"From scratch\", pick a name and workspace.\n2. **Socket Mode** → toggle on. Generate an **app-level token** with the `connections:write` scope. Save the `xapp-…` token.\n3. **OAuth & Permissions** → add these **bot scopes**:\n   - `app_mentions:read`\n   - `chat:write`\n   - `channels:history`\n   - `groups:history`\n   - `im:history`\n   - `mpim:history`\n   - `im:read`\n   - `reactions:read`\n   - `reactions:write`\n4. **Event Subscriptions** → Enable Events. Subscribe to bot events:\n   - `app_mention`\n   - `message.channels`\n   - `message.groups`\n   - `message.im`\n   - `message.mpim`\n5. **Install to workspace** → grab the **bot token** (`xoxb-…`).\n6. Invite the bot to a channel (`/invite @your-bot`) or DM it.\n\n## Usage\n\n### CLI\n\n```bash\nnpx @buzzie-ai/slack-claude [options]\n```\n\nOptions:\n\n| Flag | Env | Default | Notes |\n|---|---|---|---|\n| `--app-token <xapp-…>` | `SLACK_APP_TOKEN` | *(required)* | App-level token for Socket Mode |\n| `--bot-token <xoxb-…>` | `SLACK_BOT_TOKEN` | *(required)* | Bot OAuth token |\n| `--cwd <path>` |  | `process.cwd()` | Working directory passed to each Claude session |\n| `--system-prompt <text>` |  | sensible default | Sent on first message of every new session |\n| `--model <id\\|alias>` |  |  | `opus`, `sonnet`, `haiku`, or a full model ID |\n| `--permission-mode <mode>` |  |  | `acceptEdits` \\| `auto` \\| `bypassPermissions` \\| `default` \\| `dontAsk` \\| `plan` |\n| `--dangerously-skip-permissions` |  |  | Bypass all Claude permission prompts |\n| `--tools <spec>` |  |  | `\"\"` (none), `\"default\"` (all), or `\"Bash,Edit,Read\"` |\n| `--log-level <level>` |  | `info` | `debug` \\| `info` \\| `warn` \\| `error` \\| `silent` |\n| `--follow-threads` |  | off | After a mention, keep answering follow-ups in that thread without re-mention. Off by default so multi-bot threads behave correctly. |\n| `-h, --help` |  |  | Print help |\n| `-v, --version` |  |  | Print version |\n\n### Programmatic\n\n```ts\nimport { SlackClaudeBot } from '@buzzie-ai/slack-claude';\n\nconst bot = new SlackClaudeBot({\n  appToken: process.env.SLACK_APP_TOKEN!,\n  botToken: process.env.SLACK_BOT_TOKEN!,\n  cwd: '/path/to/repo',\n  systemPrompt: 'You are a code review bot. Be terse.',\n  claudeOptions: {\n    model: 'sonnet',\n    dangerouslySkipPermissions: true,\n  },\n});\n\nawait bot.start();\n// ... later\nawait bot.stop();\n```\n\n## How it works\n\n- Bolt opens a **Socket Mode** WebSocket — no public HTTP endpoint needed.\n- For each incoming Slack event, the bot computes a **thread key**:\n  - DM at top level → `dm:<channel>`\n  - Anything threaded → `<channel>:<thread_ts>`\n  - New @-mention → `<channel>:<message_ts>` (the reply opens the thread)\n- A `ClaudeSession` (from `@buzzie-ai/claude-inject`) is created on first hit and cached under that key. Follow-up messages reuse the same persistent `claude -p` subprocess, so context carries.\n- The bot adds a 👀 reaction on receipt, calls `session.send(text)`, then posts the full reply in the matching thread and removes the reaction.\n\n## Limits & gotchas\n\n- **One in-flight turn per thread.** `ClaudeSession.send()` queues; if a user fires three messages in quick succession to the same thread, Claude answers them in order, not in parallel.\n- **Sessions live in memory.** Restarting the process resets all conversations.\n- **Slack message size cap is 40 000 chars.** Very long Claude replies will be truncated by Slack; chunking isn't done yet.\n- **No streaming yet.** Replies post once Claude finishes the turn. (Open issue: stream-and-edit mode.)\n- **Logging.** Default level is `info`: incoming Slack messages, Claude tool calls, outbound posts, lifecycle events. Run with `--log-level debug` to also see filtered-out events, reaction state, and Bolt internals. `--log-level silent` for cron jobs.\n- **Bot-to-bot conversations are allowed.** Other bots can @-mention us, DM us, or talk to us in threads, and we treat them like any other participant. The only filter is *self* — we never respond to our own posts (matched on both our `bot_id` and our `user_id`). Slack's `bot_message` subtype messages (legacy webhook bots) are also accepted.\n  - **Loop risk.** Two LLM-backed bots that both @-mention each other in their replies will keep pinging until something stops them. There's no built-in turn limit yet — if you point two slack-claude bots at each other, give Claude a system prompt that discourages outbound mentions, or kill one of the processes. A `--max-turns-per-thread` flag is on the roadmap.\n- **The `claude` CLI must already be logged in.** This bridge does not handle auth.\n- **Permissions in non-interactive mode.** The bot launches `claude -p` (no terminal). Anything not pre-approved in `permissions.allow` is auto-denied because Claude can't show its prompt UI. To get things working, either:\n  - Add explicit allows to `.claude/settings.json` (project-level) or `~/.claude/settings.json` (user-level). Example:\n    ```json\n    { \"permissions\": { \"allow\": [\"Bash(git:*)\", \"Read(*)\", \"Edit(*)\"] } }\n    ```\n  - Or pass `--dangerously-skip-permissions` to bypass everything (only for trusted/sandboxed setups).\n  - The bot logs which `settings.json` files it found at startup, and warns if none exist.\n- **System prompt.** By default the bot does *not* pass `--system-prompt`, so Claude's built-in prompt + your `CLAUDE.md` are both honored. Pass `--system-prompt \"…\"` to override (this also disables CLAUDE.md, since `--system-prompt` replaces the default prompt entirely).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}