feat(macos): draw a ghost cursor for native app backend actions - #3195
Conversation
There was a problem hiding this comment.
All reported issues were addressed across 9 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Size Report
Startup median (7 runs, lower is better):
|
|
|
I found no blocking problems at 4e617c8, and all 21 checks pass. No CI job runs the helper's AppKit drawing path, so green CI says nothing about the panel itself. No conflicts, and nothing blocks merge. I did not run the helper live, so the glide, pulse, screenshot exclusion and unmoved pointer rest on code reading and your description. I also could not check how Not blocking, and you can take or leave these. The cursor is on by default, and the helper animates before and after delivery: show() and move() run before Could a smaller version work? The change adds a public env surface across the Swift helper, the TS host and docs. Dropping cross-process persistence ( Four of Cubic's P2 threads still apply, all low impact: missing pulse in typeInBackground, tests not pinning the env var, shared temp file across sessions, and unconditional budget for type/fill/scroll. Before merge, please answer those threads and decide whether a default-on 0.65 s per action is acceptable. |
4e617c8 to
c91f430
Compare
|
Thanks. Taken in
The four Cubic threads are answered inline. |
|
I found no problems at c91f430, and the four earlier findings from the 4e617c8 review (#3195 (comment)) are fixed. Thank you for the quick turnaround. The helper now pulses on all three success paths in typeInBackground, the env opt-out has a test, the shared position file is gone, and the helper timeout adds its extra second only when --ghost-cursor is in argv. Of the open inline threads, these four are fixed at this head and can be resolved: #3195 (comment) (pulse on success paths), #3195 (comment) (env opt-out test), #3195 (comment) (shared position file) and #3195 (comment) (helper timeout budget). I did not run the helper live. The glide, the pulse, the screenshot exclusion and the unmoved real pointer rest on reading the code. I also did not confirm that an app-scoped hit test ignores another process's top-level window at the same point. Smoke Tests is still running on c91f430, and I expect it to be unaffected, because the ghost cursor only applies to the opt-in native app backend. I have not checked that against the job log. There are no conflicts. Once Smoke Tests finishes green, this is ready to merge. |
Each helper action on a native-backend app session draws its own pointer, glides it onto the target from a short fixed offset, and pulses on delivery, so a person can follow the agent while keeping the real pointer. The cursor keeps no state between helper processes and costs about 0.3 s per action. AGENT_DEVICE_MACOS_GHOST_CURSOR=0 turns it off; only a drawn cursor adds its budget to the helper deadline. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
c91f430 to
a2a5473
Compare
Summary
Draws a ghost cursor for native-backend actions (#3189), so a person can follow the agent while keeping the real pointer. Each helper action shows a pointer just above-left of the target, glides onto it, and pulses on delivery.
AGENT_DEVICE_MACOS_GHOST_CURSOR=0turns it off; the 1 s helper-deadline budget applies only when the cursor is drawn. Documented inconfiguration.md.Split from #3188 to keep each layer within the diff budget. 9 files.
Validation
pnpm check:affected --runpassed ona2a54730a;swift testpassed. Tests pin the env, cover the0opt-out argv, and the conditional deadline budget.🤖 Generated with Claude Code