# agnostic-ai v0.92.0: pick up your chats and fix setup gaps

> Source: <https://agnostic-ai.org/updates/2026-11-08-v0.92.0/>
> Published: 2026-11-07 23:00:00+00:00

## Highlights

- **Breaking:** sync stops on an MCP`roots` item that is not a`{uri, name}` mapping, and Pi MCP`timeout` is now milliseconds. See[MCP servers](https://agnostic-ai.org/docs/spec-format/mcps/) .
- The web interface opens on **Conversations** , with recent Claude Code, Codex and Cursor chats that reopen where they live. See the[web interface](https://agnostic-ai.org/docs/cli-reference/inspect/#serve) .
- **Setup health** lists gaps with fix prompts, rechecks everything, and copies one prompt for the findings you tick.
- `sync --dry-run` ,`--plan` and`--check` match what a real sync does, and`--diff` works for project and global sync. See[sync](https://agnostic-ai.org/docs/cli-reference/sync/) .

## Upgrading from v0.91.0

- **MCP specs with `roots`:** write each item as a mapping, so`- file:///repo` becomes`- uri: file:///repo` .`lint` reports the old form as LINT060. See[MCP servers](https://agnostic-ai.org/docs/spec-format/mcps/) .
- **Pi users with an MCP `timeout`:** Pi reads milliseconds and sync now converts. Multiply a value in seconds by 1000, so`1800` becomes`1800000` . See[Pi](https://agnostic-ai.org/docs/targets/pi/) .
- **Crush servers imported before this release:** their`timeout` holds seconds. Multiply it by 1000; sync now writes seconds to`crush.json` . See[Crush](https://agnostic-ai.org/docs/targets/crush/) .
- **Codex MCP servers with `experimental_environment`:** run` agnostic-ai migrate --only mcps` to move it to`environment_id` , which Codex reads. See[migrate](https://agnostic-ai.org/docs/cli-reference/upgrades/#migrate) .

Then follow the [upgrade page](https://agnostic-ai.org/docs/cli-reference/upgrades/#upgrade).

## What changed

### Pick up a chat where it lives

Run `agnostic-ai ui`. **Conversations** lists recent Claude Code, Codex and Cursor chats, open ones first, with how many wait for you. **Open in Terminal** reopens a chat in its tool, and a Codex thread that a running `codex` holds switches to that terminal. It works on Windows too. See the [web interface](https://agnostic-ai.org/docs/cli-reference/inspect/#view).

### Fix setup gaps with one prompt

**Setup health** lists errors under **Fix first** and the rest under **Worth a look**. **You could add** lists features your tools support that the project does not use yet. Tick findings and suggestions, then **Copy prompt** copies one prompt for your coding agent.

### Read the web interface at a glance

Each page opens with a one-line verdict. **Context** shows how many words agents read when a session starts, against a budget. **Lifecycle** shows your hooks as a timeline, and **Authority** shows every allow, ask and block rule in one table. Phones get a top bar and full-screen search.

### See what sync will change

`sync --dry-run --diff` and `sync --plan --diff` print a diff for each changed file and name files they would remove, also with `--global`. `sync --global --plan --check` fails on drift, like project sync. See [sync](https://agnostic-ai.org/docs/cli-reference/sync/).

See the [release notes](https://github.com/Chemaclass/agnostic-ai/releases/tag/v0.92.0) for the remaining fixes.

## What changed in the targets

- **Qwen Code 0.26.8** applies folder trust to headless runs, so a`qwen -p` run in CI can skip project hooks in an untrusted folder ([release](https://github.com/QwenLM/qwen-code/releases/tag/v0.26.8) ). Sync still writes the hooks. Trusting the folder is a native step, noted on the[Qwen page](https://agnostic-ai.org/docs/targets/qwen/) .**Qwen Code 0.27.0** adds a`FileChanged` hook ([release](https://github.com/QwenLM/qwen-code/releases/tag/v0.27.0) ), and this release writes it to`.qwen/settings.json` .
- **Claude Code 2.1.319** adds`permissions.denyInsteadOfPrompting` , which denies a call that would stop to ask and lets the turn continue ([release](https://github.com/anthropics/claude-code/releases/tag/v2.1.319) ). There is no portable field yet.`x-claude.permissions.denyInsteadOfPrompting: true` reaches`.claude/settings.json` .
- **Kiro CLI 3.0.0** makes V3 the default, and**3.1.0** adds`PreCompact` and`PostCompact` hooks ([changelog](https://kiro.dev/changelog/) ,[hook types](https://kiro.dev/docs/hooks/types.md) ).`validate` now accepts both triggers.
- **Crush 0.100.0** adds`blocked_commands` ,`allowed_commands` and`safe_commands` to decide which shell commands prompt ([release](https://github.com/charmbracelet/crush/releases/tag/v0.100.0) ,[schema](https://raw.githubusercontent.com/charmbracelet/crush/v0.100.0/schema.json) ). This is an open gap: set them in`crush.json` yourself.
- **Junie** ignores an MCP`timeout` outside 1000 to 3600000 milliseconds and uses 60 seconds ([MCP docs](https://junie.jetbrains.com/docs/junie-cli-mcp-configuration.html) ).`lint` and sync now warn about a value above one hour.
- **Kimi Code 2.5.0** runs sessions in SSH, Docker or custom-command environments ([changelog](https://moonshotai.github.io/kimi-code/en/release-notes/changelog) ), and a stdio MCP server picks one with`environment_id` ([MCP docs](https://moonshotai.github.io/kimi-code/en/customization/mcp) ). Sync and import keep`x-kimi.environment_id` .

Checked on November 8, 2026 against the linked vendor docs and releases. Native behavior was not run. A local sync checked the Claude and Crush support.
