enBoxer/PLAN.md

2.7 KiB

Plan

Product intent: GOALS.md. Agent contract: AGENT.md, AGENTS.md. Tickets: 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/enBoxer only.

Shipped

  • Rust crate, YAML profile, mapped-key engine, three modes (maps / mirror / off)
  • Configurable passthrough (example ESDF)
  • Hyprland 0.56 Lua binds + send_shortcut (no inject)
  • Interact/loot map (assist, CTM, IWT once, delay)
  • Video FX: source + viewer rects (fraction or pixels), grim + mpv, hover keys/clicks
  • Control panel GUI (File / Session / Layout / Maps / Video / Macros)
  • Layout presets: stacked, grid, main+strip; per-slot x/y/w/h; generate/capture
  • Swap into main, focus next/prev/slot, reset, pin, mouse-follow/broadcast code
  • Layout moves gated (ENBOXER_ALLOW_LAYOUT=1); tiles clamped to monitor
  • HTTPS remote en/enBoxer (camelCase, matches the project name)
  • Example Video FX disabled; layout tiles empty

Shipped (since the last "Next" snapshot)

  • GUI: confirm before Apply; Session checkbox "Allow moving game windows" (allow_layout + confirm_apply popup)
  • Named profiles (File save as / open) plus the new Teams + Lutris flow
  • Type/clipboard broadcast to others (type_to_others + new clipboard IPC verb)
  • Slot-number overlay (click to make main) — wlr-layer-shell client, gated ENBOXER_ENABLE_OVERLAY=1
  • hyprland-toplevel-export for covered Video FX sources — zwlr_export_dmabuf_unstable_v1, gated ENBOXER_ENABLE_TOPLEVEL=1
  • Follow/assist follow current main after swap — Engine::resolve_party_bind + Character.assist_key/follow_key
  • Borderless via Hyprland window rules — hypr::apply_borderless_rules on run
  • Mirror-mode mouse click broadcast (left + right, no press-and-hold guard yet)
  • round_robin / rr bind target (rotates through ALL slots including the leader, per-map cursor)

Next (still GOALS.md)

  • Forever macros when that client exists (Forever client does not exist yet — future)

Invoke worker (only after tickets are listed in TASKS.md)

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."