Remote Questions
Remote questions allow GSD to ask for user input via Slack, Discord, or Telegram when running in headless auto-mode. When GSD encounters a decision point that needs human input, it posts the question to your configured channel and polls for a response.
Discord
Section titled “Discord”/gsd remote discordThe setup wizard:
- Prompts for your Discord bot token
- Validates the token against the Discord API
- Lists servers the bot belongs to (or lets you pick)
- Lists text channels in the selected server
- Sends a test message to confirm permissions
- Saves the configuration to
~/.gsd/PREFERENCES.md
Bot requirements:
- A Discord bot application with a token (from Discord Developer Portal)
- Bot must be invited to the target server with these permissions:
- Send Messages
- Read Message History
- Add Reactions
- View Channel
- The
DISCORD_BOT_TOKENenvironment variable must be set (the setup wizard handles this)
/gsd remote slackThe setup wizard:
- Prompts for your Slack bot token (
xoxb-...) - Validates the token
- Lists channels the bot can access (with manual ID fallback)
- Sends a test message to confirm permissions
- Saves the configuration
Bot requirements:
- A Slack app with a bot token (from Slack API)
- Bot must be invited to the target channel
- Typical scopes for public/private channels:
chat:write,reactions:read,reactions:write,channels:read,groups:read,channels:history,groups:history
Telegram
Section titled “Telegram”/gsd remote telegramThe setup wizard:
- Prompts for your Telegram bot token (from @BotFather)
- Validates the token against the Telegram API
- Prompts for the chat ID (group or private chat)
- Sends a test message to confirm permissions
- Saves the configuration
Bot requirements:
- A Telegram bot token from @BotFather
- Bot must be added to the target group chat (or use private chat with the bot)
- The
TELEGRAM_BOT_TOKENenvironment variable must be set
Configuration
Section titled “Configuration”Remote questions are configured in ~/.gsd/PREFERENCES.md:
remote_questions: channel: discord # or slack or telegram channel_id: "1234567890123456789" timeout_minutes: 5 # 1-30, default 5 poll_interval_seconds: 5 # 2-30, default 5How It Works
Section titled “How It Works”- GSD encounters a decision point during auto-mode
- The question is posted to your configured channel as a rich embed (Discord) or Block Kit message (Slack)
- GSD polls for a response at the configured interval
- You respond by:
- Reacting with a number emoji (1️⃣, 2️⃣, etc.) for single-question prompts
- Replying to the message with a number (
1), comma-separated numbers (1,3), or free text
- GSD picks up the response and continues execution
- A ✅ reaction is added to the prompt message to confirm receipt
Response Formats
Section titled “Response Formats”Single question:
- React with a number emoji (single-question prompts)
- Reply with a number:
2 - Reply with free text (captured as a user note)
Multiple questions:
- Reply with semicolons:
1;2;custom text - Reply with newlines (one answer per line)
Timeouts
Section titled “Timeouts”If no response is received within timeout_minutes, the prompt times out and GSD continues with a timeout result. The LLM handles timeouts according to the task context — typically by making a conservative default choice or pausing auto-mode.
Commands
Section titled “Commands”| Command | Description |
|---|---|
/gsd remote | Show remote questions menu and current status |
/gsd remote slack | Set up Slack integration |
/gsd remote discord | Set up Discord integration |
/gsd remote status | Show current configuration and last prompt status |
/gsd remote disconnect | Remove remote questions configuration |
Discord vs Slack Feature Comparison
Section titled “Discord vs Slack Feature Comparison”| Feature | Discord | Slack |
|---|---|---|
| Rich message format | Embeds with fields | Block Kit |
| Reaction-based answers | ✅ (single-question) | ✅ (single-question) |
| Thread-based replies | Message replies | Thread replies |
| Message URL in logs | ✅ | ✅ |
| Answer acknowledgement | ✅ reaction on receipt | ✅ reaction on receipt |
| Multi-question support | Text replies (semicolons/newlines) | Text replies (semicolons/newlines) |
| Context source in prompt | ✅ (footer) | ✅ (context block) |
| Server/channel picker | ✅ (interactive) | ✅ (interactive + manual fallback) |
| Token validation | ✅ | ✅ |
| Test message on setup | ✅ | ✅ |
Troubleshooting
Section titled “Troubleshooting””Remote auth failed”
Section titled “”Remote auth failed””- Verify your bot token is correct and not expired
- For Discord: ensure the bot is still in the server
- For Slack: ensure the bot token starts with
xoxb-
”Could not send to channel”
Section titled “”Could not send to channel””- Verify the bot has Send Messages permission in the target channel
- For Discord: check the bot’s role permissions in Server Settings
- For Slack: ensure the bot is invited to the channel (
/invite @botname)
No response detected
Section titled “No response detected”- Ensure you’re replying to the prompt message (not posting a new message)
- For reactions: only number emojis (1️⃣-5️⃣) on single-question prompts are detected
- Check that
timeout_minutesis long enough for your response time
Channel ID format
Section titled “Channel ID format”- Slack: 9-12 uppercase alphanumeric characters (e.g.,
C0123456789) - Discord: 17-20 digit numeric snowflake ID (e.g.,
1234567890123456789) - Enable Developer Mode in Discord (Settings → Advanced) to copy channel IDs