# Plan Product intent: **[GOALS.md](GOALS.md)**. Agent contract: [AGENT.md](AGENT.md), [AGENTS.md](AGENTS.md). Tickets: [TASKS.md](TASKS.md). ## How work is split | Role | Who | Does | | --- | --- | --- | | Designer + PM | Grok | Owns GOALS.md. Writes tickets before a worker phase. | | Worker | OpenCode | One ticket at a time, ponytail on, never `--pure`. | When the user tells Grok to keep going, Grok implements. **No live compositor dispatch** (see GOALS.md Safety). Push: HTTPS `https://gitea.nettsi.de/en/enbuddy` only. ## Shipped - [x] Rust crate, YAML profile, mapped-key engine, three modes (maps / mirror / off) - [x] Configurable passthrough (example ESDF) - [x] Hyprland 0.56 Lua binds + `send_shortcut` (no inject) - [x] Interact/loot map (assist, CTM, IWT once, delay) - [x] Video FX: source + viewer rects (fraction or pixels), grim + mpv, hover keys/clicks - [x] Control panel GUI (File / Session / Layout / Maps / Video / Macros) - [x] Layout presets: stacked, grid, main+strip; per-slot x/y/w/h; generate/capture - [x] Swap into main, focus next/prev/slot, reset, pin, mouse-follow/broadcast **code** - [x] Layout moves **gated** (`ENBOXER_ALLOW_LAYOUT=1`); tiles clamped to monitor - [x] HTTPS remote `en/enbuddy` - [x] Example Video FX **disabled**; layout tiles empty ## Next (still GOALS.md) - [ ] GUI: confirm before Apply; Session checkbox “Allow moving game windows” - [ ] Named profiles (File save as / open) - [ ] Type/clipboard broadcast to others - [ ] Slot-number overlay (click to make main) - [ ] `hyprland-toplevel-export` for covered Video FX sources - [ ] Follow/assist follow **current main** after swap - [ ] Borderless via Hyprland window rules - [ ] Forever macros when that client exists ## Invoke worker (only after tickets are listed in TASKS.md) ```bash opencode run --dir /home/en/git/enBoxer --auto --title "enBoxer tickets" \ "Read GOALS.md, AGENTS.md, TASKS.md. Ponytail required. Do open tickets in order. Do not run ponytail-review. Do not hyprctl dispatch on the live session." ```