name: cord description: Send messages, embeds, files, and interactive buttons to Discord via the Cord CLI. Use for notifications, reports, interactive choices, and dynamic Discord interactions. triggers: - "send to discord" - "post to discord" - "discord message" - "notify discord"
Cord - Discord Bridge Skill
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
Setup
Ensure Cord is running:
cord start
Verify it's connected:
curl -s http://localhost:2643/health
# {"status":"ok","connected":true,"user":"MyBot#1234"}
CLI Commands
send
Send a text message to a channel or thread.
cord send <channel> "message"
Example:
cord send 123456789 "Hello world!"
embed
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
file
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
buttons
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"
typing
Show typing indicator (useful before slow operations).
cord typing <channel>
edit
Edit an existing message.
cord edit <channel> <messageId> "new content"
delete
Delete a message.
cord delete <channel> <messageId>
rename
Rename a thread.
cord rename <threadId> "new name"
reply
Reply to a specific message (shows reply preview).
cord reply <channel> <messageId> "message"
thread
Create a thread from a message.
cord thread <channel> <messageId> "thread name"
react
Add a reaction to a message.
cord react <channel> <messageId> "emoji"
Example:
cord react 123456789 987654321 "๐"
state
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..."
Choosing the Right Command
| 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 |
Assembly Patterns
Notification with follow-up options
# 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"
Progress updates
# 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
Report delivery
# 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"
Confirmation flow
# 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"
Auto-Complete Behavior
When a user adds a โ reaction to the last message in a thread, Cord automatically:
- Detects the reaction
- Updates the thread starter message to "โ Done"
This provides a quick way for users to signal "conversation complete" without explicit commands.
HTTP API
For advanced use cases (webhooks, external scripts), see HTTP-API.md.