0.1.79
Build, test and deploy lights for every agent. Slipstream now shows BUILD ▸ TEST ▸ DEPLOY
beside each session’s details: lit with how long ago it passed, red when the last run failed, breathing while it runs.
Zil reads them from the commands the agent actually ran, so agents report nothing extra; click the lights for each
command, its exit code and how many tries it took, and zil agent pipeline gives the same as JSON. Setup now
offers to open Privacy & Security › Developer Tools, where adding Zil makes the builds and tests agents run start
faster. Also: a window pinned to the centre stays pinned after the screen sleeps; monitor sound comes back on its own
after the output switches away and back (zil volume restart if it ever doesn’t); and a terminal tab no
longer shows a stale “waiting” while its agent is working.
0.1.78
Volume keys for monitor speakers. macOS gives a DisplayPort or HDMI monitor’s audio no
volume control, so the keys only show ⊘. While such a monitor is the output, Zil now turns the sound down
itself, as Linux does: the volume keys step it (⌥⇧ for finer steps), mute works, and the level is kept per
monitor. It asks once for System Audio Recording, and other outputs keep the normal macOS volume. Also:
⌘W closes Zil’s own tiles (Slipstream, Messages, ZIL·DOC, TV), as in any other app;
spell check in Slipstream’s HAIL and THOUGHTS; the circle menu opens and closes with an animation; after a monitor
is unplugged and plugged back in, windows move into their tiles again instead of staying stuck; and the Messages
text box follows the theme instead of staying amber.
0.1.77
Drives in Cassette, and a way back to FILES. Cassette’s top bar shows free space on the
boot disk again, turning yellow at 80% full and red at 92%; click it for every mounted disk, onboard and network, with
its size and free space. In Slipstream, the FILES and THOUGHTS drawers now each have a switch in the top-right corner,
so you can go from one to the other without remembering ⌘⇧E and ⌘⇧J.
0.1.76
Link previews in Messages. The first link in a message now shows a card under it: the
page’s picture, title and site, as Google Messages does. Click it to open the link. Zil fetches only public
web addresses, never your home network, sends no cookies, and keeps each card for a week. Also fixed: a picture that
arrived before the paired Mac had downloaded it could sit as a 📎 chip for ten minutes. It now says
“fetching…” and is tried again within seconds.
0.1.75
The ring. Hold ⌃⌥⌘Z, or just the right ⌥ key,
or ⌃fn, and a ring of eight actions opens at the pointer: flick toward one and let go, or tap and
click. Rings for the window, your agents (the ones waiting on you first) and the desk; set your own in
[ring]. Some slices open an outer ring: THEME offers the looks (ST, DASH, Cassette, Plain), then the
colours for that look; the workspace slices offer 1–9. ZIL → Theme follows the same order, look first and
then colour. Also: THOUGHTS, a drawer in SLIPSTREAM (⌘⇧J) for ideas you have while an
agent works. Jot one, refine it with a design-partner agent in its own tab, or hand it to an agent at the end of its
turn. It shares the project’s idea queue with rift’s /idea.
0.1.74
Cassette, squared away. Fixed: in Cassette the clock could jump up into the macOS menu bar a
minute after launch; it now stays in its spot, on the same line as the other readouts. Weather and Wi-Fi are back on
the Cassette bar, and clicking them opens their cards as before.
0.1.73
DASH. A second theme family next to ZIL, picked from ZIL → THEME: piano-black gloss
chrome, a red scanner sweeping the foot of the screen, and a voice box in the rail that lights as you speak, lettered
in Michroma and seven-segment digits (palette: Scanner Red). Also: Hyper+arrow now moves the focused window as well
as Hyper+Shift+arrow, and in Cassette the rail’s pin diamond and a row’s right-click menu pin a window to
the centre.
0.1.72
Cassette. A new look, ZIL → Cassette: amber phosphor on smoked glass. A 52 px icon rail
and one thin bar of lit readouts leave more room for windows, and your wallpaper shows between and around the tiles.
SLIPSTREAM and Messages read like a CRT, in SF Mono with a soft glow and faint scanlines, HAIL is a
> prompt, and a tapered ridge meter in the rail follows whatever is playing. It barely moves at rest.
Also: switching themes now recolours every open pane at once; the FILES drawer has a filter for big folders;
ZIL·DOC plays video and audio; and the comms lamp opens a card that lists the agents waiting on you, each a
jump to its tab.
0.1.71
Tabs that switch at once. Flipping between SLIPSTREAM sessions no longer shows a black
pane for seconds: a tab you have visited shows its last stream immediately, and a session with many
subagents no longer re-reads all of their transcripts on every switch (one went from 3.8 s to 0.6 s). In
Messages, an open conversation is redrawn only when something in it actually changed.
0.1.70
No more overnight spin. Fixed: on a Mac that reads Messages from another Mac, one picture
could be downloaded again and again, twice a second for hours, until Zil hung at wake. A picture is now fetched
once, and one that isn’t available is left alone for ten minutes. A reaction shows the moment you pick it,
and a text you send stays in the thread from Return until it is delivered, with no blink.
0.1.69
Lighter on the Mac. A new text no longer makes Messages ask Slack for its whole list too
(about ten times faster per update), and a slow service now greys out its own tab instead of emptying the list.
SLIPSTREAM reads each agent’s transcript once per update instead of three times. Zil’s log keeps
the news (failures, slow paths, changes) and drops the routine lines that made up half of it.
0.1.68
Read on one Mac, read on all of them. Opening a conversation in Messages marks it read for
every desk that shares the same phone, so the unread pulse clears everywhere within a couple of seconds; nothing
is sent to the phone or the other person. Fixed: a photo or video that arrived half-downloaded is now noticed and
fetched again instead of showing garbled.
0.1.67
Messages grows up. Slack joins Google Messages in one tile: a switcher reads
ALL · Google · Slack (a service gets a tab only once you have connected it), Slack’s
formatting, emoji, avatars and cards with Join-style buttons render natively, and replies, reactions and
group replies go out as you. Images and videos open large inside the tile, a counter warns before the send limit
(and never cuts a message), notes to yourself work, and a second Mac reads everything through the first, photos
included. Spellcheck knows the conversation: names, product words, links and code stop being flagged, on
this Mac only. HAIL shows what is about to land: line breaks, hidden characters, multi-line or risky
commands are held for a second Return, Esc takes a message back within 3 seconds, and Esc twice interrupts the
agent. LCARS is now ZIL throughout, with neutral theme names and Coral as the default. Fixed: Zil
could end itself when force-ending a structured session; services vanished when Zil was opened from the Dock;
editing the config in place was ignored. Terminal tiles copy and paste; file paths in SLIPSTREAM open in
ZIL·DOC; hilt 0.10.1.
0.1.66
Voice works on a fresh Mac: Zil now asks for the microphone itself, so it appears in
the Microphone list and the mic can be granted (on 0.1.65 it never could). MULTI·TERM is now
SLIPSTREAM, and its + starts more than Claude: NEW IN FOLDER offers Claude, a structured
Claude, Grok, Codex, rift and agy, or a plain shell for maintenance; the agents
with a structured lane open as SLIPSTREAM tabs named for them (ZIL·GROK), a shell opens as a ZIL·TERM
window that ends when you close it. Subagents show as crew, the engine chip shows the model’s
EFFORT and exact version, and a restarted session keeps its name. COMMS reads Notification
Center alerts (a Software Update, say) as well as banners, blinks instead of flashing, and the mic scales with
the tile. Say "close" to end a voice conversation. ZIL·TV plays a YouTube link you copied
(✦V, zil tv play, or ask the computer), with captions off by default. New console:
ZIL·WIRE, the fleet’s comms channels as a read-only ZIL board. ZIL·CLOUDFLARE gains a
$ OVER column, pricing anything past your plan’s free tier. Pasted secrets are concealed in CLIP, the
paste cache keeps seven days, quitting returns every window, and popups follow the workspace rule. Under the
hood: terminals held behind SLIPSTREAM no longer redraw unseen (Zil’s own CPU drops by two thirds), sessions
dropped by a restart come back together, and hilt moves to 0.7.1 with setup profiles.
0.1.65
Talk to your Mac. A new COMPUTER panel (the mic beside COMMS, or ZIL → AI) takes a
question typed or spoken and gets it done: "open Slack", "go to Do Not Disturb", "what’s the battery level",
"hide the dock". It uses hilt, the map of your Mac, locally and without an AI model, and answers aloud when
you asked aloud. Follow-ups are conversational ("on", "the second one"), and "tell ARC to …" sends your
words to an agent. When hilt doesn’t know, a restricted Claude (Sonnet) answers read-only questions like
"what’s using my CPU", and asks before doing anything else. An opt-in "Computer" wake word listens on the built-in mic. MULTI-TERM gets a
push-to-talk mic in HAIL, clickable links plus a LINKS list of every link in a session, and
Claude Code’s suggested next prompt (Tab takes it). Snap windows (ZIL menu) turns
off macOS’s window animations and restores them exactly when you switch it back. Sessions lost in a
restart come back together with RESUME ALL. Plus fixes: the split bar, ⌘⇧4, links in
narrow tiles, and the bridge keeping half the screen. New: ZIL·CLOUDFLARE, your Cloudflare account as an
ZIL console (ZIL menu, once a CLOUDFLARE_API_TOKEN is in your Keychain): the week’s traffic,
zones, Workers, Pages, R2 and D1 with sizes and traffic, tunnels, and usage levels against what your
plan includes, turning amber at 80% and marked OVER past it. Voice needs vlab with streaming (0.5.9).
And for the agents (MULTI·TERM): REVIEW — click a line in an agent’s
diff, leave a note, send the notes back as one review; a FILES drawer from the header’s end cap;
⧉ COPY on every code block (nested fences now render whole); a long paste becomes a
document, and a CLIP strip shows what you’re about to paste. The bridge’s rail blocks
now switch views — triage, fleet actions, background work, context — and every list scrolls. After a
restart, MULTI-TERM points you to RESUME ALL instead of opening empty.
0.1.64
Fix release. The split bar between tiles drags again. 0.1.63's screenshot fix
left it stuck whenever macOS's idle Screenshot overlay was on screen, which is nearly always. The bridge
now keeps at least half the screen, so the agent comm bus has room, and the split bar widens it from
there. MULTI-TERM's HAIL field uses the whole bar, including in a narrow tile.
0.1.63
Lighter on your Mac. An idle desk used to keep macOS's WindowServer near 40% CPU; now it
settles to a still frame after a change and costs a fraction of that. Choose how much Zil moves under
ZIL → Motion (Low, Medium, High). Zil stops re-reading agent transcripts that haven't changed,
the ZIL menu is regrouped (AI first) and fits on a laptop screen, and hilt, the map of
your Mac, now ships inside Zil. Also: ⌘⇧4 works over Zil again, a window you move to another
workspace takes you with it, the bridge starfield is finer, HAIL on the bridge matches MULTI-TERM, and there is a new theme, Enterprise-G.
MULTI-TERM shows code edits with +/− diffs (click to expand), colours code and renders markdown,
and on-screen menus from an agent appear as buttons you can click.
0.1.62
Zil runs your agents itself. Sessions now live on Zil's own holder, axil —
vetted, signed, and fast — and Move to Zil brings idle iTerm2 or Terminal sessions across with
their conversation intact. Lost a session to a crash or reboot? The bridge lists it under RECOVERABLE;
one click resumes it. Tabs that exit offer Restart (same conversation or a fresh one), and
Ctrl+C in HAIL interrupts a turn — twice to end. When an agent is blocked by sigil, tap
UNLOCK and your fingerprint gets it moving. MULTI-TERM shows what each agent runs in the background (and
ignores what only listens), holds your place while you scroll, takes multi-line messages, and wears a new
equaliser rail. ⌘-Tab or a Dock click now takes you to the app's workspace, and a restart no
longer scatters windows.
0.1.61
MULTI-TERM grows up. Answer permission prompts from the stream (a PERMIT panel with
the prompt's own options). Type / for every slash command your Claude Code knows, your skills and
plugins included. End a session properly — right-click a tab or a bridge pad — with a
confirmation, a clean /exit and its tab closed. Click a command in the stream to copy just
that; paste works in HAIL. New sessions in any project or folder, tabs that scroll, a lighter ZIL
header with a context bar, working tabs that blink, and a ZIL rail that is the scroll bar. The
bridge gains a warp viewscreen and data lights, and every control glides and presses.
0.1.60
Your agents, on the bridge. ZIL·BRIDGE (✦C, the Zil menu, or zil term bridge) shows every Claude
session on the Mac — working, blocked, context, memory — with rails that breathe with the
fleet. MULTI-TERM (✦⇧M) streams any of them as ZIL traffic instead of a terminal grid, whether it
runs in Terminal, iTerm2 or Zil: tabs you can swipe between, a scanner on the busy ones, filters,
images, and a HAIL bar that types into the agent's own tab. Answer its questions, switch its model
or permission mode, all from the tile. ZIL·TERM is Zil's own lightweight terminal: sessions
that survive a Zil restart. When an agent is waiting on you, the console's COMMS square turns amber.
Plus: ZIL borders gain a light sheen, and every label now meets WCAG AA contrast
(zil contrast checks all seven themes).
0.1.59
Find any window, and any tab. Click the app pill (or ✦/) and a
search drops out of it: every window on every workspace, most recent first, each tagged with
its workspace. Type a few letters — every word must appear, case and accents ignored
— and Enter takes the desk there. Browser tabs are in it too: type part of a page title,
or name the browser (chrome, chrome wire) to list its tabs, or tabs for every
tab you have open. Matching borrowed from Phantomat. zil find does the same from a
script.
0.1.58
The console powers up. On launch every panel flickers on in a wave that
travels out from the elbow, and the windows glide into their tiles as it passes; zil
powerup replays it. COMMS, opt-in from the Zil menu: route an app and its
notifications are filed off-screen instead of landing on your tiles — a square blinks
in the side rail, and a pull-out lists them to open or clear. Windows that need a minimum
height now land where they fit instead of floating, a dragged bar stops where a window would
refuse its slot, and text on dark pills picks a readable ink.
0.1.57
An empty workspace is a systems display. Switch to a workspace with
nothing on it and the field fills with a ZIL deck plan carrying this Mac's name, its chip,
cores and memory, live processor load, memory, storage, temperature, fan, uptime, network and
a lit cell per CPU core. Every number on it is measured — none of it is set dressing. It
vanishes the moment a window lands there.
0.1.56
The workspace strip tells you where the work is. A workspace holding
windows now carries a filled background that breathes slowly, in a colour picked to differ
from the one marking where you are — so occupied, current and empty never read alike,
whatever the palette. And sending a window to another workspace now takes you with it: right-click
a rail row, right-click a number, and the desk follows.
0.1.55
It stops believing a window that is still waking up. Coming back from
sleep, an app can report a size it does not really need — and Zil would write that down
as the window's minimum, forever, then refuse to seat it anywhere narrower. Zil now learns
nothing while the desk is still settling, and never believes a minimum a window has already
run under. zil minimums shows what it has learned, flags any value the window itself
contradicts, and clears it.
0.1.54
Gone means gone. In the instant after a window goes to the Dock it
can still answer “I am not minimised”, and Zil would pick it straight back up
and raise it. Zil now remembers what it just saw go, whichever way it noticed, and leaves
it alone until you bring it back.
0.1.53
Detached windows keep the top. Sliding the pointer over a tile
underneath a detached window used to activate the tile and swallow the window — and
once macOS has put the active app in front, nothing outside that app can lift the detached
one back. So the hover simply does not take: the detached window stays where you put it,
and you move it aside or click the tile when you really want it in front. A window that
only clips a tile's edge is unaffected.
0.1.52
Minimise means minimise. A detached window sent to the Dock stayed
there for a beat and then flew straight back out. Zil keeps detached windows on top by
raising them whenever focus moves — and raising a window that is minimising cancels
the minimise. Zil now looks before it raises, and waits a quarter second so the look lands
after the window has actually gone. ScreenFlow, Spark and anything else you detach stay
put.
0.1.51
The rail listens. Turn on ZIL › Audio spectrum and the
gap between ACTIVE and NAV fills with sixteen bars driven by whatever this Mac is playing,
lit in the current theme and in red under alert. macOS puts system audio behind Screen
& System Audio Recording, so Zil asks for it the first time and says plainly when it
has been refused. Off until you ask for it: nothing is captured, each buffer becomes
sixteen numbers and is thrown away, and no sound ever leaves your Mac.
0.1.50
The rail seam goes flat. The elbow pair that closed the window list
is now two plain ZIL runs — shorter, squared off, reaching the band at the rail's
edge, with ACTIVE and NAV lettering centred in them. Same colours, same gap, same black
notch where the band passes through.
0.1.49
Your agents just work. Zil is an app, and connecting it to the AI
agents on your Mac should not need a terminal. The first time it starts, Zil asks once
— let your agents use it? — and a yes connects Claude Code, Claude Desktop,
Cursor, Windsurf and the Gemini CLI, and keeps them connected when Zil moves or updates. An
agent app you install later shows up under ZIL › Agent support instead of being
changed without asking. When Zil is too busy to answer an agent, it now says so and does
not quietly do the thing later anyway. And a window that briefly lost half its tile when a
document pane came and went gets the whole tile back.
0.1.48
The faces lose their white plates. Most app icons sit on a white
square, and ghosted over the dark rail they read as pale boxes instead of faces. Zil now
finds each icon's plate colour, cuts it away and keeps only the glyph — the Slack
hash, the music note, the prompt — lit in the row's own colour. Dark-plated icons
get the same treatment, so every row speaks the frame's language.
0.1.47
The crew get their faces. Each row on the rail now carries the
app's own icon behind its name — oversized, ghosted, flush to the left edge and
cropped by the row, so you read the shape before the word. Web apps included. The name
stays on top and fully legible; the focused row's icon comes up a touch brighter.
0.1.46
Web apps get their name on the rail. A Chrome web app reports
its whole manifest title as its name, and a 51-character one wrapped past the edge of
its row and showed nothing at all. The rail now takes the name before the first title
separator, so "Starfield — A browser space game…" reads STARFIELD, and a row's name can
never wrap again whatever it is called.
0.1.45
A viewscreen in the footer. The middle of the bottom bar opens
into a black well, and two soft lights in the frame's colour flash together at the
centre, sweep out to the ends, flash again and sweep back, on a slow loop. The bar rounds
off into the well on either side. Red alert turns the lights red with the rest of the
frame; reduce-motion leaves them resting at the centre.
0.1.44
The rail gets its Okuda seam. Where the window list met the
rosette there was a flat bar; now the upper section sweeps into a thin bar with the
bottom elbow's own curve and thickness, the lower section mirrors it up, and the two
meet across a small gap. The vertical line beside the rail is cut across that gap and
takes each elbow's colour above and below it, handing back to the band colour with a
black gap before the ZIL elbow and the bottom elbow. The rosette hugs the lower elbow,
and the void between it and SENSORS carries an Okuda data panel: colour chips, codes and
rows of blocks, a few lit, ticking once a second and holding still under reduce-motion.
On a short rail the flat bar comes back. rail.json now publishes the cog's rect.
0.1.43
A window that will not fit its slot trades places instead of
fighting. Calendar was dealt into the three-row column's short slot and spent eleven
minutes being snapped back while Slack, happy in a short slot, held a tall one beside
it. When a window refuses its slot, Zil now looks for a neighbour whose slot seats it
and whose own needs fit the slot it would inherit, and swaps the two. Ten seconds from
open to seated, and the log says who traded with whom.
0.1.42
The cog stops sending your desk to the edges. With the Dock on
the right and set to hide, Zil kept a strip along that edge for the Dock's icons, and
the cog lives in that strip: a press on it fell through to the wallpaper, macOS read it
as Show Desktop, and every window slid away. The strip now passes a press only when the
Dock is actually showing something under the pointer; the cog and every other control
are yours. A banner press is handed over only when the banner really is under the
pointer, every hand-off is written to the log, and Zil stands down while Show Desktop is
up instead of re-dealing slid windows.
0.1.41
The in-app update installs on a Mac without developer tools.
The updater's last gate asked stapler whether the notarization ticket was
stapled, and on a Mac with no Xcode that tool does not exist, so a fully notarized 0.1.40
was reported as "ticket not stapled" and nothing was installed. The checksum, signature
and Gatekeeper gates had already passed. When the tool is absent Zil now checks for the
ticket the staple leaves in the bundle instead. If you saw that dialog, download this one
from the button below; updates after it install themselves.
0.1.40
Notification banners answer to your click again. A banner lives
inside Notification Center's full-screen sheet, the same shape as Show Desktop's
backdrop, and the rail had been keeping every press on it since the backdrop rule
landed: no click, no swipe, no dismiss over the band. The sheet is still a backdrop, but
the banner on it is an island: Zil asks the sheet what sits under the pointer and hands
the press over when the answer is a banner. A rail click while a banner shows is still
yours. Covered by a smoke check that swipes a banner away over the band.
0.1.39
⌘⇧4 gets its crosshair back, and a window that will not fit lands
in the middle. The Screenshot overlay is a full-screen window at the menu-bar level,
the same shape as Show Desktop's backdrop, and the rail was swallowing its first press.
Backdrops are now named (Dock, Notification Center); everything else that size owns the
pointer. A window no slot can seat (App Store on a 13-inch desk) used to be detached at
its old corner, where the next tile buried it. It now floats to the centre of the display
and stays on top.
0.1.38
Terminal tabs stop dealing themselves panels. Every native macOS
tab is its own window to the system: a new tab took a second slot, a click on a tab
re-dealt it, and the tab you left was released six seconds later. A tab coming forward
now takes over the slot its sibling held, and a tab in the background never gets one.
Closing a tab hands its slot to the one that comes forward.
0.1.37
Terminal stays on the island. The heal loop treated a 7 px
character-grid rounding (608×1337 vs 607×1344) as a failed slot, snapped every two
seconds, then detached the window. Size refusals now use the same 40 px bar as a
real shortfall; position drift still snaps. Tailscale Settings is a tile again, not a
floating card.
0.1.36
⌃⌥⌘G cycles the conduit: full → half → off. Half is half the
configured inner/outer so the ZIL boarder stays, just tighter. The layout pill reads
·HALF or ·NOGAP. Off still hides the split rails.
0.1.35
The split between two apps is draggable again. The left column
boundary sits next to Zil chrome, so the overlay won the click. The right boundary sits
between Safari and Terminal — they win z-order, and the tap used to hand off before
it ever looked at the handle. Split bars now win unless a real menu is in front.
0.1.34
Split rails move again. The 13-inch floor was flipping a dwindle
split into a stack as soon as a drag approached 500 px, and master-centre could not
store a 500 px side (0.40 of the Air tile) under the 0.35 cap — so the rail
looked dead. Orientation only flips when the box cannot seat two floors; the fraction
now tracks the pixels on screen.
0.1.33
The console stays on the Dock edge; clicks still reach the Dock.
0.1.32 reserved chrome away from the Dock so autohide clicks would pass. That was the
wrong lever — the bar belongs on the edge. The overlay now passes the Dock strip
even when the pills draw over it. Two-column Air tiling and the Finder-as-panel fix stay.
0.1.32
The 13-inch Air keeps the Dock, and Finder stays a tile. Autohide
expands AppKit’s visible frame over the Dock strip; an empty desk then swallowed
those clicks. Chrome now always reserves the Dock edge. Master-centre on a tile that
cannot seat three 500 px columns collapses to two at the floor instead of drawing
280 px sides. A tall Finder window under 500 px wide is no longer floated as a
“panel” on top of the only remaining tile.
0.1.31
The desk stops eating the Dock, and About This Mac stays a panel.
Clicks on a right-side (or autohide) Dock were swallowed by the full-screen overlay
because every non-tile press was treated as chrome. They pass through now; the rail and
band still consume, so wallpaper-click cannot reveal the desktop. Apple menu → About
This Mac is System Settings on Tahoe: it floats instead of taking a tile, and
focus-follows-mouse stands down while it is open, so hovering the window behind it no
longer sends it to the back. On a 13-inch Air, dwindle stacks rather than carving columns
under 500 px. The MEM pill is kernel pressure, not occupancy; the card bar is a
colour-coded stack of app / wired / compressed / cache / free, and leftover swap is
named once, as leftover, not as thrashing.
0.1.30
Windows leave when you close them, and stay put when they twitch. A
window you close no longer holds its slot until its app has finished dying — and an
app that merely hides a window on close is no longer taken at its word: the
WindowServer is asked a second time, every tick, before a tile keeps its place. A progress
panel — Finder copying files, emptying the trash — now floats above the desk
instead of being handed a whole column; anything that refuses to be resized and settles
small is treated as an overlay rather than a tile. Windows that resize themselves
no longer move everything else: open a tab in iTerm2 and that one window is eased back
into its slot, with no re‑deal, no animation and nothing else touched. No column is
ever narrower than 500 px, whatever shape you pick, and
[layout] min_column_width finally takes effect at launch instead of only
after you next edit the file. Side columns fill alternately, left and right, rather than
packing one side first. And the AI card’s live plan limits stopped asking for your
Keychain password every few hours.
0.1.29
The desk stops arguing with you. A pop‑over is no longer
mistaken for a window — Chrome’s Gemini panel reports itself exactly like a real
window, so Zil handed it a full row; it now asks whether a thing can be closed, minimised
or zoomed before tiling it. Windows are no longer treated as interchangeable either: the
middle column gives each app the width it has actually been measured to accept, so a
browser that insists on 600 px and a chat window happy at 420 can finally sit side by
side. [layout] min_column_width puts that floor in your hands — drop it
and more, narrower columns become possible — and the picker now offers shapes with
room to grow into rather than only ones that match the windows open this second. Pinning a
window by hand outranks every rule, so a pin survives changing shape. Right‑click the
rail to trade two tiles or send one to a workspace, one‑handed, no modifier. And the
AI card reads Anthropic’s own limits list — the 5‑hour window, the weekly
one, and the weekly window for whichever model you are on — each with when it resets
and which one is actually binding, switched on from the ⚙ card rather than a config
file.
0.1.28
Move windows by hand, and say something when they misbehave. Drag a
row in the rail onto another row and the two tiles trade places; drop it on a number in
the 1–9 strip and the window moves to that workspace. The row you are over lights up
and the bar says what the drop will do — and a ✦‑drag does the same now, ringing
the tile it would trade with instead of trading in silence. Every row carries a small
diamond, lit when that window is held in the middle column; click it to pin or release.
New in the ⚙ card and the ZIL menu: Feedback. Pick bug, feature or comment, write a
line, and it files an issue — with the one line of context that travels shown to you
first, and nothing in it that names your machine or you. An agent working with you can
draft one too: by default it does not send, it puts the draft on your screen marked with
the agent’s name and you press SEND. Underneath, a click that fell through the
console onto the wallpaper — which macOS reads as show‑me‑the‑desktop
— is fixed at its cause: a full‑screen window from the Dock was being mistaken
for a menu.
0.1.27
Only a hand moves a window. Two fixes in one lesson. iTerm2 refits
its own frame when a tab opens, and Zil read that as you dragging an edge — a split
bar moved, or two tiles traded places, and the desk reshuffled. A frame change now counts
as a gesture only when the mouse button is down and has travelled; anything else is drift,
and the slot wins. And focus‑follows‑mouse went dead whenever a screen
recorder was open: its helper parks full‑screen windows far above the menu band, and
the focus scan treated them as a surface it must not dismiss. That scan now skips the
capture band exactly as the click path already did. A drag also needs the button actually
down, so a tap that dies mid‑gesture can no longer freeze focus, and
zil doctor reports mouse_focus. And the desk can now be
arranged by intent: desk_arrange takes one plan — which apps go centre,
left, right, float or park — puts the desk back with desk_undo, and
reports every selector it could not match and every window it could not honour as data.
The arrange_for prompt carries the recipe for productivity, a meeting or
focus; the judgement is in the prompt an agent reads, Zil ranks nothing.
0.1.26
Shapes you can point at. Click the DWINDLE or MASTER·C pill
and the console offers every desk shape that holds the windows you have open, drawn as
block sketches with the one in force lit — 2 | 1 1 | 2 is two stacked
left, two wide centre columns, two stacked right; 1 | 4r | 1 stacks four
centre rows. Pick one and the desk re‑deals, and the choice lands in
zil.toml. The deal knows what deserves the middle: focus windows —
terminals, editors, anything with a focus rule — fill the centre first;
ambient ones — chat, music, ZIL·TV, or an ambient rule —
fill the sides, and never take a third of the desk on arrival. Two new rail gestures:
⇧‑click one row, then another, and the two tiles trade places completely;
⇧‑click a row, then a number on the 1–9 strip, and the window moves there and
its app is assigned that workspace from now on. zil shape does the picking
from the shell.
0.1.25
The click path is asserted, not assumed. After a long sleep a
press on the rail could reach the wallpaper — macOS reads that as
reveal‑the‑desktop and parks every window. The console is click‑through
by design and one event tap is its only click path; a tap whose port dies across a sleep
gets no notice and stays dead. Zil now checks the tap every tick and on wake, re‑arms
or re‑creates it, reports it in zil doctor, and names the window that
won a press it should have taken. A learned window minimum larger than 60 % of the
desk is refused as a transition rather than a constraint, and poisoned ones are discarded
on load — one had a side column widening to 2105 px every morning. New verbs:
zil centre pins a window into the middle column or releases it, and
zil swap trades two tiles' slots.
0.1.24
Fullscreen keeps its seat. Send a tiled window to native
fullscreen and come back, and the desk is exactly as you left it. Zil used to read the
window swelling to the whole display as a hand dragging the column bar, then drop the
window from the layout while it was away and re‑place it by the rules on return
— every neighbour shuffled twice. Now the slot is held: the band closes over it, the
rail marks the row FULLSCREEN, and esc puts the window straight back. The document pane
wears the console bar's own header — cap, joint, name, path, bar, KIND · SIZE
· COPY, end cap — and COPY puts the file's raw text on the pasteboard, for
handing a rendered report to another agent.
0.1.23
The bar's readouts are yours to switch. A gear on the end cap
right of the clock opens a bank of ZIL dip switches, one per readout — CPU, MEM,
WF, SSD, TEMP, AI, WX, DATE, TIME — up for on, and the bar re‑draws as you flip.
The choice lands in zil.toml as [widgets], which hot‑reloads
the other way too. Underneath, three fixes to how a desk is dealt: a phantom slot that
could claim half the desk after a restart is gone; master‑centre's side columns now
widen to hold a window they used to shove into the centre; and workspace 1 is home —
if it ever stands empty while another workspace holds windows, they come to it. The
document pane keeps its ink readable on every palette: an accent too close to the ground
for text is lifted until it reads.
0.1.22
A screen recorder can no longer swallow the console. Recording
software lays an invisible sheet of glass over the whole display, and Zil read that sheet
as a menu — something in front that owns the click. So it stepped back from every
press on the rail, the d‑pad and the pills; the click went straight through the glass,
through the console behind it, and landed on the wallpaper, which macOS reads as
show‑me‑the‑desktop. Clicking a window in the list made every window on
the desk disappear. Zil now tells a menu from a pane of glass by the height it floats at:
real menus and sheets — including its own — still take their own clicks, and
anything drifting above them that nothing can click is stepped over rather than deferred
to. ZIL·TV gains an episode as well: a workbee tour of the Enterprise·D.
0.1.21
Red alert breathes as one surface. 0.1.20 taught the alert to pulse the
ZIL borders and leave the black and the readouts alone — but the lettering cut out of
those borders, the ZIL mark and the codes on the elbows, went on holding steady while the
colour behind them faded, so the type appeared to float free of its own panel. The frame and
everything stamped into it now move together, end caps included.
0.1.20
The starship can sound the alarm. When the Enterprise·D panel
finds itself under attack, the whole desk answers — the ZIL borders flush red and
breathe, exactly as though you had called red alert yourself, and stand down again when the
shooting stops. Only the borders move: the frame's black stays black and the readouts stay
legible, where before an alert dimmed the whole console and let the desktop show through
it. The page asks; Zil decides. That channel is open to the panels Zil ships
and to nothing else, so a site you add yourself can never repaint your desk · and
closing a panel that raised an alert lowers it too, so a page that dies mid‑fight
cannot strand you in red. Audio follows the same rule: a panel Zil ships may start its own
sound, while one you add still waits for a click · and panels are inspectable now,
so Safari's Develop menu attaches to one like any other page — the difference between
reading a site's own console and guessing at it.
0.1.19
A starship, built in. ENTERPRISE·D VIEWS joins the panel
list: a web panel Zil ships with rather than one you add, carrying a Galaxy-class starship
holding station at a starbase — no heads-up display, no controls, a scripted camera
moving between dialled angles you switch from the panel itself: aft, forward, along the
nacelles, or the whole ship from outside. The same idea as ZIL·TV, with a
three-dimensional ship in place of a video, and it stays light enough to leave open
· because it lives in the app instead of your zil.toml, it is always
there, and the Remove panel menu leaves it alone.
0.1.18
Dialogs stop getting buried. A Touch ID prompt, an admin request or
an "Empty Trash?" confirmation could vanish behind a window the moment your mouse wandered:
focus-follows-mouse only stood down while the pointer was over the dialog, so moving
it anywhere else raised something on top of the very thing you were about to answer.
Authentication surfaces now hold focus wherever the pointer is, and app dialogs and sheets are
recognised too — they are ordinary windows as far as the system is concerned, so nothing but
their accessibility role gives them away · the check for "which window is really under the
cursor" no longer ignores Zil's own panels, ZIL·TV and document pane, which meant it could
answer with whatever was sitting underneath one of them.
0.1.17
The console gets out of the way of full-screen apps. Send a window to
full screen and the ZIL frame used to paint straight over it — the overlays are set to join
every Space, and a full-screen Space is one. Zil now notices when the Space on screen belongs
to a full-screen app and stands its chrome down entirely, bringing it back the moment you
return to the desk. Together with 0.1.16, that is both halves: Zil stops managing a
full-screen window's geometry and stops drawing on top of it.
0.1.16
Full-screen apps are left alone. Send a window to native full screen and
macOS gives it its own Space and owns its geometry — so Zil now stands down instead of holding
a slot for it and fighting over a frame it can never reach. Leave full screen and it is picked
up and tiled again on its own. Zil already refused a window that was already full
screen when it first saw it; this applies the same rule to one that goes full screen
afterwards, which is the case you actually hit.
0.1.15
Windows stop fighting over a slot they cannot fit. An app that outgrew
its slot could get stuck in a loop you could watch: Zil places it, the window springs back,
five times, Zil gives up for two minutes — then starts again, forever. Two things caused it.
The give-up now remembers which slot the window lost to, so the fight does not simply
restart on a timer. And the check that floats a window too big for any slot was being
permanently switched off after that window's first measurement — so an app that fitted when
it opened and stopped fitting later, because its stack gained a third window, could never be
floated out no matter how badly it overflowed. It now works for a window's whole life. The
log says the numbers too — insists on 2600×455, slot is 2600×433 — instead of
just reporting that something drifted.
0.1.14
The CPU and MEM readouts open too. CPU gives you a bar per logical
core, filling live and turning amber then red as each one loads, with your machine's own
composition underneath — 12 performance, 4 efficiency, read from the hardware rather than
assumed. MEM shows what is actually eating it: the top consumers by
physical footprint, the same figure Activity Monitor reports, so the two agree
instead of quietly differing by hundreds of megabytes. Processes are named the way you know
them — three Claude Code sessions read as one claude, not three copies of
2.1.247 — and anything the system will not let Zil inspect is left out rather
than shown as zero · uplink now sits above downlink on the Wi-Fi card, ▲ over ▼ ·
zil doctor reports per-core load and top memory, so an agent can read them
too.
0.1.13
Updates install themselves. Check for updates now offers
Install & Relaunch — no download, no quit, no drag. Zil fetches the build, checks its
SHA-256 against the feed, verifies it is signed by this developer and notarized by
Apple, confirms the ticket is stapled so the check holds offline, and only then swaps it in.
A valid signature alone is not enough, so the check pins the certificate to Zil's own team: a
validly-signed impostor is refused rather than installed. The swap moves your old copy aside
instead of deleting it and puts it back if anything goes wrong, so an interrupted update can
never leave you with no app. Your settings and Accessibility grant carry over ·
⌃⌥⌘S now flips the centre column between rows and columns under master-centre, where it
previously did nothing at all — and your choice sticks, instead of being undone by a window
that rounds its width up by a few pixels.
▸Earlier entries — 11 releases, 0.1.0 to 0.1.12
0.1.12
Permissions actually work. Zil is signed with the hardened runtime but
was never signed with the entitlements the hardened runtime requires — so every request for
your calendar was refused locally, in about 17 ms, before macOS was even consulted: no
prompt, no error, nothing in the log. It looked like the OS refusing to prompt a menu-bar
app. It was a missing flag in our own build script. Calendar events now work · a Wi-Fi
card on the WF pill: signal, noise, SNR — the number that actually predicts
whether a link is good — link rate, channel, band, protocol and security, with
downlink/uplink throughput updating live from the interface's own counters · a
Storage card on the SSD pill listing every mounted volume, boot disk first, with a
fill meter that turns amber past 80% and red past 92%. A volume that genuinely will not
report its free space says so instead of being drawn as full · ZIL·TV now carries ten
episodes and opens on a different one each launch · the document pane wears a proper ZIL
end-cap · and the first-run wallpaper copy was looking for filenames that no longer
existed.
0.1.11
Agent support works from the menu, not just the terminal. Registering
from ZIL › Agent support reported "claude not on PATH" on Macs where
Claude Code was plainly installed, while the identical command from a terminal succeeded — a
GUI app launched by macOS inherits a minimal PATH, and the lookup trusted it. Zil now finds a
client's binary where it actually lives and, failing that, asks your login shell — the only
thing that really knows. Also: the manual-setup line for Antigravity pointed at a folder
instead of telling you to use its in-app MCP settings.
0.1.10
Your agents can use Zil now. zil agents install finds every
agent client on the Mac — Claude Code, Claude Desktop, Cursor, Windsurf, Gemini CLI — and
registers Zil's MCP server with all of them, so handing you a document is something an agent
can just do. No config editing: writes are backed up, atomic and idempotent, a config that
isn't valid JSON is refused rather than clobbered, and the clients that can't be rewritten
safely (Zed's JSONC settings, Antigravity's in-app config) get the exact snippet instead of a
guess. Also in the ZIL menu, and offered once on first launch · the MCP surface goes from
one tool to five: show_document plus read-only desk_status,
desk_windows, desk_layout, desk_doctor — an agent can
see the desk it's drawing on and cannot move a single window · the ZIL menu works again:
clicks on Zil's own dropdown were being swallowed by the same event tap that stops a click on
the console reaching the wallpaper, so picking a theme did nothing · the bar fits a
laptop — it needed 1884 pt and a 13-inch Air has 1470, so the readouts marched over the
app name; every pill now has a floor, surrenders its slack as the desk narrows, and the least
useful readouts stand down rather than overlap · ZIL·TV opens on a different episode each
time · the document pane wears a proper ZIL end-cap · and the calendar card says what
actually happened when access is refused instead of failing silently.
0.1.9
Three faults that only show themselves on a real desk. Waking the Mac no
longer leaves two consoles on screen — a display that comes back under a new identity
during the wake flap is no longer adopted as a second desk, and one that disappears stops
painting instead of lingering · a window still finishing its resize is no longer mistaken
for one that refuses to grow, so flipping layouts quickly stops stranding a terminal
centred in a slot it should fill · and the seam is gone where the elbow meets the
band: a single pixel of ground was landing on the surface, cutting a line across a joint
meant to read as one continuous shape.
0.1.8
An AI pill in the bar. One glance at what your AI tools are burning —
Claude Code, Antigravity and Grok, each detected on its own with nothing to configure.
Every number is read from files those tools already write to your disk: no API calls, no
keys, no credentials. Grok's figures are real dollars, straight from
rift's own records. A provider that isn't installed says so instead of showing
a zero, and Zil refuses to draw a progress bar against a limit nobody published — your
5-hour figure is scaled against your own typical session, and labelled as such.
zil ai returns the same data as JSON for agents.
0.1.7
Zil shows you documents. zil show report.md — or the
show_document MCP tool from any agent — renders a file in a pane tiled beside
the terminal that asked, without ever taking your keyboard. Markdown, diffs, JSON, CSV,
source, images and PDFs, live-reloading as the file changes · ZIL data readouts:
an lcars-chart block in any markdown file draws bar, line, gauge and stat
charts in the live palette · the renderer is
lcars-md, shared across the fleet ·
the pane can reach nothing but the document's own folder — no network, no
file://, and document script cannot run.
0.1.6
Floats ride on top — detached windows (About This Mac, exempted apps)
re-raise above the desk on every focus change, and hovering one surfaces it fully · clicks
on the console never reach the wallpaper (no more surprise desktop reveal) · soft hover
glow + press pulse across the rosette, workspaces, rail and pills · web panels persist
across restarts with close handles everywhere (rail badge · menu · zil panel).
0.1.5
Placement learning is per-axis — a window that refuses a slot's height no
longer teaches a phantom width floor (the Spotify refuse-float loop, diagnosed live
through zil windows and fixed the same hour).
0.1.4
The zil CLI + socket (drive the desk from a terminal or an agent;
zil doctor field report) · NAV rosette moves tiles directionally · stardate,
weather and calendar cards · CPU/SOC/fan thermals · per-window corner radii read from the
WindowServer · placement rules that learn app minimums · desk recovery across sleep, lock
and restarts · Sickbay + Picard themes · single-instance guard.
0.1.2
Workspaces ×9 · tile profiles · hot-reload config with per-machine
profiles · rebindable keys + leader + cheat sheet · web panels from the menu · ✦-drag ·
built-in update check · app icon.
0.1.0
First fleet build: the ZIL console, dwindle + master-centre tiling,
live sensors, ZIL·TV.