cohere-webhooks-events
Implement Cohere streaming event handling, SSE patterns, and connector webhooks. Use when building streaming UIs, handling chat/tool events, or registering Cohere connectors for RAG. Trigger with phrases like "cohere streaming", "cohere events", "cohere SSE", "cohere connectors", "cohere webhook".
Best use case
cohere-webhooks-events is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Implement Cohere streaming event handling, SSE patterns, and connector webhooks. Use when building streaming UIs, handling chat/tool events, or registering Cohere connectors for RAG. Trigger with phrases like "cohere streaming", "cohere events", "cohere SSE", "cohere connectors", "cohere webhook".
Teams using cohere-webhooks-events should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/cohere-webhooks-events/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How cohere-webhooks-events Compares
| Feature / Agent | cohere-webhooks-events | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Implement Cohere streaming event handling, SSE patterns, and connector webhooks. Use when building streaming UIs, handling chat/tool events, or registering Cohere connectors for RAG. Trigger with phrases like "cohere streaming", "cohere events", "cohere SSE", "cohere connectors", "cohere webhook".
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Cohere Streaming Events & Connectors
## Overview
Handle Cohere's streaming chat events (SSE), tool-call events, citation events, and register data connectors for RAG. Cohere does not use traditional webhooks — its event model is streaming-based.
## Prerequisites
- `cohere-ai` SDK v7+
- Understanding of Server-Sent Events (SSE)
- For connectors: HTTPS endpoint accessible from internet
## Instructions
### Step 1: Chat Streaming Events
Cohere's `chatStream` returns a stream of typed events:
```typescript
import { CohereClientV2 } from 'cohere-ai';
const cohere = new CohereClientV2();
async function handleStream(userMessage: string) {
const stream = await cohere.chatStream({
model: 'command-a-03-2025',
messages: [{ role: 'user', content: userMessage }],
});
for await (const event of stream) {
switch (event.type) {
// Text content streaming
case 'content-start':
console.log('--- Generation started ---');
break;
case 'content-delta':
const text = event.delta?.message?.content?.text ?? '';
process.stdout.write(text);
break;
case 'content-end':
console.log('\n--- Generation complete ---');
break;
// Citation events (when using documents)
case 'citation-start':
console.log('Citation:', event.delta?.message?.citations);
break;
// Tool call events (when using tools)
case 'tool-call-start':
console.log('Tool call started:', event.delta?.message?.toolCalls?.function?.name);
break;
case 'tool-call-delta':
// Streaming tool arguments
break;
case 'tool-call-end':
console.log('Tool call complete');
break;
// Message lifecycle
case 'message-start':
console.log('Message ID:', event.id);
break;
case 'message-end':
console.log('Finish reason:', event.delta?.finishReason);
console.log('Usage:', event.delta?.usage);
break;
}
}
}
```
### Step 2: RAG Streaming with Citations
```typescript
async function streamRAG(query: string, docs: string[]) {
const stream = await cohere.chatStream({
model: 'command-a-03-2025',
messages: [{ role: 'user', content: query }],
documents: docs.map((text, i) => ({
id: `doc-${i}`,
data: { text },
})),
});
let fullText = '';
const citations: Array<{ start: number; end: number; text: string; sources: string[] }> = [];
for await (const event of stream) {
if (event.type === 'content-delta') {
const chunk = event.delta?.message?.content?.text ?? '';
fullText += chunk;
process.stdout.write(chunk);
}
if (event.type === 'citation-start') {
const cite = event.delta?.message?.citations;
if (cite) {
citations.push({
start: cite.start,
end: cite.end,
text: cite.text,
sources: cite.sources?.map((s: any) => s.id) ?? [],
});
}
}
}
return { fullText, citations };
}
```
### Step 3: Streaming Tool Use
```typescript
const tools = [{
type: 'function' as const,
function: {
name: 'get_price',
description: 'Get stock price',
parameters: {
type: 'object' as const,
properties: { ticker: { type: 'string' } },
required: ['ticker'],
},
},
}];
async function streamToolUse(query: string) {
const stream = await cohere.chatStream({
model: 'command-a-03-2025',
messages: [{ role: 'user', content: query }],
tools,
});
let currentToolName = '';
let currentToolArgs = '';
for await (const event of stream) {
switch (event.type) {
case 'tool-call-start':
currentToolName = event.delta?.message?.toolCalls?.function?.name ?? '';
currentToolArgs = '';
console.log(`Calling tool: ${currentToolName}`);
break;
case 'tool-call-delta':
currentToolArgs += event.delta?.message?.toolCalls?.function?.arguments ?? '';
break;
case 'tool-call-end':
console.log(`Tool args: ${currentToolArgs}`);
// Execute tool here, then send results back
break;
case 'content-delta':
process.stdout.write(event.delta?.message?.content?.text ?? '');
break;
}
}
}
```
### Step 4: SSE Endpoint for Frontend
```typescript
// Express endpoint that proxies Cohere stream as SSE
import express from 'express';
const app = express();
app.use(express.json());
app.post('/api/chat/stream', async (req, res) => {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const cohere = new CohereClientV2();
try {
const stream = await cohere.chatStream({
model: 'command-a-03-2025',
messages: req.body.messages,
});
for await (const event of stream) {
if (event.type === 'content-delta') {
const text = event.delta?.message?.content?.text ?? '';
res.write(`data: ${JSON.stringify({ type: 'text', text })}\n\n`);
}
if (event.type === 'citation-start') {
res.write(`data: ${JSON.stringify({ type: 'citation', data: event.delta })}\n\n`);
}
if (event.type === 'message-end') {
res.write(`data: ${JSON.stringify({ type: 'done', usage: event.delta?.usage })}\n\n`);
}
}
res.write('data: [DONE]\n\n');
res.end();
} catch (err) {
res.write(`data: ${JSON.stringify({ type: 'error', message: String(err) })}\n\n`);
res.end();
}
});
```
### Step 5: Cohere Connectors (Data Source Registration)
```typescript
// Register a custom data source for RAG queries
// Connectors allow Cohere to fetch documents from your APIs
// Create a connector
const connector = await cohere.connectors.create({
name: 'internal-docs',
url: 'https://api.yourapp.com/search',
description: 'Internal documentation search',
});
// Use connector in chat for automatic retrieval
const response = await cohere.chat({
model: 'command-a-03-2025',
messages: [{ role: 'user', content: 'How do I reset my password?' }],
connectors: [{ id: connector.connector.id }],
});
// List registered connectors
const connectors = await cohere.connectors.list();
console.log('Registered connectors:', connectors.connectors.length);
```
**Connector endpoint contract:** Your URL receives `POST { query: string }` and must return `{ results: [{ id, text, title?, url? }] }`.
## Event Type Reference
| Event | When | Contains |
|-------|------|----------|
| `message-start` | Stream begins | Message ID |
| `content-start` | Text generation starts | Content index |
| `content-delta` | Each text token | Text chunk |
| `content-end` | Text generation ends | - |
| `citation-start` | Citation found | Source, position |
| `tool-call-start` | Tool call begins | Tool name |
| `tool-call-delta` | Tool args streaming | Argument chunk |
| `tool-call-end` | Tool call complete | - |
| `message-end` | Stream ends | Finish reason, usage |
## Error Handling
| Issue | Cause | Solution |
|-------|-------|----------|
| Stream drops mid-response | Network timeout | Set higher timeout, add reconnect |
| No citation events | No documents passed | Include `documents` param |
| Tool events but no content | Tool call in progress | Wait for tool results, re-stream |
| Connector returns empty | Bad search endpoint | Test endpoint with `curl` |
## Resources
- [Cohere Streaming Guide](https://docs.cohere.com/docs/streaming)
- [RAG Streaming](https://docs.cohere.com/docs/rag-streaming)
- [Tool Use Streaming](https://docs.cohere.com/docs/tool-use-streaming)
- [Connectors API](https://docs.cohere.com/reference/create-connector)
## Next Steps
For performance optimization, see `cohere-performance-tuning`.Related Skills
server-sent-events-setup
Server Sent Events Setup - Auto-activating skill for API Integration. Triggers on: server sent events setup, server sent events setup Part of the API Integration skill category.
exa-webhooks-events
Build event-driven integrations with Exa using scheduled monitors and content alerts. Use when building content monitoring, competitive intelligence pipelines, or scheduled search automation with Exa. Trigger with phrases like "exa monitor", "exa content alerts", "exa scheduled search", "exa event-driven", "exa notifications".
evernote-webhooks-events
Implement Evernote webhook notifications and sync events. Use when handling note changes, implementing real-time sync, or processing Evernote notifications. Trigger with phrases like "evernote webhook", "evernote events", "evernote sync", "evernote notifications".
emitting-api-events
Build event-driven APIs with webhooks, Server-Sent Events, and real-time notifications. Use when building event-driven API architectures. Trigger with phrases like "add webhooks", "implement events", or "create event-driven API".
elevenlabs-webhooks-events
Implement ElevenLabs webhook HMAC signature verification and event handling. Use when setting up webhook endpoints for transcription completion, call recording, or agent conversation events from ElevenLabs. Trigger: "elevenlabs webhook", "elevenlabs events", "elevenlabs webhook signature", "handle elevenlabs notifications", "elevenlabs post-call webhook", "elevenlabs transcription webhook".
documenso-webhooks-events
Implement Documenso webhook configuration and event handling. Use when setting up webhook endpoints, handling document events, or implementing real-time notifications for document signing. Trigger with phrases like "documenso webhook", "documenso events", "document completed webhook", "signing notification".
deepgram-webhooks-events
Implement Deepgram callback and webhook handling for async transcription. Use when implementing callback URLs, processing async transcription results, or handling Deepgram event notifications. Trigger: "deepgram callback", "deepgram webhook", "async transcription", "deepgram events", "deepgram notifications", "deepgram async".
databricks-webhooks-events
Configure Databricks job notifications, webhooks, and event handling. Use when setting up Slack/Teams notifications, configuring alerts, or integrating Databricks events with external systems. Trigger with phrases like "databricks webhook", "databricks notifications", "databricks alerts", "job failure notification", "databricks slack".
customerio-webhooks-events
Implement Customer.io webhook and reporting event handling. Use when processing email delivery events, click/open tracking, bounce handling, or streaming to a data warehouse. Trigger: "customer.io webhook", "customer.io events", "customer.io delivery status", "customer.io bounces", "customer.io open tracking".
coreweave-webhooks-events
Monitor CoreWeave cluster events and GPU workload status. Use when tracking pod lifecycle events, monitoring GPU utilization, or alerting on inference service health changes. Trigger with phrases like "coreweave events", "coreweave monitoring", "coreweave pod alerts", "coreweave gpu monitoring".
cohere-upgrade-migration
Migrate from Cohere API v1 to v2 and upgrade SDK versions. Use when upgrading cohere-ai SDK, migrating from CohereClient to CohereClientV2, or handling breaking changes between API versions. Trigger with phrases like "upgrade cohere", "cohere migration", "cohere v1 to v2", "update cohere SDK", "cohere breaking changes".
cohere-security-basics
Apply Cohere security best practices for API key management and access control. Use when securing API keys, implementing key rotation, or auditing Cohere security configuration. Trigger with phrases like "cohere security", "cohere secrets", "secure cohere", "cohere API key security", "cohere key rotation".