Releases: jke48222/WindowPet
Release list
WindowPet 1.2.0
Rusty stopped being a creature that walks on your windows and became one that
can see them.
He can see and arrange your windows
windowsreports what is open: which apps, how many, what size, where. It
reuses the zero-permission window poll he already walks on, and keeps the
invariant: app names come from the process id, neverkCGWindowOwnerName,
and no window title is read anywhere in it.- "Put Safari left and Terminal bottom right" arranges them, on whichever
display each window is already on. - Arrangements are saved and recalled by name, and "put it back" restores each
window to the exact frame it had, at the size it actually was.
He can keep watch
- "Tell me when the build finishes." He goes and stands on that window and
lights a small lamp at his shoulder, so the promise is visible rather than
taken on faith. The signal is the Accessibility event stream he already
counts for reactions: frequency only, still no titles. - "Every weekday at 9, tell me what is on my calendar" runs the full assistant
when it comes due. A missed slot is never replayed, so a laptop waking at 3pm
does not get every morning it slept through. - Everything he says unprompted now passes a quiet check first. Focus on, your
microphone in use, or the screen locked, and it waits, then arrives with a
word about why. Full screen or mid-sentence, and it appears without being
spoken. Older than two hours and it is dropped, because it is not news.
He can do more, and cost less
- Dictation. Hold Option-D and speak, and the words go from the on-device
recognizer straight into whatever app is in front. No request, no token,
nothing leaves the machine. - A daily spending limit, five dollars by default, checked before every
model call and before every iteration of the agent loop, so a runaway plan
stops at the ceiling rather than past it. - He remembers what you copy, in memory only and never on disk, skipping
anything a password manager marked concealed or that looks like a key. - Drop a file on him and he reads it. Text and PDFs.
- Teach him a trick: record what he does, name it, ask for it later.
- Memory can belong to one app. "In Xcode: keep the left half" only comes
back while Xcode is in front. - He speaks MCP. Servers in
mcp.jsonjoin the same tool schema and the
same confirmation gate as everything built in.
Under it
- Swift 6 language mode across every target, zero warnings on a clean build.
The UI classes are actor-isolated rather than main-thread by convention, so
two agent turns cannot interleave and corrupt a conversation. - Multi-display behavior is decided by one policy instead of assuming the main
display, so snapping a window keeps it on the screen it is already on. - Universal binary, arm64 and x86_64, both at the macOS 14 minimum.
- Hardened runtime on every signing branch, with the entitlements the
microphone and Apple events need on top of their permission grants. - 360 unit tests, up from 131. End to end rig 138 checks, up from 93.
Still open
- Not notarized. That needs a Developer ID Application certificate, which
needs Apple Developer Program enrollment. Everything downstream of it is
wired:Tools/make-dist.sh --notarizesigns, submits, staples and verifies. - Dictation's speech path and the Focus reader have not been exercised against
real permissions and a real Focus mode. See the README's known gaps.
v1.1.0
A creature that lives on your real macOS windows. It stands on title bars, rides them as you drag, and falls when you close one.
What this release is
The engineering is done. The distribution is not, and the blocker is a certificate rather than code, so this release carries notes and source rather than a download. The reasoning is in "Why there is no download" below.
What is in 1.1.0
- Universal binary, arm64 and x86_64, both slices stamped at the macOS 14 minimum
- Hardened runtime on every signing branch, not only the Developer ID one, so what runs daily is what notarization will accept.
Tools/WindowPet.entitlementsdeclaresdevice.audio-inputandautomation.apple-events, without which the microphone is denied with no prompt and no error - 12,500 lines of zero-dependency Swift, 131 tests
- Measured 0.24 percent CPU asleep in 48 MB, with per-phase budgets published in
ENERGY.md - A ballistic solver that lands leaps within 1.5 points
- Per-frame alpha masks that open a click-through hole only over the creature's pixels, so you can boop, grab and throw it while every other click passes to the app beneath
- Tier 1 needs no permissions at all and is the source of truth. Accessibility is optional and buys latency, not authority
Building it
git clone https://github.com/jke48222/WindowPet.git
cd WindowPet
bash Tools/make-app.sh && open build/WindowPet.app
Requires macOS 14 or newer and the Swift toolchain from Xcode. No third party Swift dependencies.
Why there is no download
Distribution needs a Developer ID Application certificate, which needs Apple Developer Program enrollment. Without one, Gatekeeper rejects both the app and the DMG on anyone else's Mac, so a download would be a worse first experience than a build from source.
Everything downstream of that certificate is already wired. bash Tools/make-dist.sh --notarize signs the DMG, submits it to Apple, staples the ticket and verifies the result the way Gatekeeper will. When the certificate exists, that single command produces the asset that belongs on this release.