Send messages, embeds, files, and interactive buttons to Discord via the Cord CLI. Use for notifications, reports, interactive choices, and dynamic Discord interactions.
Interact with Discord through Cord's CLI commands. This skill teaches Claude Code how to send messages, embeds, files, and interactive buttons.
GitHub: https://github.com/alexknowshtml/cord
Ensure Cord is running:
cord start
Verify it's connected:
curl -s http://localhost:2643/health
# {"status":"ok","connected":true,"user":"MyBot#1234"}
Send a text message to a channel or thread.
cord send <channel> "message"
Example:
cord send 123456789 "Hello world!"
Send a formatted embed card with optional styling.
cord embed <channel> "description" [options]
Options:
| Flag | Description |
|------|-------------|
| --title "..." | Embed title |
| --url "..." | Title link URL |
| --color <name\|hex> | red, green, blue, yellow, purple, orange, or 0xHEX |
| --author "..." | Author name |
| --author-url "..." | Author link |
| --author-icon "..." | Author icon URL |
| --thumbnail "..." | Small image (top right) |
| --image "..." | Large image (bottom) |
| --footer "..." | Footer text |
| --footer-icon "..." | Footer icon URL |
| --timestamp | Add current timestamp |
| --field "Name:Value" | Add field (append :inline for inline) |
Examples:
Simple embed:
cord embed 123456789 "Daily status update" --title "Status Report" --color green
Embed with fields:
cord embed 123456789 "Build completed successfully" \
--title "CI/CD Pipeline" \
--color green \
--field "Branch:main:inline" \
--field "Duration:2m 34s:inline" \
--field "Tests:142 passed" \
--footer "Deployed by Cord" \
--timestamp
Send a file attachment.
cord file <channel> <filepath> ["message"]
Examples:
cord file 123456789 ./report.md "Here's the weekly report"
cord file 123456789 ./logs.txt
Send interactive buttons with optional handlers.
cord buttons <channel> "prompt" --button label="..." id="..." [options]
Button options:
| Option | Description |
|--------|-------------|
| label="..." | Button text (required) |
| id="..." | Custom ID for tracking (required) |
| style="..." | primary, secondary, success, danger |
| reply="..." | Ephemeral reply when clicked |
| webhook="..." | URL to POST click data to |
Examples:
Simple confirmation:
cord buttons 123456789 "Deploy to production?" \
--button label="Deploy" id="deploy-prod" style="success" \
--button label="Cancel" id="cancel-deploy" style="secondary"
With inline responses:
cord buttons 123456789 "Approve this PR?" \
--button label="Approve" id="approve" style="success" reply="Approved! Merging now." \
--button label="Reject" id="reject" style="danger" reply="Rejected. Please revise."
With webhook callback:
cord buttons 123456789 "Start backup?" \
--button label="Start Backup" id="backup-start" style="primary" webhook="http://localhost:8080/backup"
Show typing indicator (useful before slow operations).
cord typing <channel>
Edit an existing message.
cord edit <channel> <messageId> "new content"
Delete a message.
cord delete <channel> <messageId>
Rename a thread.
cord rename <threadId> "new name"
Reply to a specific message (shows reply preview).
cord reply <channel> <messageId> "message"
Create a thread from a message.
cord thread <channel> <messageId> "thread name"
Add a reaction to a message.
cord react <channel> <messageId> "emoji"
Example:
cord react 123456789 987654321 "👍"
Update a message with a status indicator. Use this to show work progress on a thread starter or status message.
cord state <channel> <messageId> <state>
Preset states:
| State | Display |
|-------|---------|
| processing | 🤖 Processing... |
| thinking | 🧠 Thinking... |
| searching | 🔍 Searching... |
| writing | ✍️ Writing... |
| done | ✅ Done |
| error | ❌ Something went wrong |
| waiting | ⏳ Waiting for input... |
Examples:
Using presets:
cord state 123456789 987654321 processing
cord state 123456789 987654321 done
Custom status:
cord state 123456789 987654321 "🔄 Syncing database..."
| Use Case | Command |
|----------|---------|
| Simple notification | cord send |
| Formatted status update | cord embed |
| Long content (logs, reports) | cord file |
| User needs to make a choice | cord buttons |
| Indicate processing (typing bubble) | cord typing |
| Update thread/message status | cord state |
| Update previous message | cord edit |
| Start a focused discussion | cord thread |
| Quick acknowledgment | cord react |
# Send the notification
cord embed 123456789 "Build failed on main branch" \
--title "CI Alert" \
--color red \
--field "Error:Test suite timeout" \
--field "Commit:abc1234:inline"
# Offer actions
cord buttons 123456789 "What would you like to do?" \
--button label="View Logs" id="view-logs" style="primary" reply="Fetching logs..." \
--button label="Retry Build" id="retry" style="success" webhook="http://ci/retry" \
--button label="Ignore" id="ignore" style="secondary" reply="Acknowledged"
# Start with typing indicator
cord typing 123456789
# Send initial status message
MSGID=$(cord send 123456789 "🤖 Processing..." | grep -o '[0-9]*$')
# Update state as work progresses
cord state 123456789 $MSGID searching
cord state 123456789 $MSGID writing
cord state 123456789 $MSGID done
Or with custom progress:
cord state 123456789 $MSGID "🔄 Step 1/3: Fetching data..."
cord state 123456789 $MSGID "🔄 Step 2/3: Processing..."
cord state 123456789 $MSGID "🔄 Step 3/3: Generating report..."
cord state 123456789 $MSGID done
# Send summary embed
cord embed 123456789 "Weekly metrics compiled" \
--title "Weekly Report Ready" \
--color blue \
--field "Period:Jan 15-21:inline" \
--field "Pages:12:inline"
# Attach the full report
cord file 123456789 ./weekly-report.pdf "Full report attached"
# Ask for confirmation
cord buttons 123456789 "Delete all archived items older than 30 days?" \
--button label="Yes, Delete" id="confirm-delete" style="danger" reply="Deleting..." \
--button label="Cancel" id="cancel-delete" style="secondary" reply="Cancelled"
When a user adds a ✅ reaction to the last message in a thread, Cord automatically:
This provides a quick way for users to signal "conversation complete" without explicit commands.
For advanced use cases (webhooks, external scripts), see HTTP-API.md.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer