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.
  • The web interface opens on Conversations, with recent Claude Code, Codex and Cursor chats that reopen where they live. See the web interface.
  • 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.

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.
  • 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.
  • Crush servers imported before this release: their timeout holds seconds. Multiply it by 1000; sync now writes seconds to crush.json. See Crush.
  • Codex MCP servers with experimental_environment: run agnostic-ai migrate --only mcps to move it to environment_id, which Codex reads. See migrate.

Then follow the upgrade page.

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.

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.

See the release notes 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). Sync still writes the hooks. Trusting the folder is a native step, noted on the Qwen page. Qwen Code 0.27.0 adds a FileChanged hook (release), 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). 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, hook types). validate now accepts both triggers.
  • Crush 0.100.0 adds blocked_commands, allowed_commands and safe_commands to decide which shell commands prompt (release, schema). 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). 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), and a stdio MCP server picks one with environment_id (MCP docs). 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.