ZIL
The console tiling window manager for macOS
Native Swift Developer ID · Notarized SIP stays on macOS 26

Your windows tile themselves and never overlap — every one gets a slice, and the slices always add up to the whole screen. Two ways to cut it, drag-to-resize bars between every tile, focus-follows-mouse — wrapped in a working ZIL console: the frame around your windows lists them, switches workspaces, and reads out live CPU, memory, Wi-Fi and SSD telemetry. It is chrome that does something.

The surface fills the gaps — windows sit in rounded cut-outs, corners always colour-matched

On the bridge

Zil running a real desk — a 49″ Odyssey G9 at 5120×1440: master-centre layout, the rail listing the crew with the NAV rosette below, stardate · weather · temperature in the bar, sensors live in the frame.

Zil tiling a 49-inch super-ultrawide: ZIL frame around tiled apps with live telemetry
Click for full size (3840×1080)

In motion

The same desk, running: windows arriving and taking their slots, the rail keeping the crew in order, the sensors breathing in the frame. Silent, and it just loops.

Silent loop · the full 5120×1440 desk, 32:9

Download

Zil for macOS

The window manager and the console
Get Zil 0.1.79
Apple silicon · macOS 26+ · 8310 KB
sha256 f80e7a4894494337702e0465604a698fa285b20841f4c17ec2046c7fe2d1ba91
# unpack, install, launch ditto -x -k ~/Downloads/Zil-0.1.79.zip /Applications/ open /Applications/Zil.app

Signed with a Developer ID and notarized by Apple — Gatekeeper opens it without warnings. Zil needs the Accessibility permission to move and resize other apps' windows; it never asks for anything else, and granting it on first launch is the whole setup. First run writes ~/.config/zil/zil.toml and takes over from there.

ZIL console for Omarchy

Linux · the console only
Get the console
Arch + Hyprland + quickshell · console v0.2.0 · 104 KB
console-sha e331934c5944b955815f084def9f35b077e4434af5f1d999c6d67cad722e4a49
# unpack and install — it replaces Omarchy's bar tar xzf ~/Downloads/lcars-console-0.2.1.tar.gz cd lcars-console-0.2.1 && ./scripts/install.sh

A quickshell bar plugin, not a window manager and not a port — Hyprland keeps doing the tiling. Needs Omarchy with quickshell, Hyprland and fontconfig. The seven ship palettes are generated from Zil's own Swift at build time, so the two consoles cannot drift apart. 0.2.0 brings ZIL·DOC to Linux: the same document pane, and the same show_document MCP tool for your agents. What crossed over, and what did not →

Systems

Bento tiling

Two layouts. Dwindle halves a neighbour with each new window, cutting whichever way keeps tiles squarest — no decisions from you. Master-centre holds your real work in the middle of a 32:9 desk with everything else in flanking stacks. Drag the orange bars; neighbours follow. See both layouts run →

Shapes and priorities

Click the layout pill for a card of desk shapes that fit the windows you have open — 2 | 1 1 | 2 is two stacked left, two wide centre columns, two stacked right — and pick one. Focus windows (terminals, editors) take the centre; ambient ones (chat, music, ZIL·TV) take the sides. ⇧‑click two rail rows to trade tiles; ⇧‑click a row then a workspace number to give that app its own workspace.

Nine workspaces

Per display, instant switching — no animation tax. ⌃⌥⌘1–9 to go, ⇧ to move a window, a clickable 1–9 strip on the rail. Layouts persist per workspace.

Tile profiles

Dial in an arrangement, save it under a name, recall it exactly — windows matched by app identity, so profiles survive relaunches and reboots.

Ship themes

Daystrom, Enterprise-D, Enterprise-E, Titan, Voyager — one keystroke rotates the whole console. Red alert mode pulses every surface in phase.

Live sensors

Per-core CPU bars, memory pressure, Wi-Fi signal, SSD free space — in the frame itself. The console is instrumentation, not wallpaper.

Web panels

Chromeless site tiles with persistent logins — Claude, Google Messages — plus ZIL·TV, a YouTube tile with volume and playlist hotkeys, playing fan-made loops streamed from YouTube — swap in your own list any time.

Focus follows mouse

Point at a tile, it's focused. No click, no raise-flicker, and it politely stands down while menus are open or you're dragging.

Self-healing

A hung app never hangs the desk — every app gets its own actor thread. Drifted windows are guided back; stubborn ones get circuit-broken, not fought.

Config as text

One TOML file, hot-reloaded, with per-machine profiles: your 49″ desk and your 13″ Air each get fitting gaps and chrome from the same config.

Enterprise·D Views

A web panel Zil ships with rather than one you add: a Galaxy-class starship holding station at a starbase, drawn live in the tile. Not a game you play — a ship you keep half an eye on while you work. Open it from PANELS in the menu bar; ⌃⌥⌘W closes it like any other panel.

Looking aft across the starship's saucer toward the lit nacelles, a ringed planet filling the sky behind, with ZIL view-selector pills along the top of the panel
Aft over the saucer, mid red alert — click for full size

The pills along the top move the camera. AFT and AFT 2 look back across the saucer, FWD runs up the bow, NACELLE sits alongside the warp engines, and EXTERIOR pulls out to the whole ship. Beside them: mute, five volume steps, and VOX for the bridge crew. When the ship comes under attack the desk answers with it — the ZIL borders flush red, and stand down again when the shooting stops.

The crew only speak to a signed-in session. Sign in to Google inside the panel and the bridge starts talking; leave it signed out and you still get engines, weapons and music, just no voices. One thing to know going in: a panel is a WebKit view rather than Safari, so passkeys and saved-password autofill cannot reach it — verifying on another device is the way through. The session then lives in that panel's own store, so it is once, not every launch.

Two ways to fill a screen

Both layouts guarantee the same thing — every window gets a slice, and the slices add up to the whole screen. They disagree about whether every window deserves an equal shot at the middle. Open a few and watch.

Dwindle

Each new window halves its neighbour and takes the far side, cutting whichever way keeps tiles squarest. No decisions from you — but the window you care about shrinks every time.

Master-centre

Your real work holds the middle column and keeps it. Everything else alternates into two flanking stacks, and once those fill, new windows join the centre.

Flip the desk to 32:9 and dwindle's rule works against you — the boxes stay wide, so the cuts stay vertical and you get ever-thinner columns. That is why Zil opens any desk wider than 2.2:1 in master-centre, and why ⌃⌥⌘T exists.

ZIL on Omarchy

Zil is macOS only, and on Linux most of it would be dead weight: roughly two fifths of the code exists to fight the Mac — the Accessibility API, the layout tree, code signing — and Hyprland already tiles. So the console crossed over and the window manager did not. This is a quickshell bar plugin for Omarchy (Arch + Hyprland), not a port and not a window manager.

A full Omarchy desk under the ZIL console: swept elbow and window rail down the left with the focused window lit, workspace strip, NAV rosette and sensor readout, and a browser, terminal, Claude Code and the ENTERPRISE·D VIEWS panel tiled by Hyprland
The same console, drawn by quickshell on Hyprland — click for full size

You get the swept elbow, the rail listing the windows on the current workspace with the focused one lit, the 1–9 strip, the NAV rosette, the ambient CPU and memory readout, and the filled band drawn beneath the windows so it shows through the tiling gaps. The seven ship palettes are generated from Zil’s own Swift at build time rather than copied, so the two can never drift apart, and it ships Antonio, the same display face, under the SIL Open Font License. ZIL·TV comes too, reading the same playlist and opening as a browser window Hyprland tiles like any other.

What it does not bring is Zil’s layout engine. Hyprland has dwindle and five master orientations of its own; the console drives those instead of reimplementing them. It changes the bar and the theme, not how your windows are tiled.

Console 0.2.0. The document surface crossed over: ZIL·DOC on Hyprland is the same lcars-md viewer Zil ships, served from 127.0.0.1 instead of a private zil:// scheme, with a small bridge standing in for the WebKit message handler. An MCP server exposes the one tool that matters, show_document, so an agent on Omarchy puts a plan or a diff beside your terminal exactly as it does on the Mac. Also in this cut: red alert, the rail carrying both sections, ZIL·TV opening at Zil’s volume rather than YouTube’s, and the palette ramp no longer sitting one theme behind.

The source lives in the Zil repo under omarchy/, with a README that records what was kept, what was dropped, and why. Download it up top, beside the Mac build →

A screen your agents can use

An agent that has just written you a plan, a diff, or a table of results has nowhere good to put it. Terminal scrollback is a bad place to read a table and a worse place to read a diff, and opening a browser takes your keyboard away mid-task.

So Zil gives it a pane. show_document renders a file tiled beside the terminal that asked — ZIL-styled, live-reloading as the file changes, and it never steals focus. Your agent keeps working; you read at your own pace.

Plans and outcomes

Markdown with real headings, tables and syntax-highlighted code — plus diffs, JSON, CSV, source, images and PDFs. An lcars-chart block turns numbers into a bar, line, gauge or stat readout in the live palette.

See the desk, and change it only when asked

show_document puts a file on screen. desk_status, desk_windows, desk_layout and desk_doctor let an agent see the desk it is drawing on. desk_arrange rearranges your windows when you ask it to, and desk_undo puts them back exactly.

Nothing to set up

Zil is just an app. The first time it starts it asks once — let the AI agents on this Mac use Zil? — and a yes connects Claude Code, Claude Desktop, Cursor, Windsurf and the Gemini CLI, backing up each file first. It keeps them connected when Zil moves or updates. Change your mind any time under ZIL › Agent support.

The pane is a hardened WebKit view served only from a private zil:// scheme: no network, no file://, and script inside a document cannot run. An agent can show you a document; it cannot use one to reach anything else. Every verb also speaks --json, and the exit codes are API — 0 ok, 2 bad command, 3 not running, 4 refused — so a headless orchestrator can read the result instead of scraping it.

SLIPSTREAM

Every Claude Code session on the Mac in one ZIL tile, a tab each (it was called MULTI·TERM until 0.1.66). Not a raw terminal: a readout of what each agent is saying and doing — its messages, its tool calls, its edits with +N −M and the diff one click away — and a way to answer it. Sessions live in holders that outlive Zil itself, so an update or a crash never takes them with it.

SLIPSTREAM: twelve agent tabs across the top, one agent's stream in the middle with markdown, a numbered list and a copyable code block, the FILES drawer showing the project tree on the right, and the HAIL bar with its CLIP readout along the bottom

Read along

Markdown, tables and syntax-coloured code as the agent writes them. Every fenced block carries a ⧉ COPY header — one click takes the whole block, fences and all nesting handled — and every inline command is a click to copy.

HAIL

Answer from the bar at the bottom, typed or spoken, with the agent's own slash commands in reach. Paste a long document and the agent gets a file, not a wall of text; the CLIP strip shows what you are about to paste — and turns amber when the clipboard is stale.

Review

Click a line in an agent's diff, write a note. Notes gather in a tray and go back as one numbered review, each with its file and line — found in the file as it is now, never guessed.

Files

Pull the project out from the header's end cap (⌘⇧E): hidden files shown, build output kept out by the project's own ignores, the agent's edits marked. New file in a click; ⌥-click hands a path to the agent.

Survives a restart

A reboot, a flat battery, a macOS update at 3 a.m. — Zil remembers which sessions went down together and offers them back as one LOST IN RESTART · RESUME ALL. The conversation resumes where it was.

The bridge

ZIL·BRIDGE is the fleet at a glance: triage of every agent that needs you, background work (and which agents lost their watchers), context and memory per agent, and each session's file. Its rail blocks are lamps and switches.

SLIPSTREAM with its FILES drawer beside ZIL·BRIDGE: control pads for twelve agents, context and memory rings, a context bar for every agent with the fullest in amber, and the selected agent's session file with REVEAL TRANSCRIPT, COPY SESSION ID and END
SLIPSTREAM and ZIL·BRIDGE side by side — click for full size

One lobby for every Mac you own

SLIPSTREAM also shows the agent sessions running on your other Macs, as tabs you open read-only and follow live. Its + lists each machine you've added, then that machine's sessions, so you pick the ones you want instead of getting all of them. Zil finds the machines over Tailscale; add one with zil remote hosts add <name>.

What it needs

Tailscale on each machine, signed in to the same tailnet, and Zil on each Mac. Remote Login (SSH) with your key is the fastest path; without it, Zil uses its own keyless, read-only channel.

What it serves

Each Mac serves its sessions only on its Tailscale address, only to you (every connection's owner is checked with tailscale whois), and read-only. zil remote serve off turns it off and keeps it off.

What it never does

Listen on your LAN or the internet. Accept anyone but you. Let a remote viewer type into a session.

Hotkeys

Every Zil shortcut starts with all three of the first ones held together — ⌃⌥⌘, one chord your other apps almost never claim. Adding ⇧ gives the same key its second meaning: ⌃⌥⌘J moves your focus to the next tile, ⌃⌥⌘⇧J moves the window there instead. If you would rather hold one key than three, Caps Lock can be remapped to send the whole chord.

⌃⌥⌘ T / R / Gtoggle layout · retile · cycle gaps (full / half / off)
⌃⌥⌘ J / Kfocus next / previous — ⇧ swaps instead
⌃⌥⌘ 1–9go to workspace — ⇧ moves the window there
⌃⌥⌘ ⇧S / ⇧Rquick-save / recall a tile profile
⇧-click row, rowtrade two tiles from the rail
⇧-click row, 1–9move the window there and assign its app that workspace
click the layout pillpick a desk shape — 2 | 1 1 | 2, 1 | 4r | 1 …
⌃⌥⌘ ] / Anext ship theme · red alert
⌃⌥⌘ Spacenext wallpaper
⌃⌥⌘ X / Wfloat ⇄ tile this app · close window
⌃⌥⌘ V / PZIL·TV · web panels

Every binding is also in the menu-bar console, grouped ZIL-style. A remappable Hyper key is on the roadmap.

Wallpapers

Five starship desktops. They live here, not in the app — downloading Zil stays about 3 MB whether you want these or not, and you take only the ones you like.

Zil already cycles a folder of them. Put them where it looks and it will pick them up:

mkdir -p ~/Pictures/Zil && cd ~/Pictures/Zil
curl -fsSLO "https://zil.daystra.com/wallpaper/{enterprise-d,enterprise-e,sensor-1,sensor-2,vortex}.jpg"

Then set the rotation in ~/.config/zil/zil.toml — manual changes only when you ask (⌃⌥⌘B), or give it a number of seconds to cycle on its own:

[wallpaper]
dir = "~/Pictures/Zil"
cycle = "manual"          # or cycle = "300" for every five minutes

Config

You probably never need this. The ZIL menu handles the day-to-day — theme, gaps, tile profiles, web panels, agent support, ZIL·TV, updates — and writes your choices back to the file itself. The file is here for the things a menu is bad at: per-machine profiles, and rules that pin an app to a workspace or float it on sight.

One file. Saving it reflows your desk in half a second; an invalid file is refused and the last good one stays live. Zil writes its own changes — theme, TV, exemptions — back into it, preserving your comments.

# ~/.config/zil/zil.toml
[theme]
name = "Daystrom"          # Enterprise-D · Enterprise-E · Titan · Voyager

[gaps]
inner = 9
outer = 18

[[rule]]
bundle = "com.apple.iCal"
action = "workspace 3"

[[profile]]                  # the 13-inch laptop gets tighter chrome
match  = { display_count = 1 }
gaps   = { inner = 5, outer = 10 }
chrome = { side_rail_width = 118 }

Ship's log

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.

Straight answers

Does it disable SIP or inject into system processes?
No — that is the point. Zil is an ordinary signed app using the Accessibility API, like a very fast colleague dragging your windows. Managers that promise per-app transparency or shadow removal do it by injecting into Dock.app with SIP partially off; Zil refuses that trade. That is a real cost, not a slogan: the window shadow you see against the ZIL surface could be removed the injected way, and is not.
What does it need?
macOS 26 on Apple silicon, and one Accessibility grant on first launch — that is the only permission it cannot work without. Calendar is optional and asked for only if you open the events card. No kernel extensions, no scripting additions, no helper daemons you didn't ask for.
Is my window data leaving the machine?
No. Nothing about your windows, apps or layout is ever sent anywhere. Zil does make a few connections, and they are all listed: it checks zil.daystra.com for a newer version (and downloads from there when you ask it to update); if you set a zip code it asks Open-Meteo for the forecast; and the web panels and ZIL·TV you open are ordinary WebKit views talking to those sites. One more is off unless you turn it on — [ai] claude_live makes a single call to Anthropic's usage endpoint reusing the token Claude Code already stored. Otherwise the AI figures are read from files on your disk.
Early software?
Still young, but no longer new — 0.1.13, and it has been the daily driver on this fleet's desks since 0.1.0. An automated smoke suite (restore, drag-resize, workspaces, profiles, hung-app resilience) gates every release, and updates now install themselves after checking their own checksum, signature and notarization.

A fan project

Zil is an independent, fan-made window manager, built out of affection for the look of the computer interfaces in Star Trek. It is not affiliated with, endorsed by, sponsored by, or approved by Paramount Global, CBS Studios, or any other rights holder.

Star Trek, LCARS, and related names and marks are trademarks of their respective owners, referred to here only to describe the design language this project pays tribute to. No claim of ownership is made over them, and no artwork, audio, or other material from the shows is redistributed with the app.

ZIL·TV plays fan-made ambience and loop videos that live on YouTube, published there by the people who made them. Zil ships nothing but a list of video IDs and embeds YouTube's own player — no video is bundled with the app, re-hosted, or downloaded, and playback happens on YouTube's terms. Those videos belong to their creators, not to this project. Point it at your own list any time from ~/.config/zil/zil.toml.

Zil is given away free and is not sold. The interface is an original implementation of that visual style, written from scratch.