Between July 29th and August 1st, I directed Codex through turning an unfinished prototype into Strek, a native vector editor for logos and icons. Git history records 134 new commits; the current Rust codebase is 53,492 lines. Codex wrote it.
Strek has layers, Bézier paths, text, auto-layout, snapping, guides, a Color Library, SVG import, and five export formats. Codex can operate the whole editor without touching my mouse.

This 188-frame showcase was created and recorded entirely through Strek's cursor-free automation API.
A Native Editor in GPUI
The starting repository mixed an editor core, a homegrown UI toolkit, a wgpu renderer, a web frontend, and an unfinished desktop shell. My first instruction to Codex was to distrust the existing code: review what was there, then refactor, reimplement, or remove whatever didn't make sense. The web frontend went away. Codex rebuilt the current interface with GPUI, the hybrid immediate/retained, GPU-accelerated Rust UI framework developed by the team behind Zed.
GPUI handles the native window, menus, panels, text input, and canvas painting. It doesn't own the document model. The editor core is a separate crate with a scene graph, tool state machines, selection, snapping, auto-layout, transactions, and undo/redo. It produces a backend-neutral display list which GPUI paints on screen and the SVG renderer turns into exported artwork. Selection handles, rulers, grids, and guides are display-list overlays, so they can't accidentally end up in an export.
Every rectangle goes through the same editor operations and history model, whether it was dragged with the mouse, created through AppleScript, or requested by an MCP client.
The Cursor Problem
Codex initially tested the UI by driving macOS like a person, taking over the computer I was using. The transcript marks the end of that approach:
stop automating my computer that way, it disrupts my work
Later that morning I asked Codex to add AppleScript support and an MCP server so it could inspect the application and perform actions without moving the system cursor. Codex added a local automation endpoint with three clients: a CLI, a bundled AppleScript helper, and a stdio MCP server. They can inspect the document tree, select layers through session-stable IDs, change colors and numeric properties, manage guides and Saved Colors, run editor commands, insert text, open and save documents, export artwork, and take screenshots.
strek automate document
strek automate select replace node-0000000100000001
strek automate color fill '#ff3366'
strek automate property opacity 0.8
strek automate export svg /tmp/strek-export.svg
For spatial operations such as drawing a shape or moving a path anchor, an agent can send pointer input. For property edits, it uses semantic commands. To change a fill, the agent selects a layer ID and sends a color instead of finding the swatch, opening the picker, and clicking the right pixel.
The Editor Can Work in the Background
The first version avoided the cursor but still activated the application. My next request was background automation so Strek could keep working without stealing focus.
strek --background starts the app without activating it. Semantic edits and screenshots explicitly refresh the
inactive window. The showcase above uses that mode: a shell script starts an isolated Strek instance, creates a frame,
draws and recolors shapes, inserts text, groups and duplicates layers, opens panels, captures the frames, and undoes
everything back to the starter document. The app never comes to the front.
strek --background
strek automate action tool.rectangle
strek automate pointer down 120 100
strek automate pointer move 360 260
strek automate pointer up 360 260
strek automate screenshot /tmp/strek.png
Codex wrote the editor, added an interface for operating it, then used that interface to test new UI and produce the project's own demo. The automation API started because I wanted to keep using my computer while Codex worked.
Strek focuses on logos and icons. Documents are versioned JSON, SVG import returns an explicit error when a feature can't be represented faithfully, and the same editor core serves both the native UI and automation.
git clone https://github.com/HelgeSverre/strek.git
cd strek
cargo run -p strek
Try it at strek.design. The MIT-licensed source, automation documentation, and reproducible showcase script are at github.com/HelgeSverre/strek.
