π¬ Interviews
Goal: one Discord message becomes a tiny wizard: user clicks/buttons/types β bot ACKs instantly β message evolves in place β Amy gets clean structured answers β no dead air, no spam, no broken interactions.
Naming - Ompcord vs Amy. Ompcord is the ompβDiscord bridge (product/plugin); Amy is the bot persona it runs. You install Ompcord; Amy is who answers. Rename phases 1-5 are complete at docs/command/runtime/package level: package name
ompcord, wrapper runtimeompcordd.mjs/ompcordd.service, and compatibility foramyd.mjs,/amy,/pi-discord-remote, legacy config, and~/.omp/amy-sessions/. Repo directory stayspi-discord-amyuntil final filesystem cutover. See the naming direction.*
Default choice: use a normal embed + legacy message components. Use Components V2 only when you need layout primitives (Container, Section, Text Display) and accept that normal content/embeds are disabled for that message.
For the shared status/options surface behind these flows, see Amy SSOT Embed Dashboard.
β Live-send recipe that finally worked
The success pattern is not βdescribe an embed in chat.β It is: launch a short-lived Discord gateway process that posts a real message with embeds + components into the active Amy thread and keeps running long enough to handle component interactions.
Observed live proof (2026-06-10):
| Item | Value | β¦
Exact launch shape:
β¦
The script reads `DISCORD_TOKEN` / `ALLOWED_USER_IDS` from `/home/usr/.config/amy/amyd.env` unless env vars are already set. It prints only message/thread/session ids β **never the token**.
**What made it succeed:**
1. **Use the active Amy thread id** from `amyd.log` or the current Discord URL.
β¦
**Minimal βdo this againβ checklist:**
- [ ] Confirm Amy thread id.
β¦
---
## π¨ Non-negotiable laws
| Law | Why it matters |
β¦
```js
β¦
---
## π§© Best UX pattern
```text
β¦
Render each question as:
```text
β¦
**Use the right input:**
| Need | Best component |
β¦
---
## π§± Minimal state contract
```js
β¦
`custom_id` should be tiny and routable:
```text
β¦
Do **not** put full JSON, prompts, secrets, or long labels inside `custom_id`.
---
## ποΈ Button style rules
| Style | Use for |
β¦
**Copy rule:** button labels should be outcomes, not vague commands.
β
`Choose Deep`, `Custom answer`, `Confirm plan`
β `OK`, `Yes`, `Option 1`, `Next maybe`
---
## π Hard Discord limits to memorize
| Limit | Value |
β¦
---
## π§ Amy/omp integration
Current Amy pieces:
| File | Role |
β¦
Headless ask bridge:
````text
β¦
Stable answer kinds:
```text
β¦
Keep that contract stable so existing agent prompts/tools do not break.
---
## π Perfect interview behavior checklist
- [ ] Posts first embed immediately: βQ1/N β choose one.β
β¦
---
## π§― Failure fixes
| Symptom | Root cause β fix |
β¦
---
## π§ͺ Test matrix
| Test | Expected proof |
β¦
---
## 𧬠Golden implementation skeleton
```js
β¦
---
## π Source truth
- Discord component reference: <https://discord.com/developers/docs/components/reference>
β¦
[β¦168ln elided; re-read needed ranges, e.g. /home/usr/funday/dev/docs/content/omp/harnesses/ompcord/responsive-interviews.md:29-33,38-40]