Skip to content

Releases: Lugia123/polter

Polter 0.9.1728

Choose a tag to compare

@Lugia123 Lugia123 released this 09 Oct 15:45

Polter 0.9.1728 — 44 commits since 0.9.1684, all of them this project's own.
No upstream merge is in this one.

Screenshots, with annotations an agent can read

Polter takes screenshots now, on macOS and Windows, with one interface and one
set of rules on both.

  • Two ways in, both global. ⌘⇧0 on macOS, Ctrl+Shift+0 on Windows; or
    hold ⌘⇧ (Ctrl+Shift) and click. Either can be changed or switched off.
  • Pick. The screen freezes. The window under the pointer is offered — click
    to take it — or drag any region. A magnifier follows the pointer.
  • Annotate. Rectangle, ellipse, line, arrow, pen, highlighter, text,
    numbered markers, mosaic. Anything drawn can be selected, moved, resized,
    recoloured and deleted, with undo and redo. The toolbar can be dragged.
  • Mosaic cannot be undone by the reader. Every block is one flat colour,
    and the unblurred picture is never written to a file or to the clipboard.
  • Long screenshots. Choose a region, press Long Screenshot, and Polter
    scrolls the page itself and joins the frames until it reaches the bottom.
    Return keeps what has been joined so far; Esc cancels.
  • Where it goes. The finished picture is on the clipboard, for any
    application, and in a file. Save also puts a copy in Downloads. Nothing is
    typed into a terminal until you paste there yourself.
  • What an agent gets. Pasting into a pane sends the file's path, which the
    agent CLI takes as an image, and then the words you wrote on it as text. A
    .json beside every screenshot records each annotation, its position, and
    the window it was taken of — so the agent reads what you wrote rather than
    recognising it from pixels.
  • Agents can take them too, over MCP: list what is on screen, capture a
    display, a window or a region without any interface appearing, take a long
    screenshot, draw on an existing one, and look up what was taken. Settings →
    General → Screenshot has the switch that allows it, the folder, and the mouse
    trigger. Screenshots older than seven days are removed from that folder;
    only files Polter named are touched.

macOS asks for Screen Recording the first time. Windows asks for nothing.

Pasting an image

Pasting a picture into a pane saves it as a file and pastes the path, so an
agent CLI can attach it. Several paths are separated.

Settings

  • Search finds a single setting, not only the section it is in, and opens the
    window on it.
  • No text in the settings and project windows is smaller than the menu font.
  • Drop-downs are as tall as their row, and links are link-coloured.

Fixed

  • A role picked from the menu sometimes did nothing. Choosing a role in a
    fresh tab was refused when you had pressed a key in the last ten seconds,
    when a Ctrl+L or similar had been counted as typed text, or when text had
    been typed and then deleted. A role you pick yourself is now judged by what
    is actually on the input line.
  • d on a group in the chat view answered "only a supervisor may do
    this"
    to the person at the keyboard. You may take any empty group off the
    list. A group with terminals in it is still refused, to everyone.
  • An answer to an agent is one line, whatever was put in it.

What has been checked, and what has not

Checked. Both artifacts are built from a fresh clone of this tag, detached,
with no other tag present — git describe --exact-match in that clone returns
v0.9.1728 and nothing else. The macOS app reports 0.9.1728
(CFBundleShortVersionString, read from the built bundle) and is universal
(lipo -archs → x86_64 arm64). tools/release-check.sh v0.9.1728 prints all
three ok[...] cells. Every one of the 79 ghostty_* symbols the Windows
host loads is exported by the DLLs in the package — read from the package's
own DLLs, with 309 exports seen, so the probe is not the thing that is
empty. The Windows package has all six parts, counted rather than remembered:
polter-host.exe, polter-cli.exe, ghostty-internal.dll, ghostty-vt.dll,
WebView2Loader.dll, share/. The full suite passes with every integrity
check on (5086 of 5115 Zig tests, 29 skipped, none failed; the macOS Swift
tests with it) and all 94 gates are green.

That full run is the only place the unfiltered suite runs, and it took three
passes. The first failed seven macOS Swift tests and the second one; all were
the tests' own — four still expected "Double-Click" for a trigger that had
become a click, and three needed a config file the run does not provide. The
fixes are in this tag and the third pass was on it. During that pass three
documentation files in the working tree had uncommitted edits by someone else;
they are not in this tag.

Run, before this tag. The screenshot interface was gone through on real
Windows machines from packages built out of earlier commits on this line: both triggers, picking, every tool, long screenshots, save, paste into a
pane, and an agent's captures.

Not run. Neither package in this release was started. The macOS app was
built and its version read; the Windows package was built and its symbols and
parts counted. The macOS screenshot interface in its present form, the role
fix and the chat-view fix have unit tests and no run on a real app. On Windows
the six commits after that run, the two fixes among them, were not looked
at on a machine. There
is no Linux build in this release, because nobody has run one.

Install

macOS — the build is unsigned, so Gatekeeper will stop it:

unzip Polter-0.9.1728-macos-universal.zip
xattr -dr com.apple.quarantine Polter.app
mv Polter.app /Applications/

Open it from Finder or the Dock, not from a terminal. If you had granted
Screen Recording to an earlier build, remove Polter from that list and add it
again.

Windows — unzip and run polter-host.exe, keeping everything else in the
zip beside it. SmartScreen will ask you to click "Run anyway".

Polter 0.9.1684

Choose a tag to compare

@Lugia123 Lugia123 released this 04 Oct 10:25

Polter 0.9.1684 — 125 commits since 0.8.1559, all of them this project's own.
No upstream merge is in this one, so the patch number moves by what was
written here.

One settings window

Roles, projects, plugins and the config file each had a window of their own,
and the two platforms did not have the same ones: Windows had no way to manage
a project, and its plugin settings lived in a borderless popup. There is one
window now, the same on macOS and Windows (Settings…), with four sections.

  • Roles — the role library, moved in as it was.
  • Projects — every saved project, what is in it, and what can be done to
    it: open, rename, duplicate, overwrite with the current tab, delete with
    Undo, go back to the previous version. Overwriting a project always keeps
    what it replaced.
  • Plugins — status, settings and a test for each, read and saved through
    the core, so both hosts show the same thing.
  • General — the config file as a form. It reads and writes the file the
    host actually loaded, names each setting in your language, and a config
    error opens the section that can fix it.

Hooks: the CLI says when a turn ends

Polter measured one thing, how long a screen has been still, and a supervisor
had to read the screen to tell "finished" from "waiting on a background task"
from "retrying a network error". A Claude Code started from a role now reports
its turns through hooks: when a turn ended, what it said, and when it failed
on an API error. The screen clock stays on; hooks are the better answer where
there is one. Claude Code only — every other CLI is still watched by its
screen, and a terminal without hooks says so. They work on a Windows machine
without Git Bash.

A supervisor may answer prompts in the terminals it opened

"Let a Supervisor Answer Prompts Here" used to be off for every terminal until
you switched it on. It is now on from the start in a tab or a split a
supervisor opened
— terminal_open, role_launch, a new pane in
terminal_layout — and you can switch it off there. A terminal you started
yourself is as it was: off until you say so, and no tool can switch it on.

What that default opens, said plainly: a supervisor can open a terminal in a
directory and take "Yes, and don't ask again" there, which is a standing
permission for every agent that runs in that directory afterwards. There is no
setting to turn the default off; the per-terminal switch is the way back.

Projects

  • Save as Project and Load Project are one window on both platforms: a
    title that says which it is, in the middle of the screen, the saved projects
    listed, and a search when loading. On Windows this replaces a popup menu at
    the pointer and a one-line box; on macOS the window had no title, opened up
    and to the right of the middle, and could not be searched.
  • Saving over a name that is taken asks first and keeps what it replaced, on
    both platforms, whether you picked the project or typed its name.

Supervising

  • A supervisor's workers sit beside it, in splits of its own tab, even in a
    tab you arranged; a second worker lands beside the first, and a refused
    split says so. role_launch can start a worker in a split and still know
    which role it wears.
  • An agent closing a terminal never puts a question on your screen.
  • Letting a terminal go takes what was waiting about it out of the box, and
    raising a quiet terminal's threshold stops the reports already queued.
  • A terminal you watched by hand is not a lock, and not everybody's.
  • An idle PowerShell or cmd is not a running command.
  • A role leaves the project's own skills and MCP servers alone, and
    polter +launch hands what follows -- to the agent CLI.

Windows

  • Closing the settings window, search or the palette gives the keyboard to the
    terminal on screen now, never to a hidden one and never back to itself.
  • A terminal's scrollbar stays with its own window. It used to be drawn across
    whatever was in front of that window — the settings window, the project
    picker.
  • Show in Explorer selects the project file.

Also

The READMEs say what kind of thing this is in the words people search with,
compare it with tmux, Claude Code sub-agents, Claude Squad and cmux, and say
it is not steipete/poltergeist. The product page plays the new film.

What has been checked, and what has not

Checked. Both artifacts are built from a fresh clone of this tag, detached,
with no other tag present — git describe --exact-match in that clone returns
v0.9.1684 and nothing else. The macOS app reports 0.9.1684
(CFBundleShortVersionString, read from the built bundle) and is universal
(lipo -archs → x86_64 arm64). tools/release-check.sh v0.9.1684 prints all
three ok[...] cells. Every one of the 75 ghostty_* symbols the Windows host
loads is exported by the DLLs in the package — read from the package's own
DLLs, with 305 exports seen, so the probe is not the thing that is empty. The
Windows package has all six parts, counted rather than remembered:
polter-host.exe, polter-cli.exe, ghostty-internal.dll, ghostty-vt.dll,
WebView2Loader.dll, share/. The full Zig suite passes with every integrity
check on (5015 of 5044, 29 skipped, none failed) and all 88 gates are green.

That full run is the only place the unfiltered suite runs, and it earned its
keep: its first pass on this release failed one test, menu labels reach the palette, which had been red on main for three days without anything
compiling it. The fix is in this tag, and the run was repeated on it.

Run. The Windows package, unzipped as shipped, on Windows Server 2022 at
150% scaling: it starts, its own log says the host and ghostty-internal.dll
are a pair from this commit and loaded OpenGL 4.5, the heartbeat keeps
counting with no panic line, the window draws a PowerShell prompt, and
Agents → Terminal Conversations opens its tab with polter-cli.exe running in
it. That machine's own OpenGL refuses a 4.3 core context, so it was started
with GALLIUM_DRIVER=llvmpipe; "the program works" is what was read, not
"that machine works out of the box".

The project picker on Windows was gone through on the same machine before the
tag, from a package built out of the same tree: both titles, centred on the
work area, search, loading by click and by keyboard, the three ways to cancel
with the keyboard back in the terminal each time, saving under a new name,
the overwrite question on a taken name and the previous version it leaves,
saving before closing a tab, and the IME in the search field.

Not run. The macOS app in this release was built and its version read; it
was not launched. The macOS Swift unit tests were not run for this release —
they start a test host on the screen of the machine that builds it. The macOS
project picker's title, position and search were type-checked and built, and
not looked at on a running app. The new default for a supervisor answering
prompts has unit tests and no run on a real app, on either platform. On
Windows: other scaling factors and a second monitor; a picker window dragged
to a monitor with another DPI is not laid out again; high contrast. There is no
Linux build in this release, because nobody has run one.

Install

macOS — the build is unsigned, so Gatekeeper will stop it:

unzip Polter-0.9.1684-macos-universal.zip
xattr -dr com.apple.quarantine Polter.app
mv Polter.app /Applications/

Open it from Finder or the Dock, not from a terminal.

Windows — unzip and run polter-host.exe, keeping everything else in the
zip beside it. SmartScreen will ask you to click "Run anyway".

Polter 0.8.1559

Choose a tag to compare

@Lugia123 Lugia123 released this 27 Sep 15:40

Polter 0.8.1559 — 845 commits since 0.7.714.

Of those, 95 are this project's own, 505 come from upstream Ghostty, and the
rest are merges. The patch number jumps from 714 to 1559 for that reason: it
counts everything this fork's history carries that upstream's fork point did
not, and a large upstream merge lands in it all at once.

A role can now actually switch a CLI's skills off

A role says which of an agent CLI's own skills and MCP servers it keeps. It
had been writing the switches for months and they were reaching almost
nothing, in two separate ways.

  • The inventory could not see half of what was installed. Skills and
    plugins synced from claude.ai sit one folder deeper than local ones —
    ~/.claude/skills/synced/<account>/<name>/ — and the walk stopped a level
    above. Anything the inventory never lists, a role can never switch off, and
    nothing said so.
  • Blocking a call is not taking it out of the listing. The four ways to
    turn a skill off are not interchangeable: --disallowedTools refuses the
    call and leaves the skill in the list the agent is given, so its description
    is still injected and the agent still answers that it has it. Roles now use
    the switches that remove rather than refuse — enabledPlugins for a plugin
    whose every item is off, disableBundledSkills for the ones Claude Code
    ships inside its binary, skillOverrides for the rest — and fall back to
    refusing only where no removing switch exists.

Measured end to end on a supervisor role: the skill listing the agent receives
goes from 128 to 10.

One case has no lever and is documented rather than claimed: a plugin synced
from claude.ai ignores enabledPlugins under either spelling, so its skills
can only be refused, not removed.

Projects keep what was on screen

A project's panes write their scrollback to disk as they run, not only when the
project is saved, and a pane rebuilt by window restoration comes back with its
project's history instead of losing it to the next autosave. A reopened pane
opens on what it was showing, with a line saying where that ends. The Windows
host writes the journal too, so both hosts do.

macOS

  • Close Split is in the File menu and in the terminal's right-click menu.
    Splitting had been in both for as long as there have been splits; closing one
    was reachable only as Close — ⌘W, whose name says nothing about splits, two
    groups away from the four rows that make them. The row is greyed when there
    is no split, because close_surface on a lone pane closes the tab and a row
    named after the split must not quietly do Close Tab's job.
  • The menu bar looks for a terminal instead of hoping the key window is one.
  • A font family nobody has is said out loud rather than only logged.
  • The language picker stops promising a restart it cannot deliver.

Windows

  • The host reads the command line, and its own flags got out of the way of the
    core's.
  • It loads its config in one place, so the two paths cannot disagree about how.
  • The split divider draws a one-pixel line inside the six pixels it still
    catches the mouse in, and it holds values, so nothing it stores can reach a
    pane.
  • The middle button reaches the core.
  • Projects can be saved and opened.
  • A first tab that cannot be created says why, in a box, before the process
    gives up.
  • A close the host logged as alt-f4 was usually not a key at all.

Also

Naming somebody in a group reaches them, and a worker naming a worker goes
through that worker's supervisor. A name set on purpose outranks the one the
program keeps announcing. The skills taught group_post without the parameter
that makes it arrive.

What has been checked, and what has not

Checked. Both artifacts are built from a fresh clone of this tag, detached,
with no other tag present — git describe --exact-match in that clone returns
v0.8.1559 and nothing else. The macOS app reports 0.8.1559
(CFBundleShortVersionString, read from the built bundle) and is universal
(lipo -archs → x86_64 arm64). tools/release-check.sh v0.8.1559 prints all
three ok[...] cells. Every one of the 69 ghostty_* symbols the Windows host
loads is exported by the DLLs in the package — read from the package's own
DLLs, with 299 exports seen, so the probe is not the thing that is empty. The
Windows package has all five parts, counted rather than remembered:
polter-host.exe, polter-cli.exe, ghostty-internal.dll, ghostty-vt.dll,
share/. The full Zig suite passes (4885 of 4914, 29 skipped, none failed),
the macOS Swift suite passes (444), and all 88 gates are green.

Run. The Windows package was uploaded to a Windows Server 2022 machine,
unpacked there from the zip, and started from that unpacked folder, then taken
through four criteria rather than one: the process lives; its own log shows
both DLLs loaded, the host and ghostty-internal.dll reported as a pair from
the same commit, all four resource directories found, ticks climbing and no
panic; a screenshot shows the window drawn with a PowerShell prompt in it; and
Agents → terminal conversations was opened, which drew its groups, tasks
and members panes — that tab is what runs polter-cli.exe, and it was seen
running as its own process. The fourth criterion is there because a package
missing that file once passed the first three.

Not run. The macOS app has not been started from this exact package. The
only Mac here is running the Polter this was written in, and a second instance
of a Release build is refused by design — it carries the user's own bundle id
and would restore and overwrite their window state. The zip is therefore built
and checked, not launched. No Linux package: there is no machine here to run
one on.

Installing

macOS — the app is ad-hoc signed and not notarised, so Gatekeeper will
refuse it until the quarantine flag is removed:

unzip Polter-0.8.1559-macos-universal.zip
xattr -dr com.apple.quarantine Polter.app
mv Polter.app /Applications/

Windows — unpack the zip and run polter-host.exe. Keep all five files
together: the DLLs are loaded by name at startup, and polter-cli.exe is what
the group-chat and role-launch tabs actually run.

Polter 0.6.656

Choose a tag to compare

@Lugia123 Lugia123 released this 13 Sep 17:10

A send that types at a human pace, and a defect that turned out not to be ours.

What changed

terminal_send waits before pressing return. The text and the return were
always two separate acts, but they left back to back and arrived at the other
end inside a single read — and at least one agent CLI treats that as a paste,
which is inserted rather than run. The gap is drawn fresh from a range each
time: 600–1000 ms on Windows, 200–1000 ms elsewhere.

It is implemented as a termio message and an xev.Timer on the io thread, not
a sleep. A sleep would have stopped the whole event loop — including the
quiescence sampler that reports whether a terminal has gone quiet, so a delay
added for supervision would have blinded supervision.

What has been checked, and what has not

Checked. Clean build from a fresh detached checkout at the tag
(release-check.sh, three cells). 4201/4224 tests, 86/86 steps. macOS bundle
reports 0.6.656 and lipo says x86_64 arm64. Windows package contains all
five files, counted rather than remembered. Symbol comparison: the host wants
43, the two DLLs export 273, nothing missing — and have was confirmed
non-empty first, because a probe that cannot read PE exports returns zero and
looks like success.

Run. The Windows package was unzipped and started on a real machine, and
taken through four layers: process, its own log (no panic, ticks climbing),
a screenshot showing the window with PowerShell in it, and — the layer that
matters — the terminal-conversations view opened and rendered a real session's
history. That last layer is there because a release once passed the first three
while missing a file.

The repair itself was verified on the same machine by an A/B pair with one
variable moved: same CLI, same version, same three-line message, one build with
the delay and one without. Without it the text sat unsubmitted; with it the
receiving agent answered.

Not run. The macOS package was built and inspected but not launched from
its packaged form this round. Linux is not published, because no machine ran it.

Also in this release

Three records of the investigation behind that repair, kept with their
evidence rather than summarised. Six root causes were named and withdrawn
before the seventh held; each is preserved with the reading that killed it,
because every one of them had been believed. Two probes used along the way are
included under tools/ so the next person does not rebuild them — one of them
has only ever been syntax-checked, and says so in its own header.

Installing

macOS: the app is ad-hoc signed and not notarised.

xattr -dr com.apple.quarantine /Applications/Polter.app

Windows: unzip and run polter-host.exe. All five files must stay together —
polter-cli.exe is what the conversations view actually runs.

Polter 0.6.652

Choose a tag to compare

@Lugia123 Lugia123 released this 11 Sep 07:51

A terminal that remembers what you ran in it.

Saving a tab as a project keeps its split layout, each pane's directory
and title, and — the part this release is actually about — the commands
you ran in that pane
, so a project opened tomorrow answers the up-arrow
with your own work rather than with every other terminal's history mixed
together.

Capture and restore are deliberately two different mechanisms. Capture is
passive: a private OSC carries each command out of the shell's preexec
hook and Polter writes it to a per-pane file. Nothing about your shell's
own history changes, so a brand-new terminal behaves exactly as it does
today
. Restore is active and only happens for panes opened from a
project: bash and zsh are handed that file as their HISTFILE, and fish
has its integration replay the lines into a named history session.

Anything that can write to a terminal can write an OSC — cat of a file,
a build log, output from an ssh session. So Polter gives each surface a
token, hands it to the child process, and drops any command-capture
sequence that cannot produce it. That does not stop code already running
as you; it stops untrusted output, which is where the line belongs.

Command history capture is off by default. Turn it on with
shell-integration-features = history.

Also in this release: the shortcuts window and the interface around it are
in Chinese as well as English; the task panel's scrolling no longer runs
backwards; poltergeist_layout works on macOS.

What has been checked, and what has not

Checked. zig build test is 4199/4222 with 23 skipped. Both packages
build clean from a fresh detached checkout of this tag. For Windows, every
ghostty_* symbol the host imports (43) is exported by the two DLLs
shipped beside it (273 exported in total) — the check that the host and
the core came from the same tree.

Run. The Windows package was unzipped and started on a real Windows
machine from the packaged form. It draws its window, the shell inside is
PowerShell, its own log shows no panic and a heartbeat that keeps
counting, and the terminal-conversations view opens and renders —
which is the part that requires polter-cli.exe to be present and
working. The macOS build is installed and running on the machine it was
built on.

Not run. Nobody has yet saved a project and loaded it back in a real
window and pressed the up-arrow. Every piece of that path has tests, and
the shell side was verified end to end against bytes from real zsh, bash
and fish sessions, but the whole thing has not been exercised by a person
in a running application.

Not implemented on Windows, and visible as an absence rather than an
error.
The project feature has no menu there yet — it exists in the code
and has no entry point, so there is nothing to click. Command capture does
not work on Windows at all: PowerShell has no preexec hook, and adding one
means replacing functions that prompt themes also replace, which is
tracked separately. cmd.exe is not supported and will not be — it has no
per-instance startup hook and no interface for reading or writing its
history.

Linux is not published here. No machine ran it.

Installing

macOS — the build is ad-hoc signed and not notarised, so Gatekeeper
will refuse it until you clear the quarantine flag:

unzip Polter-0.6.652-macos-universal.zip
xattr -dr com.apple.quarantine Polter.app
mv Polter.app /Applications/

Windows — unzip and run polter-host.exe. All five files must stay
together: polter-host.exe, polter-cli.exe, ghostty-internal.dll,
ghostty-vt.dll and share/. The two DLLs are loaded by name at startup,
polter-cli.exe is what the conversations tab actually runs, and share/
holds the skills and plugins.

Polter 0.5.497

Choose a tag to compare

@Lugia123 Lugia123 released this 07 Sep 06:40

Polter is a terminal — a fork of Ghostty —
that lets the agent in one of your tabs look after the agents in the others. That
tab's agent becomes the supervisor: it can see how long each of the other tabs
has been sitting still, read their screens, type into them, open new ones, hand out
tasks that survive a restart, and talk to them in a group chat.

Polter itself never judges. It measures one thing — how long has this screen been
unchanged
— and carries messages. Whether a still screen means "stuck" or
"thinking hard" is a question it refuses to answer; that call belongs to the
supervisor.

Everything is local. A unix socket in your own runtime directory, and nothing else:
no account, no telemetry, no API key, no network call of its own. Polter never talks
to a model — the thinking is done by the agent CLI you already installed.

See the README
(中文) for what it gives
you and how to drive it.

What "0.5.497" means

The branch gives 0.5; 497 is how many commits are this fork's own, counted from
the point it left Ghostty. So the patch number always goes up and never means
anything else. Built from 05917b6ee.

Since 0.5.447

Fifty commits. The ones a user will notice:

  • Windows no longer defaults to cmd. cmd is the one shell with no shell
    integration to inject, so the supervisor could not tell where a command began or
    ended. Windows now picks PowerShell.
  • The chat tab works on Windows. It was dead 146ms after it appeared. Part of
    the fix is that a package missing polter-cli.exe now says so instead of
    showing a blank pane — which is how the packaging mistake in this very release
    got caught before it shipped.
  • A tag no longer tells two stories. The same commit reported 0.4.484 to
    whoever tagged it and 0.1.484 to whoever checked that tag out, because the
    version came from the branch and git checkout <tag> detaches HEAD.
  • Both READMEs were rewritten after six rounds of readers who had not seen the
    project before, and the tool reference moved out into docs/tools.md.

Downloads

macOS Polter-0.5.497-macos-universal.zip — universal (Apple Silicon + Intel), macOS 13+
Windows Polter-0.5.497-windows-x64.zip — x64

Linux builds are not published here. The GTK app builds, but nobody has run this
release on it, and shipping a binary nobody has started is not something to do
quietly. Build from source if you want it.

macOS: these builds are unsigned

There is no Apple Developer certificate behind this, so the app is ad-hoc signed
and not notarised
. Gatekeeper will refuse it until you say otherwise:

unzip Polter-0.5.497-macos-universal.zip
xattr -dr com.apple.quarantine Polter.app
mv Polter.app /Applications/

Then open it once from Finder or the Dock. From the Dock, not from a terminal —
the two have different PATHs, and the provisioning plugin that installs the
supervisor's skills looks for your agent CLI on PATH.

Windows

Unzip anywhere and run polter-host.exe. Everything in the folder must stay next to
it: the two DLLs are loaded by name at startup, polter-cli.exe is what the chat tab
runs, and the skills the supervisor reads live in share/. Unsigned, so SmartScreen
will want a "Run anyway".

What has been checked, and what has not

Said plainly, because "it built" and "it works" are different claims and only one of
them is true for each platform here.

Checked. Both platforms compile clean from this commit. The full Zig test suite
passes (4096 of 4117, 21 skipped). The tag was checked in a fresh clone at detached
HEAD — the state anyone who runs git checkout v0.5.497 is in — and builds there.
For the Windows build, every one of the 33 entry points polter-host.exe resolves at
startup is present in the export tables of the two DLLs shipped beside it; the
failure this catches is a host and a core built from different trees.

Run — Windows. The archive was unzipped on a Windows 11 machine and started from
its packaged form. The program's own log reports the host and ghostty-internal.dll
are a pair, both from 05917b6ee. The window opens with a working shell —
PowerShell, not cmd — and the chat tab opens and renders its group list,
members and messages. No panic in the log; the main loop's heartbeat kept climbing
for the length of the session.

Not run — macOS. The app was built and inspected (universal, ad-hoc signed,
CFBundleShortVersionString reads 0.5.497), but not launched from the archive.

The Windows port is younger than the macOS one and is not at parity —
windows/AGENTS.md says what is and is not there.

Polter 0.5.447

Choose a tag to compare

@Lugia123 Lugia123 released this 04 Sep 06:07

Polter is a terminal — a fork of Ghostty —
that lets one of your tabs look after the others. One tab becomes the
supervisor: it can see how long each of the other tabs has been sitting
still, read their screens, type into them, open new ones, hand out tasks that
survive a restart, and talk to them in a group chat.

Polter itself never judges. It measures one thing — how long has this screen
been unchanged
— and carries messages. Whether a still screen means "stuck"
or "thinking hard" is a question it refuses to answer; that call belongs to the
supervisor.

Everything is local. A unix socket in your own runtime directory, and nothing
else: no account, no telemetry, no API key, no network call of its own. Polter
never talks to a model — the thinking is done by the agent CLI you already
installed.

See the README
(中文) for what it
gives you and how to drive it.

What "0.5.447" means

The branch gives 0.5; 447 is how many commits are this fork's own, counted
from the point it left Ghostty. So the patch number always goes up and never
means anything else. Built from 22446b64a.

Downloads

macOS Polter-0.5.447-macos-universal.zip — universal (Apple Silicon + Intel), macOS 13+
Windows Polter-0.5.447-windows-x64.zip — x64

Linux builds are not published here. The GTK app builds, but nobody has run
this release on it, and shipping a binary nobody has started is not something
to do quietly. Build from source if you want it.

macOS: these builds are unsigned

There is no Apple Developer certificate behind this, so the app is ad-hoc
signed and not notarised
. Gatekeeper will refuse it until you say otherwise:

unzip Polter-0.5.447-macos-universal.zip
xattr -dr com.apple.quarantine Polter.app
mv Polter.app /Applications/

Then open it once from Finder or the Dock. From the Dock, not from a
terminal
— the two have different PATHs, and the provisioning plugin that
installs the supervisor's skills looks for your agent CLI on PATH.

Windows

Unzip anywhere and run polter-host.exe. The two DLLs and share/ must stay
next to it — the DLLs are loaded by name at startup and the skills the
supervisor reads live in share/. Unsigned, so SmartScreen will want a
"Run anyway".

What has been checked, and what has not

Said plainly, because "it built" and "it works" are different claims and only
one of them is true here.

Checked. Both platforms compile clean from this commit. The full Zig test
suite passes (4090 of 4109, 19 skipped). For the Windows build, every one of
the 33 entry points polter-host.exe resolves at startup is present in the
export tables of the two DLLs shipped beside it — the failure this catches is
a host and a core that were built from different trees.

Run. The Windows archive was unzipped on a Windows 11 machine and started
from its packaged form: the window opens, a shell comes up in it, and text --
including CJK -- renders correctly. It was left running for over a minute with
no error in its log.

Not run. The macOS app was built and inspected, not launched from the
archive.

The Windows port is younger than the macOS one and is not at parity —
windows/AGENTS.md says what is and is not there.