feat: Channel integration for demo concierge — Discord bot wiring #2

Closed
opened 2026-05-14 22:51:59 +00:00 by agent-cos · 5 comments

Goal

Wire the demo concierge agent (in cust-demo namespace) to a Discord channel so Scott can test the onboarding flow end-to-end.

Current State

  • kubeclaw-agent-demo-concierge pod is Running in cust-demo
  • Agent is in gateway daemon mode with hermes-speckl/sme:latest
  • SOUL.md is loaded (Clarke, the AI Concierge persona)
  • Logs show: "No messaging platforms enabled" — no channel configured

What Needs to Happen

  1. Create a Discord bot for Demo Corp (or reuse an existing test bot)
  2. Store the bot token as a Kubernetes Secret in cust-demo namespace
  3. Update the Agent CR (or pod spec) to include the Discord channel configuration and bot token
  4. Configure GATEWAY_ALLOW_ALL_USERS=true or set up proper allowlists for testing
  5. Verify the concierge connects to Discord and can send/receive messages
  6. Trigger the welcome message flow from the onboarding runbook

Acceptance Criteria

  • Concierge agent logs show "Discord provider configured" or equivalent
  • Concierge sends welcome message to a designated Discord channel
  • Scott can send a message and receive a response from the concierge
  • The full Phase 4 of the onboarding runbook executes successfully
## Goal Wire the demo concierge agent (in `cust-demo` namespace) to a Discord channel so Scott can test the onboarding flow end-to-end. ## Current State - `kubeclaw-agent-demo-concierge` pod is Running in `cust-demo` - Agent is in gateway daemon mode with hermes-speckl/sme:latest - SOUL.md is loaded (Clarke, the AI Concierge persona) - Logs show: "No messaging platforms enabled" — no channel configured ## What Needs to Happen 1. Create a Discord bot for Demo Corp (or reuse an existing test bot) 2. Store the bot token as a Kubernetes Secret in `cust-demo` namespace 3. Update the Agent CR (or pod spec) to include the Discord channel configuration and bot token 4. Configure `GATEWAY_ALLOW_ALL_USERS=true` or set up proper allowlists for testing 5. Verify the concierge connects to Discord and can send/receive messages 6. Trigger the welcome message flow from the onboarding runbook ## Acceptance Criteria - [ ] Concierge agent logs show "Discord provider configured" or equivalent - [ ] Concierge sends welcome message to a designated Discord channel - [ ] Scott can send a message and receive a response from the concierge - [ ] The full Phase 4 of the onboarding runbook executes successfully

PR opened: https://os.scoble.me/forgejo/sscoble/kubeclaw/pulls/3

This wires the demo concierge to Discord. The PR includes config samples and the applied cluster changes. See PR description for details and remaining steps.

PR opened: https://os.scoble.me/forgejo/sscoble/kubeclaw/pulls/3 This wires the demo concierge to Discord. The PR includes config samples and the applied cluster changes. See PR description for details and remaining steps.
Author

Update: The Discord env vars are flowing into the concierge pod, but the hermes container image is missing discord.py. The gateway logs:

WARNING gateway.run: Discord: discord.py not installed
WARNING gateway.run: No adapter available for discord

This requires a rebuild of the Hermes container image with the Discord Python package. Tracked in sscoble/hermes-speckl#2.

The config changes (secret + env vars) are done. Once the image is rebuilt with discord.py, the concierge should connect automatically.

Update: The Discord env vars are flowing into the concierge pod, but the hermes container image is missing `discord.py`. The gateway logs: ``` WARNING gateway.run: Discord: discord.py not installed WARNING gateway.run: No adapter available for discord ``` This requires a rebuild of the Hermes container image with the Discord Python package. Tracked in sscoble/hermes-speckl#2. The config changes (secret + env vars) are done. Once the image is rebuilt with discord.py, the concierge should connect automatically.
Author

Update: Config changes are done (Secret + env vars in Agent CR). The concierge pod receives DISCORD_BOT_TOKEN and GATEWAY_ALLOW_ALL_USERS=true correctly.

The remaining blocker is the image — discord.py is not in the hermes-speckl container. Fix PR opened: https://os.scoble.me/forgejo/sscoble/hermes-speckl/pulls/3

Once that's merged and the image is rebuilt, the Discord integration should connect automatically.

Update: Config changes are done (Secret + env vars in Agent CR). The concierge pod receives `DISCORD_BOT_TOKEN` and `GATEWAY_ALLOW_ALL_USERS=true` correctly. The remaining blocker is the image — `discord.py` is not in the hermes-speckl container. Fix PR opened: https://os.scoble.me/forgejo/sscoble/hermes-speckl/pulls/3 Once that's merged and the image is rebuilt, the Discord integration should connect automatically.
Author

Image fix deployed and verified. Concierge now loads discord.py and attempts Discord auth.

Current state: Gateway exits with LoginFailure: Improper token has been passed because the DISCORD_BOT_TOKEN in cust-demo/channel-tokens is a placeholder.

To complete the integration: A real Discord bot token is needed. Scott needs to:

  1. Create a Discord application + bot at https://discord.com/developers/applications
  2. Generate an OAuth2 invite URL with bot + Send Messages + Read Message History scopes
  3. Invite the bot to the target Discord server
  4. Update the secret: kubectl create secret generic channel-tokens -n cust-demo --from-literal=discord-token="REAL_TOKEN" --dry-run=client -o yaml | kubectl apply -f -
  5. Restart: kubectl delete pod -n cust-demo -l agent=concierge

After that, the concierge will connect and the onboarding flow (Phase 4 from the runbook) can proceed.

Image fix deployed and verified. Concierge now loads `discord.py` and attempts Discord auth. **Current state:** Gateway exits with `LoginFailure: Improper token has been passed` because the `DISCORD_BOT_TOKEN` in `cust-demo/channel-tokens` is a placeholder. **To complete the integration:** A real Discord bot token is needed. Scott needs to: 1. Create a Discord application + bot at https://discord.com/developers/applications 2. Generate an OAuth2 invite URL with `bot` + `Send Messages` + `Read Message History` scopes 3. Invite the bot to the target Discord server 4. Update the secret: `kubectl create secret generic channel-tokens -n cust-demo --from-literal=discord-token="REAL_TOKEN" --dry-run=client -o yaml | kubectl apply -f -` 5. Restart: `kubectl delete pod -n cust-demo -l agent=concierge` After that, the concierge will connect and the onboarding flow (Phase 4 from the runbook) can proceed.
Author

Test ran. The concierge connects and authenticates to Discord successfully.

Result: The test message was received, but by OpenClaw (@cos) not the Hermes concierge — both share the same Discord bot token. Discord only delivers events to one connected client.

To complete the test: The concierge needs its own separate Discord bot application. Scott needs to:

  1. Create a new Discord app at https://discord.com/developers/applications
  2. Name it "Demo Corp Concierge" or "Clarke"
  3. Generate a bot token
  4. Update the secret: kubectl create secret generic channel-tokens -n cust-demo --from-literal=discord-token="<NEW_TOKEN>" --dry-run=client -o yaml | kubectl apply -f -
  5. Invite the new bot to the Discord server
  6. Restart: kubectl delete agent demo-concierge -n cust-demo && kubectl apply -f <agent-yaml>

This is a per-customer requirement — each customer's concierge bot needs its own Discord bot identity.

Test ran. The concierge connects and authenticates to Discord successfully. **Result:** The test message was received, but by OpenClaw (@cos) not the Hermes concierge — both share the same Discord bot token. Discord only delivers events to one connected client. **To complete the test:** The concierge needs its own separate Discord bot application. Scott needs to: 1. Create a new Discord app at https://discord.com/developers/applications 2. Name it "Demo Corp Concierge" or "Clarke" 3. Generate a bot token 4. Update the secret: `kubectl create secret generic channel-tokens -n cust-demo --from-literal=discord-token="<NEW_TOKEN>" --dry-run=client -o yaml | kubectl apply -f -` 5. Invite the new bot to the Discord server 6. Restart: `kubectl delete agent demo-concierge -n cust-demo && kubectl apply -f <agent-yaml>` This is a per-customer requirement — each customer's concierge bot needs its own Discord bot identity.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: sscoble/kubeclaw#2
No description provided.