
Streaming
- 13 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
streaming is a skill that configures response streaming, chunking, and typing indicators for the clodds chat bot across messaging platforms.
About
This skill configures response streaming and real-time message delivery for the clodds chat bot. It sets chunk size, inter-chunk delay, and typing indicators, and applies per-platform message-length limits for Telegram, Discord, Slack, WhatsApp, and WebChat. A developer uses it when tuning how a bot streams long replies across messaging platforms.
- Configures response streaming, chunking, and typing indicators for chat bots
- Per-platform message limits for Telegram, Discord, Slack, WhatsApp, WebChat
- TypeScript createStreamingConfig API plus /streaming chat commands
Streaming by the numbers
- 13 all-time installs (skills.sh)
- Ranked #3,516 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
streaming capabilities & compatibility
- Capabilities
- message chunking · typing indicators · platform limits
- Works with
- slack
- Use cases
- api development
- Runs
- Runs locally
- Pricing
- Free
What streaming says it does
Configure response streaming, typing indicators, and real-time message delivery.
Disable for short responses** — Don't stream "OK"
npx skills add https://github.com/alsk1992/cloddsbot --skill streamingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 13 |
|---|---|
| repo stars | ★ 610 |
| Last updated | June 26, 2026 |
| Repository | alsk1992/cloddsbot ↗ |
What it does
Configure streamed, chunked bot responses with typing indicators across messaging platforms.
Who is it for?
Tuning how a chat bot streams long responses across Telegram, Discord, and Slack.
Skip if: Streaming financial market data or audio synthesis.
When should I use this skill?
Configuring chunk size, delay, or typing indicators for bot message delivery.
What you get
A streaming config with chunk sizing, delays, and typing indicators applied per platform.
- Streaming configuration object
- Per-platform chunk and typing settings
By the numbers
- Platform limits table covers 5 platforms
- 4 best-practices listed
Files
Streaming - Complete API Reference
Configure response streaming, typing indicators, and real-time message delivery.
---
Chat Commands
View Settings
/streaming Show current settings
/streaming status Streaming statusConfigure Streaming
/streaming enable Enable streaming
/streaming disable Disable streaming
/streaming chunk-size 50 Set chunk size (chars)
/streaming delay 100 Set delay between chunks (ms)Typing Indicators
/streaming typing on Enable typing indicators
/streaming typing off Disable typing indicators
/streaming typing duration 3000 Typing duration (ms)Platform Settings
/streaming platforms Show platform limits
/streaming platform telegram chunk 100 Set per-platform---
TypeScript API Reference
Create Streaming Config
import { createStreamingConfig } from 'clodds/streaming';
const streaming = createStreamingConfig({
// Enable streaming
enabled: true,
// Chunk settings
minChunkSize: 20, // Min chars per chunk
maxChunkSize: 200, // Max chars per chunk
chunkDelayMs: 50, // Delay between chunks
// Typing indicators
showTyping: true,
typingDurationMs: 3000,
// Platform-specific limits
platformLimits: {
telegram: { maxMessageLength: 4096, maxChunkSize: 100 },
discord: { maxMessageLength: 2000, maxChunkSize: 150 },
slack: { maxMessageLength: 40000, maxChunkSize: 200 },
},
});Enable/Disable
// Enable streaming
streaming.enable();
// Disable streaming
streaming.disable();
// Check status
const enabled = streaming.isEnabled();Configure Chunks
// Set chunk size
streaming.setChunkSize(100);
// Set delay
streaming.setChunkDelay(75);
// Get current settings
const settings = streaming.getSettings();
console.log(`Chunk size: ${settings.chunkSize}`);
console.log(`Delay: ${settings.chunkDelayMs}ms`);Platform Settings
// Set platform-specific limit
streaming.setPlatformLimit('telegram', {
maxMessageLength: 4096,
maxChunkSize: 80,
});
// Get platform limits
const limits = streaming.getPlatformLimits();Typing Indicators
// Enable typing
streaming.enableTyping();
// Disable typing
streaming.disableTyping();
// Set duration
streaming.setTypingDuration(5000);---
Platform Limits
| Platform | Max Message | Recommended Chunk |
|---|---|---|
| Telegram | 4,096 chars | 80-100 |
| Discord | 2,000 chars | 100-150 |
| Slack | 40,000 chars | 150-200 |
| 65,536 chars | 100-150 | |
| WebChat | Unlimited | 150-200 |
---
Best Practices
1. Smaller chunks for mobile — Better UX on slow connections 2. Adjust delay for readability — 50-100ms feels natural 3. Disable for short responses — Don't stream "OK" 4. Monitor performance — Streaming adds overhead
/**
* Streaming CLI Skill
*
* Commands:
* /stream config - Show streaming config
* /stream set <key> <value> - Set config
* /stream test - Test streaming output
* /stream active - List active streams
* /stream chunk <platform> <text> - Chunk text for platform
* /stream interrupt <platform> <chatId> - Interrupt a stream
*/
let serviceInstance: any = null;
async function getService() {
const { createStreamingService } = await import('../../../streaming/index');
if (!serviceInstance) {
serviceInstance = createStreamingService();
}
return serviceInstance;
}
async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const cmd = parts[0]?.toLowerCase() || 'config';
try {
const { createStreamingService, chunkForPlatform } = await import('../../../streaming/index');
const service = await getService();
switch (cmd) {
case 'config': {
const config = service.getConfig();
return `**Streaming Config**\n\n` +
`Enabled: ${config.enabled}\n` +
`Min chunk size: ${config.minChunkSize} chars\n` +
`Flush interval: ${config.flushIntervalMs}ms\n` +
`Typing indicator: ${config.typingIndicator}`;
}
case 'set': {
if (parts.length < 3) return 'Usage: /stream set <key> <value>\n\nKeys: enabled, minChunkSize, flushIntervalMs, typingIndicator';
const key = parts[1];
const value = parts[2];
// Recreate service with updated config
const currentConfig = service.getConfig();
const updates: Record<string, unknown> = {};
if (key === 'enabled') updates.enabled = value === 'true';
else if (key === 'minChunkSize') {
const parsed = parseInt(value, 10);
if (isNaN(parsed)) return 'minChunkSize must be a valid number.';
updates.minChunkSize = parsed;
}
else if (key === 'flushIntervalMs') {
const parsed = parseInt(value, 10);
if (isNaN(parsed)) return 'flushIntervalMs must be a valid number.';
updates.flushIntervalMs = parsed;
}
else if (key === 'typingIndicator') updates.typingIndicator = value === 'true';
else return `Unknown config key: ${key}. Valid keys: enabled, minChunkSize, flushIntervalMs, typingIndicator`;
serviceInstance = createStreamingService({ ...currentConfig, ...updates });
const newConfig = serviceInstance.getConfig();
return `**Config Updated**\n\n` +
`Enabled: ${newConfig.enabled}\n` +
`Min chunk size: ${newConfig.minChunkSize} chars\n` +
`Flush interval: ${newConfig.flushIntervalMs}ms\n` +
`Typing indicator: ${newConfig.typingIndicator}`;
}
case 'test': {
const testText = parts.slice(1).join(' ') || 'This is a streaming test message. It demonstrates how the streaming service chunks and delivers content in real-time across different platforms.';
const telegramChunks = chunkForPlatform(testText, 'telegram');
const discordChunks = chunkForPlatform(testText, 'discord');
return `**Streaming Test**\n\n` +
`Input: ${testText.length} chars\n\n` +
`Telegram (4096 limit): ${telegramChunks.length} chunk(s)\n` +
`Discord (2000 limit): ${discordChunks.length} chunk(s)\n\n` +
`Preview (first chunk):\n${telegramChunks[0] || '(empty)'}`;
}
case 'active': {
const active = service.listActive();
if (active.length === 0) {
return '**Active Streams**\n\nNo active streams.';
}
const lines = active.map((ctx: any) =>
`- ${ctx.platform}:${ctx.chatId} | Buffer: ${ctx.buffer.length} chars | Interrupted: ${ctx.interrupted || false}`
);
return `**Active Streams (${active.length})**\n\n${lines.join('\n')}`;
}
case 'chunk': {
const platform = parts[1] || 'telegram';
const text = parts.slice(2).join(' ');
if (!text) return 'Usage: /stream chunk <platform> <text>\n\nPlatforms: telegram, discord, webchat';
const chunks = chunkForPlatform(text, platform);
const output = chunks.map((c, i) => `**Chunk ${i + 1}** (${c.length} chars):\n${c}`).join('\n\n');
return `**Chunked for ${platform}** (${chunks.length} chunks)\n\n${output}`;
}
case 'interrupt': {
const platform = parts[1];
const chatId = parts[2];
if (!platform || !chatId) return 'Usage: /stream interrupt <platform> <chatId>';
await service.interruptByChat(platform, chatId, 'Manual interrupt via /stream command');
return `Stream interrupted for ${platform}:${chatId}.`;
}
default:
return helpText();
}
} catch (error) {
return `Error: ${error instanceof Error ? error.message : String(error)}`;
}
}
function helpText(): string {
return `**Streaming Commands**
/stream config - Show config
/stream set <key> <value> - Set config
/stream test [text] - Test streaming output
/stream active - List active streams
/stream chunk <platform> <text> - Chunk text for platform
/stream interrupt <platform> <id> - Interrupt a stream`;
}
export default {
name: 'streaming',
description: 'Response streaming configuration and real-time output',
commands: ['/stream', '/streaming'],
handle: execute,
};
Related skills
FAQ
Which platforms have configurable message limits?
Telegram (4,096 chars), Discord (2,000), Slack (40,000), WhatsApp (65,536), and WebChat (unlimited).
What does chunk delay control?
The delay in milliseconds between streamed chunks; docs suggest 50-100ms feels natural.