π§ π¬ Ompcord β Discord Bridge (Amy Persona)#
TL;DR π Ompcord keeps your Pi coding agent online in Discord. Amy is the bot persona. Each session runs in its own thread off a home channel; a single embed dashboard updates in place with live progress (todo checklists, status, steps) and relocates to stay “sticky” at the bottom of the thread. Administrative config settings are modified live via dropdown select menus.
β‘ 60-Second Quick Start#
- π€ Create Application & Bot (Discord Developer Portal) β Enable Message Content intent β Reset Token (copy).
- π Invite Link (Bot +
applications.commandsscopes, perms326417632336):https://discord.com/api/oauth2/authorize?client_id=APP_ID&scope=bot%20applications.commands&permissions=326417632336 - π Home Channel: Set a text channel (e.g.
#amy). Sessions run as threads inside it. - βοΈ Config Env: Supply variables to
ompcordd.service:DISCORD_TOKEN=... DISCORD_GUILD_ID=... DISCORD_HOME_CHANNEL_ID=... - π¬ Talk: Use
/amy newto start a thread,/amy sayto prompt, or chat directly in session threads.
𧬠Core Architecture & UX Upgrades#
π 1. Interactive Pinning#
- Prompt Pinning: Choice prompts (
askViaDashboard) are automatically pinned to the thread header. - Auto Release: Unpinned immediately upon user response, skip, or timeout.
- Clean Logs: Auto-deletes Discord’s system pinning notice to prevent clutter.
π 2. Embed-Based Todo Checklists#
- State Machine: Embed changes color based on agent mode (
idle: Green,processing: Blurple,asking/confirming: Yellow,failed: Red). - Inline Grid Routing: Completed/future phases are rendered as compact inline fields (
inline: true). The active phase is expanded as a checklist block (inline: false) for mobile readability. - Limit Defense: Auto-compresses and truncates long checklists to respect Discord’s 6000-character embed limit.
β€ 3. Sticky Dashboard (Leapfrog Relocation)#
- Log Offset Check: When text/code logs push the dashboard up, the bot archives the old message (turns it neutral gray, removes buttons, updates footer) and spawns a fresh live dashboard at the bottom.
- Rate Limit Shield: Debounces relocation. Only repositions if at least 2 messages have been posted since the last dashboard update.
ποΈ 4. Unified Status & Config Control Panel#
- Slash Diagnostics:
/amy status//amy healthdisplay gateway stats, active run metrics, and feature flags. - Interactive Toggles: Dropdown string select menus (
amystatus:toggle_config) allow administrators to togglereactions,toolResponses,autoStart,useThreads, andlogDetaildynamically. Saved back toconfig.jsoninstantly.
ποΈ Slash Commands (Guild-Scoped)#
| Command | Action |
|---|---|
/amy status | Displays SSOT health & status panel with interactive config toggles |
/amy new [topic] | Opens a fresh session thread off the home channel |
/amy say <prompt> | Sends a prompt to the active session thread |
/amy cancel | SIGTERMs the active headless omp child process |
/amy stop | Archives the active thread |
π§ Brainstorm: The Pagination Screen Pattern#
To print massive code blocks/logs without message spam, we can convert messages into interactive screens using buttons:
ποΈ Component Design#
- Nav Row:
[β Prev][ Page 1/N ][ Next βΆ] - SSOT Buffer: Instead of chunking into multiple new messages, Ompcord splits the output into pages ($\le 1900$ chars each) and stores them in memory/session.
- In-Place Edit: Clicking
Next βΆedits the same message with the next chunk. - Timeout/Freeze: After the turn ends or after a 5-minute idle timeout, buttons are stripped to freeze the finalized page.
π Constants & Limits Reference#
- π Permissions Int:
326417632336(View, Send, Embed Links, Attach Files, Add Reactions, Read History, Manage Channels, Create Public Threads, Send in Threads). - π Limits: Message $\le 2000$ chars Β· Select menu $\le 25$ options Β· Component grid $\le 5$ rows Β· Modal $\le 5$ text fields Β· Embed description $\le 4096$ chars Β· Field value $\le 1024$ chars Β· Interaction ACK $\le 3\text{s}$ (then 15m to edit).
- π CLI Continuity: Resume Discord threads locally using:
omp --allow-home --cwd /home/usr --session-dir ~/.omp/amy-sessions/<thread-id> -c