OpenTag is an open-source, self-hosted AI agent for Slack, Discord, Telegram, and WhatsApp.
It reads a chat thread, answers questions, calls connected tools, and renders results as rich cards, tables, and charts inside the conversation.
The agent is built on top of @copilotkit/bot, an open SDK from CopilotKit for building chat-platform agents, and follows the same thread-reading and tool-calling workflow as Claude in Slack (Claude Tag) on infrastructure you host yourself.
Posting a bug report or a long decision thread in Slack usually means someone has to read the whole thing, summarize it by hand, and manually create a Linear issue or a Notion doc.
OpenTag automates that directly inside the thread. You mention the bot, it reads the conversation through a read_thread tool, drafts a response or a ticket, and stops at a confirmation button before it writes anything to Linear or Notion.
The same app/ code runs across every supported chat platform. The tool logic, the confirmation gate, and the rendering layer stay identical on Slack, Telegram, or any other connected platform.
Key Features
- Runs on your own infrastructure with no per-seat cost.
- Supports Slack, Discord, Telegram, and WhatsApp through swappable platform adapters.
- Posts rich Block Kit messages, issue cards, charts, diagrams, and tables directly in threads using generative UI.
- Uses a human-in-the-loop
confirm_writegate that blocks any Linear or Notion write until an explicit Approve click. - Works with OpenAI, Anthropic, and Google models via a single environment variable.
- Connects to Linear for querying and filing issues, and to Notion for finding pages and creating documents.
- Renders charts, Mermaid diagrams, and tables locally inside a headless Chromium browser; no data is sent to external rendering services.
- Offers durable Redis persistence for approval state and interactive components across server restarts.
- Controls agent behavior through a single system prompt in
runtime.ts; copy theapp/directory to build your own bot.
OpenTag vs. Claude Tag
OpenTag and Claude Tag both allow you to assign work to an AI agent from inside a Slack conversation. Claude Tag runs as Anthropic’s managed product, while OpenTag requires your team to run the bot, agent runtime, model access, and integrations.
| Area | OpenTag | Claude Tag |
|---|---|---|
| Hosting | Runs in your own environment | Runs as an Anthropic-managed service |
| Slack setup | Requires a Slack app, tokens, and local or hosted runtime | Connects through an organization-managed Slack setup |
| Model support | Works with OpenAI, Anthropic, or Google credentials | Uses Claude |
| Integrations | Supports Linear, Notion, MCP tools, and custom agent logic | Uses the tools and access configured for the organization |
| Write actions | Linear and Notion actions pause for Create or Cancel approval | Permissions follow the organization’s Claude Tag configuration |
| Cost model | MIT-licensed code, plus model usage and infrastructure costs | Requires eligible Claude organization access and usage capacity |
OpenTag is good for teams that need to change the system prompt, connect their own tools, select a model provider, or keep the runtime inside their own infrastructure. The tradeoff is operational work: Slack app configuration, credentials, deployment, and ongoing maintenance all remain with the team.
Claude Tag works best for organizations already running Claude Team or Enterprise that want an AI agent in Slack without operating the underlying stack. Its managed setup reduces deployment work, but the workflow stays within Anthropic’s product, model, and administrative controls.
How to Use OpenTag
The base setup needs a Slack app, one model-provider key, and two running processes: the agent runtime and the Slack bot.
Start with the Slack workflow below, then add Linear, Notion, or chart rendering for the tasks your team actually uses.
Table Of Contents
1. Get the CopilotKit Slack starter
OpenTag’s working setup runs from the CopilotKit monorepo. Clone the repository and move into its root directory.
git clone https://github.com/CopilotKit/CopilotKit.git
cd CopilotKitThe OpenTag starter lives in the examples/slack package. Keep the repository root open in your terminal because the runtime and bot commands run from there.
2. Create the Slack app
Open the Slack app builder, select From a manifest, and paste the included OpenTag Slack manifest.
Install the app in the Slack workspace, then collect these two credentials:
- Bot User OAuth Token (
xoxb-...) forSLACK_BOT_TOKEN - App-Level Token (
xapp-...) with theconnections:writescope forSLACK_APP_TOKEN
The manifest already includes Socket Mode and OpenTag’s Slack commands.
3. Add Slack tokens and a model key
Move into the Slack example directory and create the environment file.
cd examples/slack
cp .env.example .envOpen .env and add your Slack credentials plus one supported model-provider key.
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...
OPENAI_API_KEY=sk-...Anthropic and Google credentials also work. Replace OPENAI_API_KEY with ANTHROPIC_API_KEY or GOOGLE_API_KEY when using either provider. Add AGENT_MODEL when the bot should use a specific provider and model.
Return to the repository root before installing dependencies.
cd ../..4. Start the agent runtime and Slack bot
Install the workspace dependencies once.
pnpm installOpen two terminals in the CopilotKit repository root.
Run the agent runtime in the first terminal:
pnpm --filter slack-example runtimeRun the Slack bot in the second terminal:
pnpm --filter slack-example devThe runtime handles model requests and tool calls. The bot receives Slack events and posts responses into the relevant channel or thread.
5. Assign a task from a Slack thread
Mention the bot in a thread and describe the finished result you need.
@OpenTag summarize this thread and file it as a bugOpenTag reads the thread before responding. A request to create a Linear issue or Notion page produces a proposed write action with Create and Cancel controls instead of writing immediately.
6. Add integrations for specific workflows
Add integrations only when the Slack bot already covers the basic thread workflow.
| Workflow | Required setup | Result in Slack |
|---|---|---|
| Linear issue triage | Add LINEAR_API_KEY and, when needed, LINEAR_TEAM_KEY | Query issues, draft bug reports, and approve new Linear tickets |
| Notion search and writing | Add NOTION_TOKEN and NOTION_MCP_AUTH_TOKEN, then start the Notion service | Find workspace pages or prepare an approved Notion document |
| Charts and diagrams | Install Playwright Chromium | Turn uploaded data or thread details into charts, tables, and diagrams |
Start the Notion service in a separate terminal when your workflow needs Notion access.
pnpm --filter slack-example notion-mcpInstall Chromium before using chart or diagram rendering.
npx playwright install chromiumRelated Resources
- Automate Anything: 10 Best & Open-source AI Agents
- Open Design: Free Open-Source Claude Design Alternative
- 7 Best & Open-source Claude Cowork Alternatives
Pros
- Fully self-hosted.
- No per-seat pricing.
- Multi-platform support.
- Human-in-the-loop write gate.
- Bring your own LLM.
- Local chart and diagram rendering.
Cons
- Complex initial setup.
- Requires Slack app configuration.
- Needs a paid LLM API key.
- In-memory state without Redis.
FAQs
Q: Do I need to sign up for anything to run OpenTag?
A: You need a Slack workspace where you can install a custom app, and an API key from a supported model provider. No OpenTag-specific account or signup exists outside of the optional managed service waitlist.
Q: Does OpenTag require Linear or Notion?
A: No. Both integrations are optional. Leaving LINEAR_API_KEY or NOTION_TOKEN blank runs the agent without that connection.
Q: Is data sent to an external service when OpenTag renders a chart?
A: No. Chart, diagram, and table generation runs through a local headless Chromium instance, and the underlying data stays inside your own runtime.
Q: Does OpenTag work with local models like Ollama or vLLM?
A: Yes, if your local model exposes an OpenAI-compatible endpoint. Set AGENT_URL to your endpoint and provide a dummy API key as required by the runtime.
Q: What files can OpenTag analyze?
A: OpenTag accepts images and PDFs through a vision or document-capable model. CSV, JSON, and text files become text input for the agent. It can return tables, charts, and diagrams in the conversation after the rendering requirements are installed.










