tools/discord/SKILL.md
Discord automation CLI — send/read/search messages, manage channels and servers, react, create threads, pin messages, and look up users.
npx skillsauth add letta-ai/skills discordInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
discord_cli.pyA bundled Python script that wraps the Discord REST API v10. Zero external dependencies — uses only Python stdlib (urllib, json, argparse).
Invoke as: python3 <path-to-skill>/scripts/discord_cli.py <command> <subcommand> [args]
user list)bot + applications.commandsShortcut if you know the client ID:
https://discord.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&scope=bot+applications.commands&permissions=274877975552
export DISCORD_BOT_TOKEN="your_token_here"
python3 <path-to-skill>/scripts/discord_cli.py auth test
Expected output:
{"ok": true, "user": "your-bot-name", "id": "...", "discriminator": "..."}
python3 <path-to-skill>/scripts/discord_cli.py auth test
python3 <path-to-skill>/scripts/discord_cli.py server list
python3 <path-to-skill>/scripts/discord_cli.py server info <server-id>
python3 <path-to-skill>/scripts/discord_cli.py channel list <server-id>
Returns text, announcement, and forum channels sorted by category and position. Each channel has id, name, type, category, and topic.
# List recent messages (default 25, chronological order)
python3 <path-to-skill>/scripts/discord_cli.py message list <channel-id>
python3 <path-to-skill>/scripts/discord_cli.py message list <channel-id> --limit 50
# Get a single message
python3 <path-to-skill>/scripts/discord_cli.py message get <channel-id> <message-id>
# Send a message
python3 <path-to-skill>/scripts/discord_cli.py message send <channel-id> "Hello from the agent!"
# Edit a message (bot can only edit its own messages)
python3 <path-to-skill>/scripts/discord_cli.py message edit <channel-id> <message-id> "Updated text"
# Delete a message
python3 <path-to-skill>/scripts/discord_cli.py message delete <channel-id> <message-id>
# Search messages in a server
python3 <path-to-skill>/scripts/discord_cli.py message search <server-id> "query"
python3 <path-to-skill>/scripts/discord_cli.py message search <server-id> "query" --channel-id <id> --author-id <id> --limit 10
python3 <path-to-skill>/scripts/discord_cli.py reaction add <channel-id> <message-id> 👍
python3 <path-to-skill>/scripts/discord_cli.py reaction remove <channel-id> <message-id> 👍
python3 <path-to-skill>/scripts/discord_cli.py reaction list <channel-id> <message-id>
# Create a new thread in a channel
python3 <path-to-skill>/scripts/discord_cli.py thread create <channel-id> "Discussion Topic"
# Create a thread from a specific message
python3 <path-to-skill>/scripts/discord_cli.py thread create <channel-id> "Bug Triage" --message-id <id>
python3 <path-to-skill>/scripts/discord_cli.py pin list <channel-id>
python3 <path-to-skill>/scripts/discord_cli.py pin add <channel-id> <message-id>
python3 <path-to-skill>/scripts/discord_cli.py pin remove <channel-id> <message-id>
python3 <path-to-skill>/scripts/discord_cli.py user list <server-id>
python3 <path-to-skill>/scripts/discord_cli.py user list <server-id> --limit 200
python3 <path-to-skill>/scripts/discord_cli.py user info <user-id>
Mention users in messages as <@USER_ID>.
All commands output JSON to stdout. Errors go to stderr with an error field and HTTP status code.
Message objects include: id, author, author_id, content, timestamp, plus optional thread_id, attachments (with filename and url), and reactions (with emoji and count). Null and empty fields are pruned.
Message Content Intent is not enabled. Go to Developer Portal → Bot → Privileged Gateway Intents → toggle on Message Content Intent.
user list returns empty or partial resultsServer Members Intent is not enabled. Toggle it on in the same intents section.
The bot doesn't have permission for that channel. Check bot role permissions in Discord server settings, or re-authorize with the correct permissions.
If the bot token was rotated, update DISCORD_BOT_TOKEN with the new value.
1161736244074659893) for all identifiers. You cannot use channel names directly — use channel list <server-id> to find IDs first.tools
Test any GUI app or change on a Daytona Windows remote desktop sandbox. Use to launch a GUI program, sync a local project, take a screenshot, record a video, or share a clickable live-desktop link with a teammate. Generic — the only dependency is Daytona. For Linux, use remote-desktop-testing-linux.
tools
Test any GUI app or change on a Daytona Linux (Ubuntu xfce4 + noVNC) remote desktop sandbox. Use to launch a GUI program, sync a local project, take a screenshot, record a video, or share a clickable live-desktop link with a teammate. Generic — the only dependency is Daytona. For Windows, use remote-desktop-testing-windows.
testing
Configures Letta agents' own runtime behavior, including model, context window, system prompt, reasoning, conversation overrides, compaction settings, and compaction prompts. Use when an agent or user asks to self-modify, tune summarization/compaction, change identity/system instructions, adjust model settings, or test conversation-scoped overrides.
development
Sets Letta Desktop and Letta Code agent profile images by writing profile.png into an agent MemFS repository. Use when the user asks to add, change, generate, or fix an agent avatar, profile picture, profile image, or Desktop agent photo.