* Add GitHub tool for IronClaw - manage repos, issues, PRs, and workflows * Add Discord channel for IronClaw - slash commands and button interactions * Security fixes: URL encoding, secret validation, Discord button handler - Add URL encoding for all path segments and query parameters (P1) - Add path segment validation to prevent path traversal - Add secret_exists check for better error messages (P2) - Fix http_request signature to use 5 args (P2) - Fix Discord button handler to check member field (P2) - Fix typo in Discord slash command format (P2) - Add github.capabilities.json and discord.capabilities.json (Blocker) - Add Cargo.toml for Discord channel (Blocker) - Add limit caps (max 100) for all list operations (P3) - Remove debug logging * Apply Copilot review fixes Security & Code Quality: - Use secret_get instead of workspace_read for GitHub token - Remove manual Authorization header (host injects via capabilities) - Add validation for file paths (reject path traversal) - Add validation for workflow_id and git refs - Fix url_encode_query comment - Add release profile optimizations to Cargo.toml files - Fix package names to match conventions (github-tool, discord-channel) - Add metadata fields to Cargo.toml - Fix rate limits to be consistent (60/min, 3600/hr) - Fix Discord user_name to filter empty global_name - Fix Discord metadata serialization error handling - Update Discord README to clarify which secrets are used by host vs WASM - Better formatting for Discord command option values * applied all PR change requests and comments * cleaned up workspace * Adding validation for empty path segments and event enum in GitHub tool * addedvalidation for events and vaidation to reject empty file path in github tools and implemented safe UTF-8 trunacating * added codegen units and updated truncating logic also update capabilities.json as requested by copilot review * added codegen units and updated truncating logic also update capabilities.json as requested by copilot review * fixed message trucating and remove url_encode alias, also appled all requested changes from last PR comment --------- Co-authored-by: root <root@cafx> Co-authored-by: Peni <[email protected]> Co-authored-by: Illia Polosukhin <[email protected]> Co-authored-by: firat.sertgoz <[email protected]>
Discord Channel for IronClaw
WASM channel for Discord integration - handle slash commands and button interactions via webhooks.
Features
- Slash Commands - Process Discord slash commands
- Button Interactions - Handle button clicks
- Thread Support - Respond in threads
- DM Support - Handle direct messages
Setup
-
Create a Discord Application at https://discord.com/developers/applications
-
Create a Bot and get the token
-
Set up Interactions URL to point to your IronClaw instance
-
Copy the Application ID and Public Key
-
Store in IronClaw secrets:
ironclaw secret set discord_bot_token YOUR_BOT_TOKENNote: The
discord_bot_tokensecret is the only value read directly by this Discord channel WASM component. Thediscord_app_idanddiscord_public_keysecrets are used by the IronClaw host (for example, to verify Discord interaction signatures and manage slash command registration) and are not accessed from the WASM module itself.
Discord Configuration
Register Slash Commands
curl -X POST \
-H "Authorization: Bot YOUR_BOT_TOKEN" \
-H "Content-Type: application/json" \
https://discord.com/api/v10/applications/YOUR_APP_ID/commands \
-d '{
"name": "ask",
"description": "Ask the AI agent",
"options": [{
"name": "question",
"description": "Your question",
"type": 3,
"required": true
}]
}'
Set Interactions Endpoint
In your Discord app settings, set:
- Interactions Endpoint URL:
https://your-ironclaw.com/webhook/discord
Usage Examples
Slash Command
User types: /ask question: What is the weather?
The agent receives:
User: @username
Content: /ask question: What is the weather?
Button Click
When a user clicks a button in a message, the agent receives:
User: @username
Content: [Button clicked] Original message content
Error Handling
If an internal error occurs (e.g., metadata serialization failure), the tool attempts to send an ephemeral message to the user:
❌ Internal Error: Failed to process command metadata.
Check the host logs for detailed error information.
Advanced Usage
Embeds
To send embeds, include an embeds array in the metadata_json field of the agent's response. The structure should match the Discord API embed object.
Troubleshooting
"Invalid Signature"
- Check that
discord_public_keyis set correctly in IronClaw secrets. - This validation happens on the host before reaching the WASM.
"401 Unauthorized"
- Check that
discord_bot_tokenis set correctly in IronClaw secrets. - Ensure the bot is added to the server.
"Interaction Failed"
- The interaction might have timed out (Discord requires a response within 3 seconds).
- The
interactions_endpoint_urlmight be unreachable.
Building
cd channels-src/discord
cargo build --target wasm32-wasi --release
License
MIT/Apache-2.0