Skip to content

Releases: gcrft123/tailr

v1.3.2

Choose a tag to compare

@github-actions github-actions released this 06 Sep 16:17

Added

  • tailr demo starts 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, so npx -y @gcrft123/tailr demo needs 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 init closes by telling whoever ran it what to do next, rather than
    what the agent should do next. It used to end on tailr wait and tailr 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 init edits where init is 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
    is null on 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-review and tailr-config, so the commands are /tailr-start and
    /tailr-config. That covers npx skills add gcrft123/tailr -g and 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 /start and /config landed on top of commands the
    agent already had — Antigravity's own /config among 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

Choose a tag to compare

@github-actions github-actions released this 06 Sep 03:26

Fixed

  • --target localhost:5173, --target 5173 and --target 127.0.0.1:3000 now
    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 tailr started 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.json and then deleting it on its way out, which
    left the first session running but unfindable by status, wait and the
    MCP tools.
  • tailr progress with 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 init registers the MCP server as npx -y @gcrft123/tailr mcp, the
    same as the plugin, so a client launching it in a --no-install project
    never stalls on npx asking permission to fetch.

Changed

  • PROMPT.md tells the agent to run init again with --file when its own
    instruction file is not one the project already had: on a fresh project
    init writes AGENTS.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, and agy plugin install as 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 the npx skills add paragraph
    says where that installer actually puts things now and that the skills land
    there without the tailr: prefix.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 00:16

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 (/config in Cursor), tailr config, and the tailr_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.json and 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 be alt (the default), ctrl
    or cmd when an app or an OS wants Alt back. Every hint on screen names
    whichever key is yours, and tailr_status reports it so the agent never has
    to guess which one to tell you about.

Changed

  • The interaction sounds are Cuelume,
    copied into src/overlay/cuelume.js under 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

Choose a tag to compare

@github-actions github-actions released this 05 Sep 04:42

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 behind data-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:start is 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 /review is already a built-in. /start is a Cursor command file:
    pointing skills at the start folder finds nothing (Cursor wants a parent of
    skill folders), and disable-model-invocation hides 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 the owner/repo marketplace 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.json where 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 — lost c, r and e to 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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 20:56
d2fd9d6

Added

  • Versions. A comment on an element or a spot can ask for up to four answers
    instead of one: the composer carries a button beside Add that cycles to
    . 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 matching tailr_variants MCP 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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 00:25

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 setup tailr init performs, without editing anything in the
    project, and updatable from /plugin rather than by re-running a script. The
    rules in it are generated from the same source init writes from, and the
    version it advertises is stamped when a release is cut; npm test fails 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.Z verifies 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 version is 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 of tailr 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 and data-tailr-source it already
    read. Windows paths and trailing column numbers are handled.
  • npm run demo starts 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: chunked and a
    freshly computed content-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 status exited 0 while 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 retrying tailr done after 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.md no 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.