Chat SDK Bots
lobehub/lobehub
Builds chat bots once for Slack, Teams, Google Chat, Discord, GitHub and Linear with the Chat SDK, covering event handlers, cards, modals, streaming and state adapters.
Build multi-platform chat bots with Chat SDK (chat npm package).
$ npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install databuddy-analytics/Databuddy chat-sdk --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/chat-sdk .claude/skills/chat-sdk && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "chat-sdk" agent skill from https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdk into .claude/skills/chat-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chat-sdk", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdkType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install databuddy-analytics/Databuddy chat-sdk --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/chat-sdk .agents/skills/chat-sdk && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "chat-sdk" agent skill from https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdk into .agents/skills/chat-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chat-sdk", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install databuddy-analytics/Databuddy chat-sdk --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/chat-sdk .cursor/skills/chat-sdk && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "chat-sdk" agent skill from https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdk into .cursor/skills/chat-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chat-sdk", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/databuddy-analytics/Databuddy.git --path .agents/skills/chat-sdk--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install databuddy-analytics/Databuddy chat-sdk --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/chat-sdk .gemini/skills/chat-sdk && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "chat-sdk" agent skill from https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdk into .gemini/skills/chat-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chat-sdk", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install databuddy-analytics/Databuddy chat-sdkInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/chat-sdk .github/skills/chat-sdk && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "chat-sdk" agent skill from https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdk into .github/skills/chat-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chat-sdk", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install databuddy-analytics/Databuddy chat-sdk --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/chat-sdk .opencode/skills/chat-sdk && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "chat-sdk" agent skill from https://github.com/databuddy-analytics/Databuddy/tree/main/.agents/skills/chat-sdk into .opencode/skills/chat-sdk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chat-sdk", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
chat-sdkBuild multi-platform chat bots with Chat SDK (chat npm package).
Chat SDK is an agent skill from databuddy-analytics/Databuddy. Build multi-platform chat bots with Chat SDK (chat npm package). Use when developers want to build a Slack, Teams, Google Chat, Discord, Telegram, GitHub, Linear, or WhatsApp bot, handle mentions, direct messages, subscribed threads, reactions, slash commands, cards, modals, files, or AI streaming, set up webhook routes or multi-adapter bots, send rich cards or streamed AI responses to chat platforms, or build a custom adapter or state adapter.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows, covering Messaging and chat bots, Hooks and plugins and Webhooks. It works with Slack, GitHub, Discord and Telegram. The repository describes itself as: Open-source product analytics for startups: track visitors, events, funnels, and goals without cookies, and ask Databunny, the built-in AI analyst. Uptime, feature flags, and… The licence is AGPL-3.0.
Read from SKILL.md and the folder at commit fc7eb6b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
vercel.comchat-sdk.devFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Chat SDK loads about 2.6k tokens when it runs. Until then it costs about 115 tokens; SKILL.md has 776 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from databuddy-analytics/Databuddy at commit fc7eb6b, republished under its AGPL-3.0 licence (© databuddy-analytics). 776 words, ~2,561 tokens.
.claude/skills/chat-sdk/SKILL.md (or your agent's skills folder).Unified TypeScript SDK for building chat bots across Slack, Teams, Google Chat, Discord, Telegram, GitHub, Linear, and WhatsApp. Write bot logic once, deploy everywhere.
When Chat SDK is installed in a user project, inspect the published files that ship in node_modules:
node_modules/chat/docs/ # bundled docs
node_modules/chat/dist/index.d.ts # core API types
node_modules/chat/dist/jsx-runtime.d.ts # JSX runtime types
node_modules/chat/docs/contributing/ # adapter-authoring docs
node_modules/chat/resources/guides/ # framework/platform guides (markdown)
node_modules/chat/resources/templates.json # starter templates (title, description, href)If one of the paths below does not exist, that package is not installed in the project yet.
Read these before writing code:
node_modules/chat/docs/getting-started.mdx — install and setupnode_modules/chat/docs/usage.mdx — Chat config and lifecyclenode_modules/chat/docs/handling-events.mdx — event routing and handlersnode_modules/chat/docs/threads-messages-channels.mdx — thread/channel/message modelnode_modules/chat/docs/posting-messages.mdx — post, edit, delete, schedulenode_modules/chat/docs/streaming.mdx — AI SDK integration and streaming semanticsnode_modules/chat/docs/cards.mdx — JSX cardsnode_modules/chat/docs/actions.mdx — button/select interactionsnode_modules/chat/docs/modals.mdx — modal submit/close flowsnode_modules/chat/docs/slash-commands.mdx — slash command routingnode_modules/chat/docs/direct-messages.mdx — DM behavior and openDM()node_modules/chat/docs/files.mdx — attachments/uploadsnode_modules/chat/docs/state.mdx — persistence, locking, dedupenode_modules/chat/docs/adapters.mdx — cross-platform feature matrixnode_modules/chat/docs/api/chat.mdx — exact Chat APInode_modules/chat/docs/api/thread.mdx — exact Thread APInode_modules/chat/docs/api/message.mdx — exact Message APInode_modules/chat/docs/api/modals.mdx — modal element and event detailsFor the specific adapter or state package you are using, inspect that installed package's dist/index.d.ts export surface in node_modules.
<!-- RESOURCES:START -->
node_modules/chat/resources/guides/how-to-build-an-ai-agent-for-slack-with-chat-sdk-and-ai-sdk.md — Build a Slack AI agent using Chat SDK, AI SDK's ToolLoopAgent, and Vercel AI Gateway. Covers project setup, tool definitions, streaming responses, deployment to Vercel, and scaling tool selection with toolpick.node_modules/chat/resources/guides/run-and-track-deploys-from-slack.md — Build a Slack deploy bot with Chat SDK and Vercel Workflow. Dispatch GitHub Actions from a slash command, gate production behind approval, poll for completion, and notify Linear and GitHub when the run finishes.node_modules/chat/resources/guides/triage-form-submissions-with-chat-sdk.md — Build a Slack bot that triages form submissions with interactive cards. Forward, edit, or mark as spam without leaving Slack. Built with Chat SDK, Hono, and Resend.node_modules/chat/resources/guides/how-to-build-a-slack-bot-with-next-js-and-redis.md — This guide walks through building a Slack bot with Next.js, covering project setup, Slack app configuration, event handling, interactive features, and deployment.node_modules/chat/resources/guides/create-a-discord-support-bot-with-nuxt-and-redis.md — This guide walks through building a Discord support bot with Nuxt, covering project setup, Discord app configuration, Gateway forwarding, AI-powered responses, and deployment.node_modules/chat/resources/guides/ship-a-github-code-review-bot-with-hono-and-redis.md — This guide walks through building a GitHub bot that reviews pull requests on demand. When a user @mentions the bot on a PR, Chat SDK picks up the mention, spins up a Vercel Sandbox with the repo cloned, and uses AI SDK to analyze the diff.Listed in node_modules/chat/resources/templates.json:
<!-- RESOURCES:END -->
import { Chat } from "chat";
import { createSlackAdapter } from "@chat-adapter/slack";
import { createRedisState } from "@chat-adapter/state-redis";
const bot = new Chat({
userName: "mybot",
adapters: {
slack: createSlackAdapter(),
},
state: createRedisState(),
dedupeTtlMs: 600_000,
});
bot.onNewMention(async (thread) => {
await thread.subscribe();
await thread.post("Hello! I'm listening to this thread.");
});
bot.onSubscribedMessage(async (thread, message) => {
await thread.post(`You said: ${message.text}`);
});post(), stream(), subscribe(), setState(), startTyping()text, formatted, attachments, author info, and platform raw| Handler | Trigger |
|---|---|
onNewMention | Bot @-mentioned in an unsubscribed thread |
onDirectMessage | New DM in an unsubscribed DM thread |
onSubscribedMessage | Any message in a subscribed thread |
onNewMessage(regex) | Regex match in an unsubscribed thread |
onReaction(emojis?) | Emoji added or removed |
onAction(actionIds?) | Button clicks and select/radio interactions |
onModalSubmit(callbackId?) | Modal form submitted |
onModalClose(callbackId?) | Modal dismissed/cancelled |
onSlashCommand(commands?) | Slash command invocation |
onAssistantThreadStarted | Slack assistant thread opened |
onAssistantContextChanged | Slack assistant context changed |
onAppHomeOpened | Slack App Home opened |
onMemberJoinedChannel | Slack member joined channel event |
Read node_modules/chat/docs/handling-events.mdx, node_modules/chat/docs/actions.mdx, node_modules/chat/docs/modals.mdx, and node_modules/chat/docs/slash-commands.mdx before wiring handlers. onDirectMessage behavior is documented in node_modules/chat/docs/direct-messages.mdx.
Pass any AsyncIterable<string> to thread.post(). For AI SDK, prefer result.fullStream over result.textStream when available so step boundaries are preserved.
import { ToolLoopAgent } from "ai";
const agent = new ToolLoopAgent({ model: "anthropic/claude-4.5-sonnet" });
bot.onNewMention(async (thread, message) => {
const result = await agent.stream({ prompt: message.text });
await thread.post(result.fullStream);
});Key details:
streamingUpdateIntervalMs controls post+edit fallback cadencefallbackStreamingPlaceholderText defaults to "..."; set null to disableStreamChunk support is Slack-only; other adapters ignore non-text chunksSet jsxImportSource: "chat" in tsconfig.json.
Card components:
Card, CardText, Section, Fields, Field, Button, CardLink, LinkButton, Actions, Select, SelectOption, RadioSelect, Table, Image, DividerModal components:
Modal, TextInput, Select, SelectOption, RadioSelectawait thread.post(
<Card title="Order #1234">
<CardText>Your order has been received.</CardText>
<Actions>
<Button id="approve" style="primary">Approve</Button>
<Button id="reject" style="danger">Reject</Button>
</Actions>
</Card>
);See chat-sdk.dev/adapters for the current list of official, vendor-official, and community adapters, including package names and authors. For the exact factory function and config types of an installed adapter, inspect its dist/index.d.ts in node_modules.
Read these published docs first:
node_modules/chat/docs/contributing/building.mdxnode_modules/chat/docs/contributing/testing.mdxnode_modules/chat/docs/contributing/publishing.mdxAlso inspect:
node_modules/chat/dist/index.d.ts — Adapter and related interfacesnode_modules/@chat-adapter/shared/dist/index.d.ts — shared errors and utilitiesdist/index.d.ts files — reference implementations for config and APIsA custom adapter needs request verification, webhook parsing, message/thread/channel operations, ID encoding/decoding, and a format converter. Use BaseFormatConverter from chat and shared utilities from @chat-adapter/shared.
Each registered adapter exposes bot.webhooks.<name>. Wire those directly to your HTTP framework routes. See node_modules/chat/resources/guides/how-to-build-a-slack-bot-with-next-js-and-redis.md and node_modules/chat/resources/guides/create-a-discord-support-bot-with-nuxt-and-redis.md for framework-specific route patterns.
© databuddy-analytics, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/chat-sdk of databuddy-analytics/Databuddy.
Open the folder on GitHubat commit fc7eb6b
Chat SDK next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Chat SDK this skilldatabuddy-analytics/Databuddy | 1.2k | — | ~2.6k | Automated safety check: Pass | AGPL-3.0 | |
| Chat SDK Botslobehub/lobehub | 83k | — | ~1.5k | Automated safety check: Pass | Custom licence | |
| Frontmcp Channelsagentfront/frontmcp | 146 | — | ~3.7k | Automated safety check: Pass | Apache-2.0 | |
| Chat SDKvercel/vercel-plugin | 301 | — | ~2.9k | Automated safety check: Pass | Custom licence | |
| Bot BuilderFerroxLabs/wayland | 608 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Hitl ProtocolLeoYeAI/openclaw-master-skills | 2.2k | — | ~5.3k | Automated safety check: Pass | Apache-2.0 |
lobehub/lobehub
Builds chat bots once for Slack, Teams, Google Chat, Discord, GitHub and Linear with the Chat SDK, covering event handlers, cards, modals, streaming and state adapters.
agentfront/frontmcp
A skill your agent uses when pushing real-time notifications or events into Claude Code (or another MCP client) sessions, or building two-way chat bridges.
vercel/vercel-plugin
Vercel Chat SDK expert guidance. An agent skill from vercel/vercel-plugin.
FerroxLabs/wayland
Bot development expertise covering Slack, Discord, and Telegram bot architecture, command handling patterns, event-driven design, conversation state management, rate limiting, user permission…
LeoYeAI/openclaw-master-skills
HITL Protocol — the open standard for human decisions in autonomous agent workflows.
melandlabs/openloomi
openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…
databuddy-analytics/Databuddy
Integrate Databuddy analytics using the SDK, REST API, or MCP.
databuddy-analytics/Databuddy
Help external users integrate Databuddy into their own apps.
databuddy-analytics/Databuddy
Build or review Bun fullstack TypeScript code with Drizzle-backed SQL.
databuddy-analytics/Databuddy
Design, implement, and review software using vertical slices (feature-first architecture) instead of horizontal layers.
databuddy-analytics/Databuddy
Work inside the Databuddy monorepo for internal implementation, debugging, review, and refactoring.
databuddy-analytics/Databuddy
A skill your agent uses whenever the Databuddy MCP server is available and the user wants analytics, errors, vitals, investigations, flags, links, annotations, funnels, or goals queried or changed.
Build multi-platform chat bots with Chat SDK (chat npm package). Chat SDK is an agent skill from databuddy-analytics/Databuddy. Build multi-platform chat bots with Chat SDK (chat npm package).
Chat SDK fits situations like: developers want to build a Slack; handle mentions; direct messages; subscribed threads.
Run `npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a claude-code`. Or copy the skill folder (.agents/skills/chat-sdk in databuddy-analytics/Databuddy) into .claude/skills/chat-sdk in your project. Claude Code loads it when a task matches its description.
Run `npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a codex`. Or copy the skill folder (.agents/skills/chat-sdk in databuddy-analytics/Databuddy) into .agents/skills/chat-sdk in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add databuddy-analytics/Databuddy --skill chat-sdk -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/chat-sdk, .gemini/skills/chat-sdk, .github/skills/chat-sdk and .opencode/skills/chat-sdk in your project.
SKILL.md names no scripts, command-line tools or credentials: Chat SDK is instructions for the agent only.
SKILL.md names 2 domains. As links in the text: vercel.com and chat-sdk.dev. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Chat SDK is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Chat SDK: Chat SDK Bots (lobehub/lobehub, 83k stars), Frontmcp Channels (agentfront/frontmcp, 146 stars), Chat SDK (vercel/vercel-plugin, 301 stars) and Bot Builder (FerroxLabs/wayland, 608 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
databuddy-analytics (a GitHub organization) maintains it in databuddy-analytics/Databuddy, which has 1,176 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 7, 2026.
Source: databuddy-analytics/Databuddy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.