Agent skill

Bot Builder

by FerroxLabs in 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…

Apache-2.0Auto-check passedBackend & APIs

Install Bot Builder

skills CLI
$ npx skills add FerroxLabs/wayland --skill bot-builder -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install FerroxLabs/wayland bot-builder --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/software-engineering/bot-builder .claude/skills/bot-builder && rm -rf skills-src

Use ~/.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/

Facts

Skill name
bot-builder
GitHub stars
608
Token cost
~2.5k tokens
SKILL.md length
449 words
Files
1
Skills in repo
1,194
Repo updated
First seen
Licence
Apache-2.0

At a glance

Bot development expertise covering Slack, Discord, and Telegram bot architecture, command handling patterns, event-driven design, conversation state management, rate limiting, user permission…

  • Works in 8 steps: Acknowledge immediately: Respond within… → Use ephemeral messages for errors: Only… → Provide help commands: Users should be… → …
  • The user asks about bot builder
  • SKILL.md covers Core Philosophy, Platform Comparison, Slack Bot Architecture and Discord Bot Architecture, plus 10 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Bot Builder is an agent skill from 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 systems, webhook handling, deployment strategies, monitoring, and bot testing approaches. Use when the user asks about bot builder, bot builder best practices, or needs guidance on bot builder implementation. Do NOT use when the user needs a different specialized skill or is asking about an unrelated technology domain.

Its SKILL.md is about 2.5k 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 Backend & APIs, covering Chatbots and conversational support, Rate limiting and Webhooks. It works with Discord, Slack and Telegram. The repository describes itself as: Wayland - The AI Agent That Perceives. Reasons. Acts. Evolves. The licence is Apache-2.0.

When your agent uses it

  • The user asks about bot builder
  • Bot builder best practices
  • Needs guidance on bot builder implementation
  • The user needs a different specialized skill

Example prompts

  • “/bot-builder”

Requirements

  • Python 3
  • Docker

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Acknowledge immediately: Respond within platform timeout (3s for Slack)
  2. Use ephemeral messages for errors: Only show errors to the user who triggered them
  3. Provide help commands: Users should be able to discover capabilities
  4. Log all interactions: For debugging and audit trails
  5. Handle graceful shutdown: Finish processing current messages before exit
  6. Use thread replies: Keep channels clean, reply in threads
  7. Rate limit per user: Prevent abuse
  8. Test command handlers in isolation: Mock platform APIs

What it can do on your machine

Read from SKILL.md and the folder at commit 4c030c7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript, python, dockerfile, yaml and markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Bot Builder loads about 2.5k tokens when it runs. Until then it costs about 131 tokens; SKILL.md has 449 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~131
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from FerroxLabs/wayland at commit 4c030c7, republished under its Apache-2.0 licence (© FerroxLabs). 449 words, ~2,474 tokens.

Download SKILL.mdSave it as .claude/skills/bot-builder/SKILL.md (or your agent's skills folder).
name
bot-builder
description
Bot development expertise covering Slack, Discord, and Telegram bot architecture, command handling patterns, event-driven design, conversation state management, rate limiting, user permission systems, webhook handling, deployment strategies, monitoring, and bot testing approaches. Use when the user asks about bot builder, bot builder best practices, or needs guidance on bot builder implementation. Do NOT use when the user needs a different specialized skill or is asking about an unrelated technology domain.
license
Apache-2.0
metadata.author
foundry-skills
metadata.version
1.0.0
metadata.tags
automation shell-scripting guide
metadata.category
software-engineering
metadata.subcategory
developer-tools
metadata.disclaimer
none
metadata.difficulty
intermediate

Bot Builder

Core Philosophy

A bot is a software agent that interacts with users through a messaging platform. Great bots are responsive, predictable, helpful, and unobtrusive. They should handle errors gracefully, respect rate limits, and provide clear feedback about what they can and cannot do. Design for the messaging platform's idioms -- what works on Slack may not work on Discord.

Platform Comparison

FeatureSlackDiscordTelegram
Primary audienceEnterprise/WorkGaming/CommunityGeneral
Message formatBlocks, mrkdwnEmbeds, MarkdownHTML, Markdown
CommandsSlash commandsSlash + prefixCommands (/)
InteractionsButtons, modals, menusButtons, select menus, modalsInline keyboards, reply keyboards
Rate limitsVaries by method50 req/s per bot30 msg/s, 20 msg/min per chat
Webhook supportYes (Events API)Yes (Interactions)Yes (Webhook mode)
ThreadingThread repliesThread repliesReply-to-message
Auth modelOAuth 2.0 + Bot tokensBot tokenBot token from BotFather

Slack Bot Architecture

typescript
// src/app.ts
import { App, LogLevel } from '@slack/bolt';

const app = new App({
    token: ENV_CONFIG_VALUE,
    signingSecret: ENV_CONFIG_VALUE,
    socketMode: true,
    appToken: ENV_CONFIG_VALUE,
    logLevel: LogLevel.INFO,
});

// ──────────────────────────────────────────
// Slash Commands
// ──────────────────────────────────────────

app.command('/deploy', async ({ command, ack, respond, client }) => {
    await ack();  // Acknowledge within 3 seconds

    # ... (condensed) ...
});

// Start
(async () => {
    await app.start(3000);
    console.log('Bot is running on port 3000');
})();

Discord Bot Architecture

Discord.js Framework
typescript
// src/bot.ts
import { Client, GatewayIntentBits, REST, Routes, SlashCommandBuilder,
         EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle,
         PermissionFlagsBits } from 'discord.js';

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
    ],
});

// ──────────────────────────────────────────
// Register Slash Commands
// ──────────────────────────────────────────

const commands = [
    # ... (condensed) ...

function numberEmoji(n: number): string {
    const emojis = ['1\u20e3', '2\u20e3', '3\u20e3', '4\u20e3', '5\u20e3', '6\u20e3', '7\u20e3', '8\u20e3', '9\u20e3'];
    return emojis[n - 1] || String(n);
}

client.login(ENV_CONFIG_VALUE);

Telegram Bot Architecture

python-telegram-bot
python
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (
    Application, CommandHandler, CallbackQueryHandler,
    MessageHandler, ConversationHandler, filters
)

# ──────────────────────────────────────────
# Command Handlers
# ──────────────────────────────────────────

async def start(update: Update, context):
    keyboard = [
        [InlineKeyboardButton("Check Status", callback_data='status')],
        [InlineKeyboardButton("Help", callback_data='help')],
    ]
    await update.message.reply_text(
        "Welcome! I'm your DevOps bot. What would you like to do?",
        reply_markup=InlineKeyboardMarkup(keyboard)
    # ... (condensed) ...
        CHOOSING_ENV: [CallbackQueryHandler(env_chosen, pattern='^env_')],
        CONFIRMING: [CallbackQueryHandler(confirm_deploy, pattern='^confirm_')],
    },
    fallbacks=[CommandHandler('cancel', lambda u, c: ConversationHandler.END)],
))

app.run_polling()

Command Handling Patterns

Command Registry Pattern
typescript
// commands/registry.ts
interface Command {
    name: string;
    description: string;
    permissions?: string[];
    execute: (context: CommandContext) => Promise<void>;
}

class CommandRegistry {
    private commands = new Map<string, Command>();

    register(command: Command) {
        this.commands.set(command.name, command);
    }

    async handle(name: string, context: CommandContext): Promise<void> {
        const command = this.commands.get(name);
        if (!command) {
            # ... (condensed) ...
});

registry.register({
    name: 'status',
    description: 'Check service status',
    execute: async (ctx) => { /* ... */ },
});

Rate Limiting

typescript
class BotRateLimiter {
    private userCounts = new Map<string, { count: number; resetAt: number }>();

    constructor(
        private maxRequests: number = 10,
        private windowMs: number = 60000
    ) {}

    isAllowed(userId: string): boolean {
        const now = Date.now();
        const entry = this.userCounts.get(userId);

        if (!entry || now > entry.resetAt) {
            this.userCounts.set(userId, { count: 1, resetAt: now + this.windowMs });
            return true;
        }

        if (entry.count >= this.maxRequests) {
            # ... (condensed) ...
app.use(async ({ next, context }) => {
    if (!limiter.isAllowed(context.userId)) {
        await context.respond('You are sending commands too quickly. Please wait.');
        return;
    }
    await next();
});

Deployment

Docker Deployment
dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY dist/ ./dist/
USER node
CMD ["node", "dist/bot.js"]
yaml
# docker-compose.yml
services:
  bot:
    build: .
    restart: always
    env_file: .config
    logging:
      driver: json-file
      options: { max-size: "10m", max-file: "3" }
    healthcheck:
      test: ["CMD", "node", "dist/healthcheck.js"]
      interval: 30s
      timeout: 10s
      retries: 3

Testing Bots

typescript
// Mock the Slack client
describe('Deploy Command', () => {
    test('rejects invalid environment', async () => {
        const ack = jest.fn();
        const respond = jest.fn();

        await handleDeployCommand({
            command: { text: 'invalid-env', user_id: 'U123' },
            ack,
            respond,
        });

        expect(ack).toHaveBeenCalled();
        expect(respond).toHaveBeenCalledWith(
            expect.objectContaining({
                text: expect.stringContaining('Invalid environment'),
            })
        );
    # ... (condensed) ...
                blocks: expect.arrayContaining([
                    expect.objectContaining({ type: 'actions' }),
                ]),
            })
        );
    });
});

Best Practices

  1. Acknowledge immediately: Respond within platform timeout (3s for Slack)
  2. Use ephemeral messages for errors: Only show errors to the user who triggered them
  3. Provide help commands: Users should be able to discover capabilities
  4. Log all interactions: For debugging and audit trails
  5. Handle graceful shutdown: Finish processing current messages before exit
  6. Use thread replies: Keep channels clean, reply in threads
  7. Rate limit per user: Prevent abuse
  8. Test command handlers in isolation: Mock platform APIs
Show full SKILL.md (198 more words)Show less

When to Use

Use this skill when:

  • Designing or implementing bot builder solutions
  • Reviewing or improving existing bot builder approaches
  • Making architectural or implementation decisions about bot builder
  • Learning bot builder patterns and best practices
  • Troubleshooting bot builder-related issues

Do NOT use this skill when:

  • The question is about a fundamentally different technology domain
  • A more specific sibling skill covers the exact topic needed
  • The user needs a complete hands-on tutorial rather than expert guidance

Output Format

markdown
# Bot Builder Analysis

## Context Assessment
[Situation summary and constraints]

## Recommended Approach
[Primary recommendation with rationale]

## Implementation Steps
1. [Step with specific details]
2. [Step with specific details]
3. [Step with specific details]

## Trade-offs and Considerations
- [Key trade-off 1]
- [Key trade-off 2]

## Next Steps
- [Immediate action item]
- [Follow-up action item]

Example

Input: "Help me implement bot builder for a medium-scale production application"

Output: A structured analysis covering current state assessment, recommended bot builder approach with specific patterns, implementation roadmap with milestones, and risk mitigation strategies tailored to the application scale and constraints.

Edge Cases

  • Legacy system integration: When bot builder must coexist with legacy approaches, provide a gradual migration path rather than a complete rewrite
  • Scale mismatch: When the solution complexity exceeds the project scale, recommend a simpler approach and note when to revisit
  • Team skill gaps: When the team lacks experience with the recommended approach, include learning resources and simpler alternatives
  • Conflicting requirements: When constraints conflict (e.g., performance vs. maintainability), explicitly state the trade-off and recommend based on stated priorities

© FerroxLabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in src/process/resources/skills-library/bodies/skills/software-engineering/bot-builder of FerroxLabs/wayland.

Open the folder on GitHubat commit 4c030c7

Compare with similar skills

Bot Builder 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.

Bot Builder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Bot Builder this skillFerroxLabs/wayland608—~2.5kAutomated safety check: PassApache-2.0
Channel Debug Corevercel-labs/vercel-openclaw-archived117—~2kAutomated safety check: NotesMIT
Chat SDKdatabuddy-analytics/Databuddy1.2k—~2.6kAutomated safety check: PassAGPL-3.0
Frontmcp Channelsagentfront/frontmcp146—~3.7kAutomated safety check: PassApache-2.0
Tg Bot Opsserejaris/personal-corp-os229—~1.6kAutomated safety check: NotesMIT
Configure Notificationsyangyuan-zhen/PolyWeather315—~2.7kAutomated safety check: PassAGPL-3.0

Similar skills

  • Channel Debug Core

    vercel-labs/vercel-openclaw-archived

    Official

    Channel webhook triage for vercel-openclaw Slack/Telegram/Discord/WhatsApp issues: prove deployment state, collect admin readiness endpoints, build evidence-first handoff before fixes.

    117 GitHub stars~2k tokensUpdated 4 mo ago
    Backend & APIsAuto-check: notes
  • Chat SDK

    databuddy-analytics/Databuddy

    Build multi-platform chat bots with Chat SDK (chat npm package).

    1.2k GitHub stars~2.6k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Frontmcp Channels

    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.

    146 GitHub stars~3.7k tokensUpdated today
    Backend & APIsAuto-check passed
  • Tg Bot Ops

    serejaris/personal-corp-os

    A skill your agent uses when operating, debugging, deploying, or monitoring a Telegram bot or Telegram-to-agent gateway.

    229 GitHub stars~1.6k tokensUpdated 3 days ago
    Backend & APIsAuto-check: notes
  • Configure Notifications

    yangyuan-zhen/PolyWeather

    [OMX] Configure OMX notifications - unified entry point for all platforms

    315 GitHub stars~2.7k tokensUpdated 17 days ago
    Backend & APIsAuto-check passed
  • Chat SDK

    vercel/vercel-plugin

    Official

    Vercel Chat SDK expert guidance. An agent skill from vercel/vercel-plugin.

    301 GitHub stars~2.9k tokensUpdated today
    Backend & APIsAuto-check passed

More from FerroxLabs/wayland

All 1,194 skills in this repo
  • Star Office Helper

    FerroxLabs/wayland

    Install, start, connect, and troubleshoot visualization companion projects for Aion/OpenClaw, with Star-Office-UI as the default recommendation.

    608 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check: notes
  • Openclaw Setup

    FerroxLabs/wayland

    OpenClaw usage expert: Helps you install, deploy, configure, and use OpenClaw personal AI assistant.

    608 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Tvcontrol Setup

    FerroxLabs/wayland

    Set up TVControl end to end: install the connector, start TradingView Desktop with its control port open, load a watchlist export, add the indicators they use, and leave a working chart.

    608 GitHub stars~5.7k tokensUpdated yesterday
    Auto-check passed
  • Ab Testing Specialist

    FerroxLabs/wayland

    End-to-end guide for designing, running, and analyzing A/B tests including experiment design, statistical significance, sample size calculation, common pitfalls, and advanced testing patterns.

    608 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Academic Writer

    FerroxLabs/wayland

    Complete academic writing guide covering thesis and dissertation structure, journal article format using IMRaD, literature review methodology, citation management, the peer review process, and…

    608 GitHub stars~4.5k tokensUpdated yesterday
    Auto-check passed
  • Accessibility Auditor

    FerroxLabs/wayland

    Web accessibility expertise covering WCAG 2.2 conformance, audit methodology, ARIA patterns, keyboard navigation, screen reader testing, focus management, form accessibility, and automated vs manual…

    608 GitHub stars~4.1k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Bot Builder

What does Bot Builder do?

Bot development expertise covering Slack, Discord, and Telegram bot architecture, command handling patterns, event-driven design, conversation state management, rate limiting, user permission…. Bot Builder is an agent skill from 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 systems, webhook handling, deployment strategies, monitoring, and bot testing approaches.

When should I use Bot Builder?

Bot Builder fits situations like: the user asks about bot builder; bot builder best practices; needs guidance on bot builder implementation; the user needs a different specialized skill.

How do I install Bot Builder in Claude Code?

Run `npx skills add FerroxLabs/wayland --skill bot-builder -a claude-code`. Or copy the skill folder (src/process/resources/skills-library/bodies/skills/software-engineering/bot-builder in FerroxLabs/wayland) into .claude/skills/bot-builder in your project. Claude Code loads it when a task matches its description.

How do I install Bot Builder in Codex?

Run `npx skills add FerroxLabs/wayland --skill bot-builder -a codex`. Or copy the skill folder (src/process/resources/skills-library/bodies/skills/software-engineering/bot-builder in FerroxLabs/wayland) into .agents/skills/bot-builder in your project. Codex loads it when a task matches its description.

Can I use Bot Builder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add FerroxLabs/wayland --skill bot-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bot-builder, .gemini/skills/bot-builder, .github/skills/bot-builder and .opencode/skills/bot-builder in your project.

What does Bot Builder need to run?

SKILL.md names no scripts, command-line tools or credentials: Bot Builder is instructions for the agent only. Our summary lists: Python 3; Docker.

Does Bot Builder access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Bot Builder safe to install?

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.

What licence does Bot Builder use?

Bot Builder is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Bot Builder use?

About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Bot Builder?

Skills that share tags, products or a category with Bot Builder: Channel Debug Core (vercel-labs/vercel-openclaw-archived, 117 stars), Chat SDK (databuddy-analytics/Databuddy, 1.2k stars), Frontmcp Channels (agentfront/frontmcp, 146 stars) and Tg Bot Ops (serejaris/personal-corp-os, 229 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Bot Builder?

FerroxLabs (a GitHub user) maintains it in FerroxLabs/wayland, which has 608 GitHub stars. The repository holds 1,194 skills in this directory. The repository was last updated on October 6, 2026.

Source: FerroxLabs/wayland on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.