Skip to content

Releases: michael-ra/toolahead

ToolAhead 0.7.0

Choose a tag to compare

@michael-ra michael-ra released this 09 Aug 17:18

The Antigravity CLI never saw ToolAhead's hooks. agy reads lifecycle hooks only from installed plugins, not from the .agents/hooks.json that init-antigravity wrote. Its log reported loaded 0 named hooks from 0 hooks.json file(s) and no event ever reached the daemon — the integration was inert.

init-antigravity now also writes a plugin to ~/.toolahead/agy-plugin/ and installs it when agy is on your PATH (otherwise it prints the command). Verified on CLI 1.1.11: the daemon receives Antigravity's native tool events with the correct mapping and model. The plugin carries no project URL on purpose — agy plugins are global, and the workspace check keeps projects apart, so one install covers all of them.

What each agent reports natively is now documented, because it decides what can be learned without the MCP tools: Claude Code and Antigravity expose their full file/search/command surface; Codex reports only Bash and apply_patch, so read/search learning there needs --replay-tools.

Known Antigravity limitation, found while testing: agy --print reports no workspace and runs commands in its own scratch directory, so there is no project state to accelerate in print mode. End-to-end speedups on Antigravity remain unverified.

Install: uvx toolahead

ToolAhead 0.6.4

Choose a tag to compare

@michael-ra michael-ra released this 08 Aug 12:01

toolahead with no arguments now prints a short getting-started summary and exits 0. It used to answer the very first command anyone types — uvx toolahead — with an argparse error.

Install: uvx toolahead

ToolAhead 0.6.3

Choose a tag to compare

@michael-ra michael-ra released this 08 Aug 11:56

An explicit --url in the installed hook command now wins over PREFETCH_LOOKUP_URL. With both set they could point at different daemons, so the hook reserved a result on one and the rewritten command fetched it from the other.

Also corrects a claim in the 0.2.0a2 notes about tests that were never part of the published repository.

Install: uvx toolahead

ToolAhead 0.6.2

Choose a tag to compare

@michael-ra michael-ra released this 08 Aug 10:02

[commands] rules now match a declared command inside a compound one, so cd web && sh e2e.sh counts as sh e2e.sh. Without this the required services were never started and the readiness guarantee silently did not apply. Matching stays quoting-aware: echo "sh e2e.sh" is still not a match.

Found by running three sessions each of Claude Code, Codex, and the Antigravity hook protocol against a real Vite + FastAPI project.

Install: uvx toolahead

ToolAhead 0.6.1

Choose a tag to compare

@michael-ra michael-ra released this 08 Aug 09:28

Fixes from two adversarial review rounds over 0.6.0. Every item was reproduced
before it was fixed and has a regression test; the suite grows from 50 to 95.

Upgrade note: if you ever ran toolahead init --strict, upgrade to 0.6.1
before re-running init without --strict. On 0.6.0 that combination removed
the ToolAhead file tools while leaving Claude's native ones denied.

Fixed

  • Strict rollback. Re-running init without --strict after a strict
    install left native file tools denied and the Codex strict marker in place
    while removing the MCP tools that replaced them. The rollback now also only
    removes permissions.deny entries ToolAhead itself added — your own policy
    rules stay untouched.
  • Route learning. A URL only becomes a warm target if a command actually
    fetched it with an HTTP client (directly or in an executed script). Printing,
    commenting or merely reading a URL no longer schedules a later GET. Learning
    is quoting- and multi-line-aware and ignores commands that failed.
  • Nothing in a repository steers execution. Learned routes are session
    memory, and the transition table moved to ~/.toolahead/tables/. A cloned
    repository can no longer ship a file that makes ToolAhead run or request
    something. Override with PREFETCH_TABLE.
  • Workspace binding. --url reaches the installed hooks, and readiness,
    lifecycle and lookup requests carry their workspace, so a daemon serving
    another project refuses them instead of answering for the wrong checkout.
    Subdirectories still count as the same workspace.
  • Readiness guarantee holds. Hook process timeouts, the client budget and
    the server wait agree, and a declared [commands] script matches however the
    agent spells the call (sh e2e.sh, bash ./e2e.sh, ./e2e.sh).
  • Google Antigravity. PreToolUse returns the required decision instead of
    an empty object, Stop is installed as a flat handler list, and the call's
    working directory is preferred over the first workspace path.
  • Also: warm_routes = ["auto"] works for services rooted in a subdirectory,
    warm requests never overlap, derive_routes handles absolute paths,
    removing the managed MCP block no longer truncates .codex/config.toml, and
    doctor no longer fails a correct hooks-only install.

Faster

The Claude hook uses http.client instead of urllib, cutting about 19 ms of
interpreter startup from every hooked tool call (measured 60 ms → 41 ms).

Install: uvx toolahead · pip install toolahead

Full changelog: https://github.com/michael-ra/toolahead/blob/main/CHANGELOG.md

ToolAhead 0.6.0

Choose a tag to compare

@michael-ra michael-ra released this 07 Aug 16:14

Hooks-only by default: toolahead init now replaces nothing — your agent keeps its native tools, while learning, service pre-warming, route warming, and transparent Bash replay ride on lifecycle hooks. The ToolAhead MCP tools (Read/Search replay hits) are an explicit opt-in via --replay-tools (--strict implies it).

The readiness guarantee for declared external commands moved into the PreToolUse hooks of Claude Code, Codex, and Antigravity: matching native shell commands wait for their services and are denied with an actionable reason only when a trusted config's service stays down. Fail-open everywhere else; TOOLAHEAD_ENSURE_WAIT=0 disables the wait.

ToolAhead 0.5.0

Choose a tag to compare

@michael-ra michael-ra released this 07 Aug 16:01

Antigravity lifecycle hooks: init-antigravity now installs .agents/hooks.json with a fail-open adapter for Antigravity's native tool events. Learning, service pre-warming, and route warming work even when the agent uses only native tools — the ToolAhead MCP tools remain necessary only for replay hits. The adapter always answers a neutral {} with exit 0, so it can never block the agent's tool calls.

ToolAhead 0.4.1

Choose a tag to compare

@michael-ra michael-ra released this 07 Aug 14:57

Route warming learns: "auto" now also warms URLs the agent was actually observed requesting after editing a file (extracted from its commands and referenced workspace shell scripts, declared service origins only), on top of the Next.js/Nuxt/SvelteKit file-routing heuristic. Learned transitions share the transition table's persistence and decay.

ToolAhead 0.4.0

Choose a tag to compare

@michael-ra michael-ra released this 07 Aug 14:43

Route warming: warm_routes = ["/", "auto"] on a service pre-requests the listed routes after every edit, once the service is ready — on-demand compiling dev servers (Next.js and friends) finish their rebuild inside the model's reasoning window instead of on the agent's first request. "auto" derives the route from the edited file for Next.js (app and pages router), Nuxt, and SvelteKit.

Safety: GET-only against the declared service origin, no off-origin redirects, responses never cached, newer edits supersede in-flight warm rounds, and manual services are never booted just for warming. Requires an approved toolahead.toml (toolahead trust).

ToolAhead 0.3.2

Choose a tag to compare

@michael-ra michael-ra released this 07 Aug 13:33

Google Antigravity support: toolahead init-antigravity writes the workspace-local .agents/mcp_config.json (Antigravity CLI and IDE), and toolahead init --agent all sets up Codex, Claude Code, and Antigravity together. Replay, service pre-warming with trust gate, and learning all work through the ToolAhead MCP tools — no native hooks required.