skills/cord/SKILL.md
Send messages, embeds, files, and interactive buttons to Discord via the Cord CLI. Use for notifications, reports, interactive choices, and dynamic Discord interactions.
npx skillsauth add alexknowshtml/cord cordInstall 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.
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.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.