3.4 KiB
3.4 KiB
Plan
enBoxer is a new Hyprland program. It routes keys to several World of Warcraft windows and can show a live crop of one window on another.
How work is split
Two roles. They do not share a keyboard.
| Role | Who | Does |
|---|---|---|
| Designer + PM | Grok | Writes this file and TASKS.md. Splits the product into small tickets before the worker starts a phase. Does not implement those tickets. |
| Worker | OpenCode | Implements open tickets, one at a time, with the ponytail plugin on (opencode.json). Never --pure. Never runs ponytail-review. |
Sequence for a phase:
- Grok writes every ticket for that phase into
TASKS.md(Open list). That is “giving tasks.” - Grok starts OpenCode against those tickets. No ponytail-review while tickets are still being written or still open.
- OpenCode finishes the phase (or says a ticket is blocked).
- Grok reads the diff against the tickets (ordinary review: did the ticket land, tests pass). Not ponytail.
- If a ticket is wrong, Grok adds a smaller ticket and sends OpenCode back. That is a new giving-tasks step; ponytail still waits.
- When Grok accepts the whole phase, Grok runs ponytail-review once.
- Grok pushes HTTPS
https://gitea.nettsi.de/en/enbuddy. No SSH.
OpenCode must not invent tickets, add features, or “clean up” docs unless a ticket says so.
Product rules (do not regress)
- Named maps: a hotkey runs a list of steps to named targets (
current,others,all,group:…,slots:…). - Keys not in maps (and not in repeater) go only to the focused primary.
passthroughis a list. Empty means nothing is skipped. The example profile uses ESDF so those letters stay on the primary.- Routing is off when focus is not a managed game window and not an enBoxer overlay.
- No code is loaded into the game. Keys go through Hyprland (
hl.dsp.send_shortcut/send_key_state). - No game addon in v1. Macros and the Interact with Target bind are documented in
docs/MACROS.md. - Video FX: crop of slot A drawn on the primary; hover with
pass_throughsends keys and clicks to slot A only.
Phase 0 — tree and contract (Grok)
- Crate, profile, engine, Hyprland session, grim Video FX, tests
README.md,DESCRIPTION.md,CHANGELOG.md,AGENT.md,TASKS.md, this fileopencode.jsonwith ponytail- Git remote + push (after Phase 1 is accepted and Grok has run ponytail-review)
Phase 1 — OpenCode tickets (all assigned below; do not ponytail-review until they are closed)
See TASKS.md.
- T1 format — closed
- T2 clippy — closed
- T3 stop if already clean — closed
- T4 Video FX click pass-through — closed
- T5 log slot list when it changes — closed
- T6 test: empty passthrough can map
e— closed
Phase 1 Open list is empty. Next: Grok ponytail-review, then git push.
Later (not this phase, not OpenCode until Grok files tickets)
- Capture a window that is fully covered (
hyprland-toplevel-export) - Clicks on a covered source without moving the real cursor onto the covering window
- Follow/assist binds that track which slot is primary
- Check Forever’s macro language when that client exists
Invoke worker
opencode run --dir /home/en/git/enBoxer --auto --title "enBoxer T4-T6" \
"Read AGENT.md, PLAN.md, TASKS.md. Ponytail plugin required. Do open tickets in order, one at a time. Do not run ponytail-review."