Skip to content

ToolAhead 0.6.1

Choose a tag to compare

@michaelAGI michaelAGI released this 08 Aug 09:28
· 7 commits to main since this release

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