Puck for macOS 0.2.0
Work that survives being quit, and an agent that can be left running.
The window remembers
Conversations are kept between launches. Workspaces survived a restart and
the talking in them did not, which made the window a scratchpad rather than
somewhere work lives. They are in chats.json, beside workspaces.json.
It opens big enough for what is in it. Explorer, editor, transcript and
island at once, in a window that used to be sized for a chat box.
A pasted file no longer buries the conversation. A long message shows its
first lines with the count and the size, and opens as a .txt. Tool calls draw
one line each — an agent that used twenty tools in a turn was burying the part
anybody reads.
The agent
Shells that outlive the call that started them. run_shell waits for a
command to exit, so the one thing it could not do was the thing that never
does: a dev server, a watcher, a build left running. Four tools instead —
start, read, send, stop.
Runs on a schedule. "매일 아침 CI 확인해서 깨졌으면 알려줘" is the obvious
thing to ask a pet living on your desktop, and there was no way to say it.
Every so many minutes, once a day, or on the weekdays you pick. Only while
Puck is up; one whose time passed while it was shut runs once when it comes
back, not once per hour it missed.
A change review before you keep what it did. ⇧⌘R shows the working tree
file by file with the hunks, and puts one back if you would rather it had not.
Reading and typing into other apps. app_snapshot gives the agent the
whole of a window as an outline — the question you can only ask before you
know what to look for — and with it typing, key chords and scrolling. Text
goes in as unicode, so a Korean layout types what was asked for. Typing and
pressing ask for approval; reading and scrolling do not.
The pet
It stood still through everything the agent did. It now takes a posture that
matches the tool, speaks up when a run finishes behind another window, and
comes to the pointer when a run has stopped to ask for approval. A character
package can replace what it says, keyed by the moment. Off by an option, for
anyone who wants it quiet.
Fixed
- The pet no longer shrinks. Two faults, both of which read as "it gets
smaller every time I alt-tab": the size was remembered as a drawn height
rather than a fraction, and a trip ordered into the tank was thrown away if
the pet was interrupted on the way. - A folded island stays in the menu strip instead of cutting a bezel
across the window and pushing the transcript down. - A coding agent is no longer killed three minutes into a ten-minute turn.
The clock now measures how long it has said nothing, not how long it has
worked. - A CLI whose login expired says so, and names the command that signs it
back in, instead of "execution failed". - No more EMFILE watching a project of any size: the app raises the
descriptor limit launchd hands it. - An agent that dies explaining itself is heard. Its last words could be
lost to a race with its own exit.
Install
Download Puck-0.2.0.dmg below and drag Puck into Applications. macOS 14 or
newer. The chat window is inside the app and comes up with it; there is
nothing else to move.
The image is signed ad-hoc rather than with a Developer ID, so the first launch
is refused as coming from an unidentified developer: right-click the app →
Open → Open. Puck then asks for Accessibility, and for the microphone,
speech recognition and screen recording as you use the features that need them.
Building from source instead is sh pet-app/scripts/install.sh — see the README.