Releases: gcrft123/tailr
Releases · gcrft123/tailr
Release list
v1.3.2
Added
tailr demostarts a small sample application, proxies it, and prints a
review URL: the whole round trip against something that is not your own work,
with nothing installed into a project and no agent involved. The sample app
ships with the package now, sonpx -y @gcrft123/tailr demoneeds nothing
cloned first.
Changed
- The line printed when a session starts names the key the reviewer will
actually be holding, instead of always saying Alt at someone who has changed
it. It also stops handing the reviewer's instructions and the agent's next
command to the same reader, since only one of those two people has a terminal. tailr initcloses by telling whoever ran it what to do next, rather than
what the agent should do next. It used to end ontailr waitandtailr pull, the two commands that are not a person's to run, which is a fair way
to leave someone thinking they had misread who does what. It now says where
the rules landed, that the agent re-reads them from there, and leaves the one
command a person might actually want, which is starting the session.- The README lists everything
initedits whereinitis first mentioned —
four things, where it used to name three — and PROMPT.md has the agent say so
before running it. Requirements now covers what Tailr asks of a dev server
rather than only which Node it needs, including that a mark's source address
isnullon a project whose tooling emits none, and that this is a fallback
rather than a failure. - The skills installed without a marketplace are now
tailr-start,
tailr-reviewandtailr-config, so the commands are/tailr-startand
/tailr-config. That coversnpx skills add gcrft123/tailr -gand the
Antigravity and Gemini extension installs alike: all of them read the skills
straight out of the repository and add no namespace of their own, so the old
names arrived bare and/startand/configlanded on top of commands the
agent already had — Antigravity's own/configamong them. A marketplace
install is unaffected and still reads/tailr:start, because that path adds
the prefix itself. Anyone on one of the unprefixed paths should install again;
the old names are gone rather than aliased.
Fixed
- A dev server that compresses its HTML regardless of what was asked of it now
gets the overlay. Tailr requests uncompressed HTML; the servers that send gzip,
deflate or brotli anyway had their pages passed through unrewritten, which put
the reviewer on a page where holding the key did nothing and said so nowhere.
An encoding Tailr still cannot undo passes through intact, as it did before.
v1.3.1
Fixed
--target localhost:5173,--target 5173and--target 127.0.0.1:3000now
mean what they say. A scheme-less address used to start a session that could
only answer 502, and a bare port crashed with a stack trace; what still cannot
be a dev server URL is refused in a sentence.- A second
tailrstarted in a project that already has a live session — on
another port, say — is turned away with that session's URL, instead of
overwriting.tailr/session.jsonand then deleting it on its way out, which
left the first session running but unfindable bystatus,waitand the
MCP tools. tailr progresswith a ref that is not in the batch is a 400 that names the
refs that are, rather than a silent success that counted a mark nobody made
as landed.tailr initregisters the MCP server asnpx -y @gcrft123/tailr mcp, the
same as the plugin, so a client launching it in a--no-installproject
never stalls on npx asking permission to fetch.
Changed
- PROMPT.md tells the agent to run
initagain with--filewhen its own
instruction file is not one the project already had: on a fresh project
initwritesAGENTS.md, which Claude Code does not read on its own, and the
rules were landing somewhere the agent would never look again. - The landing page's agent fan carries Antigravity in place of Gemini CLI —
its own mark, andagy plugin installas the command it hands over. - The README's Gemini CLI section is now an Antigravity CLI one
(agy plugin install https://github.com/gcrft123/tailr), since Google turns
individual accounts away from Gemini CLI, and thenpx skills addparagraph
says where that installer actually puts things now and that the skills land
there without thetailr:prefix.
v1.3.0
Added
- Sound, on every action. A mark made, kept, reopened, dropped or discarded;
versions or a slider asked for; a batch sent; a version picked, a value kept
or reset; the batch taken back, re-sent or reloaded into; the session ended;
the island landing in a new corner. Nine cues, each with its own shape rather
than the same click at different volumes, and synthesized live through the Web
Audio API — nothing is fetched and no audio file ships. Two things stay quiet:
a key going down — bar the Enter that commits a comment, which hands the agent
something to do — and a single mark coming back applied, which you watch empty
out on screen; the run closing is what you hear. On by default;sfx:false
turns the lot off. /tailr:config(/configin Cursor),tailr config, and thetailr_config
MCP tool: read or change your settings, e.g.
/tailr:config sfx:false modifier:cmd. Settings belong to the person rather
than the project, so they are kept in~/.tailr/config.jsonand hold across
every project — nothing new appears in your repository. A change made while a
session is up is pushed to the open review page, so it takes effect without a
reload.modifier, so the key held to arm marking can bealt(the default),ctrl
orcmdwhen an app or an OS wants Alt back. Every hint on screen names
whichever key is yours, andtailr_statusreports it so the agent never has
to guess which one to tell you about.
Changed
- The interaction sounds are Cuelume,
copied intosrc/overlay/cuelume.jsunder its MIT licence rather than
installed — its whole seventeen-recipe palette, so a version bump stays a copy
rather than a merge. Tailr still has no dependencies.
v1.2.0
Added
- A slider companion to the 1×–4× variations toggle on the comment composer.
Turn it on to ask the agent for a continuous parameter (glow, depth, scale…).
The agent wires it behinddata-tailr-slide-<ref>, reports the range with
tailr slider/tailr_slider, and the reviewer scrubs it on the page before
keeping a value — the same round trip versions use. The pill's track and thumb
are drawn rather than left to the platform, and the number beside them has no
spinner arrows: this is a value to scrub, not a form to fill in. Keep
minimizes the pill to that value with its reference number, which reopens it,
and Reset puts the parameter back to the default the agent reported.
Keeping the value already kept takes the keep back, the way clicking the
version already chosen does. /tailr:startis a slash-command skill. Typing it starts a session against
the dev server and begins watching for the first batch; the model will not
fire it on its own. The review loop stays a background skill, loaded when a
batch is in play rather than offered as a second command. On Cursor it is a
rule rather than a skill, because plugin skills all become slash commands
there and/reviewis already a built-in./startis a Cursor command file:
pointingskillsat the start folder finds nothing (Cursor wants a parent of
skill folders), anddisable-model-invocationhides plugin skills from the
slash menu.- Plugin catalogs for Cursor, Codex, GitHub Copilot CLI, and Gemini CLI, so the
same bundle that Claude Code installs is what those agents install too. Agents
without a marketplace of their own take the skills globally through
npx skills add gcrft123/tailr -g.
Changed
- Mark reference numbers reset with each Tailr session. The server names the
process; the overlay drops leftover marks from a previous process and starts
the count at 01 again. - Clicking the badge on a text mark reopens the inline editor, with a Delete /
Done bar so the staged change can be revised or reverted. Double-clicking
text that already has a mark, and commenting an element that already has a
comment, reopen the existing mark instead of stacking a new one. - A slider's row in the staged list carries what its pill carries — Keep, lit
when that value is the one being kept, and Reset — plus the×that turns the
slider down altogether, which stays in the list for the same reason a version
set's does.
Fixed
- Version and slider pills on an element in the corner of the viewport no longer
render offscreen. Both flip below the element, or slide along its edge, the way
the comment composer already did. A slider pill also follows its element while
the page scrolls, which it never did. - The slider pill is no longer rebuilt when the reviewer keeps a value, so the
button under the pointer survives being clicked and keyboard focus stays where
it was. Both faces of the pill are now built once and swapped by class, which
is what lets the change of shape animate at all — and it is the rule the
version pill above it has always followed. - A sent batch now disables a slider pill's controls rather than only greying
them, and Keep reads as kept: its lit state used to be the same paper as its
resting state, so it could not be told apart. - The Claude Code app would not add Tailr from this repository. It looks for a
plugin at the repo root (.claude-plugin/plugin.json,.mcp.json, skills)
and theowner/repomarketplace shorthand clones over SSH, which the app
cannot complete. The root now carries a plugin manifest that points into
plugin/, the MCP server lives at.mcp.jsonwhere the app discovers it,
and the README's add command is the HTTPS git URL. - Latched markup read what someone was typing as commands. With the mode on, a
caret in the application's own text box — or in the one Tailr opens to edit
text in place — lostc,randeto the comment, remove and edit verbs
and the arrow keys to structural walking, and the characters never reached the
field. A keystroke on its way into an input, a textarea, a select or a
contenteditable is now typing rather than a shortcut. Escape still reaches
Tailr from a field of the application's, where it is not swallowed and the
field answers it too; the exception is Tailr's own inline editor, which
answers Escape by putting the text back without also dropping the mode the
reviewer was editing from.
v1.1.0
Added
- Versions. A comment on an element or a spot can ask for up to four answers
instead of one: the composer carries a1×button beside Add that cycles to
4×. The agent builds every version at once, each guarded on an attribute
Tailr sets on<html>, and names it in a word or three. After the reload a
pill sits on the element with a tab per version — hover one and it widens to
the name while the page switches to that version live, so the comparison is
between the real things rather than between two descriptions of them. - Keeping a version is a mark like any other. It joins the batch, and sending it
is what makes that version permanent and takes the losing ones — and the
guards — out of the source. Turning the whole set down is the×on its row.
An unresolved set keeps the island awake, because the alternative is versions
sitting in someone's repository with nothing on screen that would remove them. tailr variants <ref> <names…>, and the matchingtailr_variantsMCP tool,
for reporting what was built. The operating rules carry the whole contract:
where the switch lives, that version 1 must also be what renders without it,
and that a guard never outlives the choice that settles it.- A way out. End session sits under the island's panel, and it asks before
it acts: the card names what is being agreed to, one consequence per line —
the marks that go unsent, the versions that get cleaned up, the address the
application goes back to once Tailr stops proxying, and that the browser is
cleared. Until now the only way to end a session was a terminal the reviewer
does not have. - A cleanup pass on the way out, because ending is the last moment anything can
be done about what Tailr left behind. Versions nobody chose between go to the
agent as one final batch that takes them, and the switches guarding them, out
of the source; the switches come off the document; what Tailr kept in the
browser is cleared; the server stops and the overlay takes itself off the
page. If the agent never answers, End anyway leaves regardless and says
the cleanup did not finish rather than implying it did.
Fixed
- A session was good for exactly one batch. The server keeps the last run
indefinitely, so a reviewer who reloaded was handed a finished run again and
the overlay re-entered its "Needs refresh" state — against changes they were
already looking at — with Send locked and no way back. A closed run now only
prompts the page that watched it close.
v1.0.0
Added
- A Claude Code plugin, with this repository as its marketplace:
/plugin marketplace add gcrft123/tailr, then/plugin install tailr@tailr.
It carries the MCP server, the operating rules as a skill, and a/tailr:start
command — the same setuptailr initperforms, without editing anything in the
project, and updatable from/pluginrather than by re-running a script. The
rules in it are generated from the same sourceinitwrites from, and the
version it advertises is stamped when a release is cut;npm testfails if
either drifts, so an installed plugin cannot quietly fall behind the protocol
Tailr actually speaks. - A release flow keyed to the tags: pushing
vX.Y.Zverifies the tag against
the manifest, runs the tests, publishes to npm with provenance, and cuts a
GitHub Release from this file. Publishing authenticates as a trusted publisher
over OIDC, so no npm token is stored anywhere.npm versionis the whole
interface to it. - A test suite —
npm test, no dependencies — covering the bridge state machine
and its refusals, the proxy's injection and passthrough, the three outcomes of
tailr wait, and the idempotence oftailr init. CI runs it on Node 18, 20
and 22, and fails if Tailr ever takes on a runtime dependency. - Source resolution reads more of what dev tooling already emits:
data-v-inspector(Vue),data-inspector-relative-path(react-dev-inspector),
data-astro-source-file(Astro), Svelte's__svelte_meta, and a generic
data-source, alongside the React fibers anddata-tailr-sourceit already
read. Windows paths and trailing column numbers are handled. npm run demostarts the demo app itself instead of expecting one on a port
nothing had started.
Fixed
- An
https://target crashed the session process on the first page request.
https dev servers are now proxied, hot-reload upgrade included, and a
self-signed certificate is accepted — a local dev server's always is. - Rewritten HTML carried both the upstream's
transfer-encoding: chunkedand a
freshly computedcontent-length. Strict clients refuse that combination
outright, and every dev server streams its HTML. HTML arriving compressed is
now passed through whole rather than decoded as utf-8 and injected into. tailr statusexited0while the agent's own run was still in flight,
reporting leased work back to it as a waiting batch. It now reports what the
server calls pending.- Closing a run that was already closed returned
500 Server error.rather than
409 No open run.— an agent retryingtailr doneafter a dropped connection
could not tell that apart from a real failure. - A synchronous failure inside the proxy took the whole session down with it. It
now costs one page, and the review URL stays up.
Changed
PRODUCT.mdno longer describes the project as having no implementation, and
states exactly how far source resolution reaches. The overlay surface doc
describes the Island that shipped rather than the withdrawn Callout direction.