# v0.37.1: Responsive waits and bridge polish

A patch release focused on staying responsive: sending a message now interrupts a blocked watch, slow embedding backends get their configured headroom, and the bridge keeps its dispatch thread free of background work.

## Your message wins over a blocked watch

If the agent is blocked in a synchronous `bash_watch` wait when you send a message, the wait now aborts immediately and converts itself to a background watch — the agent processes your message right away, and the original notification still arrives when the task finishes or the pattern matches.

## Readable web pages in aft_outline and aft_zoom

HTML-only pages (Docusaurus blogs, docs sites) are now converted to Markdown at fetch time. Previously these pages dumped raw HTML into context, and zoom-by-heading failed because headings absorbed invisible permalink anchors. Outlines now come out clean, sections zoom by their visible heading text, and code blocks render as language-tagged fences. Markdown-native URLs are unchanged.

## Semantic index responsiveness

- `semantic.timeout_ms` is honored up to the real transport budget (55s) instead of being silently clamped to 25s — slow local backends (LMStudio cold-loads) keep their configured headroom, and background refresh batches stop getting aborted mid-embed.
- Full-corpus refreshes (after `.gitignore`/`.aftignore` changes) no longer walk the project on the bridge's request thread — the walk happens on the refresh worker, so other tool calls aren't blocked behind it.
- Loading a large index verifies file freshness in parallel on a bounded pool, shaving startup time.

## Bash output protection covers more commands

The pipe protection that keeps `bun test | grep fail` from hiding failures now also recognizes env-prefixed runners (`CI=1 bun test`), `bun --cwd <pkg> test`, `mvn clean test`, and multi-task rake invocations (`rake db:setup test`) — with the same fail-closed safety rules for redirections, substitutions, and side-effectful filters.

## Fixes

- **Background bash multi-command scripts** now execute from a script file instead of shell argv, removing quoting and length edge cases, with a regression test asserting every command's output lands in the raw capture file.
- **Bridges with a crashed or timed-out process no longer pin themselves against idle eviction** through leftover background-task bookkeeping.
- **`/dev/fd/` paths in bash permission checks** accept only numeric descriptors (`/dev/fd/2`) — path-traversal shapes like `/dev/fd/../sda` still ask.
- **The JSONC config schema** now includes the `inspect` block and `lsp.diagnostics_on_edit`, so editors stop flagging valid config.
- **Two C libraries dropped from the dependency tree** (oniguruma regex, and the C++ half of esaxx): the tokenizer now uses pure-Rust backends, trimming build complexity with byte-identical tokenization (regression-tested).

[Join our Discord](https://discord.gg/DSa65w8wuf)
