OpenTag is an open-source, self-hosted on-call triage assistant for Slack and Microsoft Teams. Designed as an alternative to Claude Tag.
It reads channel conversations and uploaded files, then returns model-backed replies, native chat cards, charts, cited research, and draft Linear or Notion items. Linear and Notion writes pause for approval before the agent sends the request.
The AI assistant combines a Node.js Channels runtime with a Python LangGraph agent. CopilotKit Intelligence can manage chat-platform delivery and credentials, while you run the agent, model access, tools, deployment, state, and logs. You can also operate the channel connection yourself with the open-source Channels SDK.
A typical task begins with a Slack mention. OpenTag reads the thread, sends the context to its agent, calls configured research or workspace tools, and returns the result inside the conversation. A CSV file can become a native chart, while a bug discussion can become a proposed Linear issue behind an approval button.
Key Features
- Runs as an MIT-licensed application that you can fork, customize, and deploy on your own infrastructure.
- Connects to Slack and Microsoft Teams through CopilotKit Channels.
- Returns native issue cards, page cards, status blocks, incident details, tables, charts, diagrams, and links inside the chat thread.
- Uses a resumable LangGraph confirmation step before sending any Linear or Notion write request.
- Accepts file-aware prompts and can render CSV data as a native Slack chart with an accompanying explanation.
- Adds optional live web, GitHub, PostHog, Linear, and Notion sources only when their credentials are configured.
- Connects the Node Channels runtime to the included Python LangGraph agent over AG-UI.
- Accepts another AG-UI-compatible agent through
AGENT_URLif you want to replace the included backend. - Defines a two-service Railway deployment for the Python agent and long-running Node runtime.
OpenTag vs. Claude Tag
OpenTag and Claude Tag both bring an AI agent into team conversations. OpenTag exposes the application code, agent, tools, interface components, and deployment configuration. Claude Tag is an Anthropic-managed experience tied to Claude and the organization’s Claude setup.
Choose OpenTag when you need to modify the agent or operate its runtime. The managed CopilotKit Intelligence path handles platform ingress and credentials. Your team operates the agent, pays for API usage and hosting, and maintains the deployment and state.
| Area | OpenTag | Claude Tag |
|---|---|---|
| Delivery model | Open-source application with a self-operated runtime and agent | Anthropic-managed product |
| Chat platforms | Slack and Microsoft Teams | Slack |
| Agent backend | Included Python LangGraph agent or another AG-UI-compatible agent | Claude |
| Integrations | Optional Tavily, GitHub, PostHog, Linear, and Notion sources | Tools and access configured for the organization |
| Write actions | Linear and Notion writes pause for explicit approval | Permissions follow the organization’s Claude configuration |
| Cost | MIT-licensed code, plus model, hosting, and optional service costs | Requires eligible paid Claude organization access and usage capacity |
How to Use OpenTag
You need Node.js 22 or later, pnpm, Python 3.12, uv, a CopilotKit account, an OpenAI API key, and permission to install an app in a Slack workspace.
1. Clone OpenTag and install its dependencies
git clone https://github.com/CopilotKit/OpenTag.git
cd OpenTag
pnpm install2. Create the managed Channel
Create the Channel before creating the Slack app. The Channel setup generates a Slack manifest with the correct request URL. The guided command installs a setup skill for a compatible coding agent:
npx --yes copilotkit@latest channels setupYou can also select the CopilotKit project and add the Channel yourself:
npx --yes copilotkit@latest project select
npx --yes copilotkit@latest channels add --name open-tag --display-name "OpenTag" --adapter slack --jsonFollow the returned nextAction when setup pauses for work in the Slack console. Reinstall the app after applying the manifest, then collect the Bot User OAuth Token and Signing Secret requested by the adapter. This managed path does not use a Socket Mode xapp token.
3. Configure the environment
cp .env.example .envAdd the model key, local agent address, Intelligence API key, and Channel name to the root .env file:
OPENAI_API_KEY=sk-...
AGENT_URL=http://localhost:8123/
INTELLIGENCE_API_KEY=cpk-...
INTELLIGENCE_CHANNEL_NAME=open-tag4. Start the stack
The command prepares the locked Python environment, installs Playwright Chromium, and starts both the Python agent and Node runtime in development mode.
pnpm dev5. Invite and test the bot
Invite OpenTag to the target Slack channel before sending a mention:
/invite @OpenTagMention the bot from a human account and request a concrete result. Follow-up messages in that thread can continue without another mention because the first mention subscribes the thread.
@OpenTag summarize this thread and draft a Linear issueIf the bot does not answer, inspect the Channel declaration, adapter, environment, and lifecycle state:
npx --yes copilotkit@latest channels status --json6. Add optional research and workspace sources
| Source | Environment setting | Purpose |
|---|---|---|
| Tavily | TAVILY_API_KEY | Live web research |
| GitHub | GITHUB_PERSONAL_ACCESS_TOKEN | Read-only repository, code, issue, and pull request search |
| PostHog | POSTHOG_PERSONAL_API_KEY | Read-only analytics queries through MCP |
| Linear | LINEAR_API_KEY | Issue search and approval-gated writes |
| Notion | NOTION_MCP_URL and NOTION_MCP_AUTH_TOKEN | Page access and approval-gated writes through remote MCP |
Related 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
- MIT-licensed and fully customizable.
- Works with Slack and Microsoft Teams.
- Requires approval before Linear or Notion writes.
- Accepts other AG-UI-compatible agents.
Cons
- Requires a multi-part local setup.
- Requires paid OpenAI API usage.
- Limited to Slack and Microsoft Teams.
- Requires Slack admin access and a CopilotKit account.
FAQs
Q: Do I need a CopilotKit account to run OpenTag?
A: The official managed Channel quick start requires a CopilotKit account and Intelligence API key. You can operate the channel connection with the open-source Channels SDK if you do not want the managed runner.
Q: Does OpenTag require Linear or Notion?
A: No. OpenTag can chat, triage requests, and render interface components without either integration. Each source registers only after you provide its required credentials.
Q: Which model providers work with the included agent?
A: The official quick start requires an OpenAI API key. The runtime can connect to another AG-UI-compatible agent through AGENT_URL, but the repository documents its included Python LangGraph agent as the supported backend.
Q: Does OpenTag use Slack Socket Mode?
A: No. Slack sends events to a CopilotKit Intelligence-hosted HTTPS request URL. The OpenTag runtime opens an outbound authenticated WebSocket connection to Intelligence. The managed setup needs neither a Socket Mode xapp token nor your own public tunnel.
Q: Why does OpenTag ignore a Slack mention?
A: Confirm that you invited the bot to the channel. Slack does not send an app_mention event for a conversation where the app is absent. Run channels status --json if the bot is present but silent.










