Upgrading from v0.89.0 #
Stop running agnostic-ai watch processes before changing the installation or project configuration. Complete the applicable changes below before installing, since package install hooks can run sync.
- Keep project paths inside the project. Move specs out of
.gitand change output paths that leave the project or enter.git. Replace links that lead to either location.gitignore.path: .git/info/excluderemains supported. Seeproject path boundaries . - Review pack names, sources, and update jobs. Pack commands reject unsafe names and Git sources.
packs updatenow restores the exact recorded commits; usepacks update --latestwhen you intend to advance them. Local packs outside the project need the printedpacks addcommand. Seeupdating packs . - Move imported credentials into native user configuration or supported environment references. Claude Code and Codex imports omit literal credentials and refuse older captured overlays containing them. After cleaning those files, use
import claude --overwriteorimport codex --overwriteto replace existing specs. Grok imports keep only the documented safe settings. Seecredential handling . - Move OpenHands global servers before global sync. Add them in Agent Canvas underCustomize > MCP Servers , then start a new conversation. The next global sync removes servers it previously managed in
~/.openhands/mcp.json, including identical hand-written entries it adopted. OpenHands documents its currentsettings store , checked October 29; seelegacy cleanup for what sync removes. - Review affected native rules and names. For previously imported Cursor rules that had no activation keys, set
alwaysApply: falsein their portable specs to keep them off. Rename Vibe agents namedmain, in any letter case. On Windows, rename imported spec filenames containing colons; Gemini commands such asgit:commitnow use nested output folders. - Preserve a hand-written Junie effort before syncing. Portable
effortnow writes.junie/config.jsonand replaces the native value. Import it first, or setx-junie.effortto retain a target-specific override.
Web API clients should switch edit and preview requests to audience: "shared" or "personal". The older scope: "team" or "local" form remains accepted in v0.90.0 and is deprecated for removal in the next minor release. See the API reference.
Install through your existing package manager. For a global npm installation:
npm install -g agnostic-ai@0.90.0
agnostic-ai upgrade --requires updates the project's requires and editor schema URL, then syncs. It replaces existing minimum or range requirements and local overrides. To preserve a deliberate minimum or range, keep that requirement and update the schema URL to v0.90.0 yourself. See upgrade options.
Run agnostic-ai sync, review the generated diff and any saved edited files, then run agnostic-ai sync --check before restarting watch. Install scripts and standalone upgrade now verify the download's build provenance when gh is installed and logged in; see release verification for the checks and fallback rules.
What agnostic-ai changed #
Edit one tool's settings and find native-only servers
Run agnostic-ai serve --open and open Settings > What each tool gets to change model or effort for one configured tool. Choose Shared or Personal, preview sync, and save. A personal override for one tool leaves the shared defaults in place for the others. Global settings open in a separate tab with a link back to the project. See settings edits.
The Tools view lists MCP servers found only in a tool's own configuration, so you can choose which to import. Lifecycle stages start collapsed, show hook counts and commands, and support search. The sidebar scrolls with the page, and keyboard focus, mobile fields, and empty states are easier to use.
Keep edited files and recover sync state
Sync saves edited generated files before removing them and keeps its backup copies private and ignored by Git. Case-only output renames survive cleanup. Missing external adapters leave their files and shared skill links in place. Global sync preserves text outside its instructions block and comments around hooks in JSON settings.
An invalid sync state produces a warning and a fresh state file; unsafe recorded paths are skipped. On Windows, sync --check --against compares committed bytes without checkout line-ending changes. Plain checks explain line-ending drift and links checked out as ordinary files. Sync also does fewer repeated reads and renders, running about 25% faster in the project's 500-spec measurement. See sync behavior.
Preserve more native settings
- OpenCode: import preserves provider configuration, including per-model prompt cache lifetime, while providers containing literal credentials are skipped with a warning. V2 agents keep their
temperatureunderrequest.body.temperature. - Copilot: import and sync preserve repository
enabledPluginsandextraKnownMarketplacesfor CLI and cloud. Both Copilot and OpenCode projects are detected from their root settings files alone. - Junie: portable effort reaches
.junie/config.jsonand imports back. For example, a settings spec can give Junie its own value:
name: defaults
model:
junie: sonnet
effort:
junie: high
Junie implicitly loads its default project file only in trusted projects. Effort needs a configured model, which can come from another config file; a saved effort for that model takes precedence. See the Junie configuration reference, checked October 29, and effort by target, OpenCode settings, and Copilot settings for supported fields.
Attach a preview and target hook behavior
Claude Code can attach a preview to a server you already run. In an environment spec selected for Claude Code:
name: preview
targets: [claude]
dev-commands:
- name: App
url: http://localhost:3000
Sync writes .claude/launch.json without a start command. See environment fields.
CodeBuddy prompt hooks now work on Stop, UserPromptSubmit, and PreToolUse at project scope. Mistral Vibe post_agent hooks can match a specific agent; subagent active_model needs Vibe 3.0.3 or later. See CodeBuddy hooks and Vibe mappings.
Gemini commands with names such as git:commit write nested TOML files and import with their original names. Qwen accepts the same command names on Windows while refusing output filenames that Windows cannot create. Grok checks Git visibility once per sync check as rule counts grow, and init records the required instruction-visibility policy.
Get actionable checks before syncing
Version mismatches offer next steps and upgrade points out a remaining project pin. Configuration errors name the source file, line, key, and expected shape. doctor fails on unknown targets and reports JSON findings; lint and editors catch specs a selected tool cannot write and hooks with nothing to run.
Claude Code sync also warns about settings that project scope ignores, hook events that cannot run their handlers, and models unaffected by global effort. Repository auto memory cannot be enabled through tracked case or look-alike local settings when blockReadsOutsideWorkingDirectories is on; personal memory keeps working through linked or short project paths.
See the full release notes for the remaining fixes.
What changed in the targets #
Repository defaults and model cache settings
GitHub's October 28 announcement makes repository plugin defaults in .github/copilot/settings.json available to Copilot CLI and Copilot in the cloud. These are defaults, not an enforcement policy. This release imports and preserves them; the native configuration reference explains marketplace sources and overrides.
OpenCode 2.2.0, released October 27, adds per-model prompt cache lifetime. This release preserves the provider block through import under x-opencode.provider. Configure provider.<provider>.models.<model>.settings.cache.ttl, such as 1h; this remains an OpenCode setting rather than a portable cache field.
Opt-in scheduled prompts in OpenCode
OpenCode 2.2.1, released October 29, adds scheduled prompts and an optional image-generation tool. The existing x-opencode extension can enable the native settings:
name: opencode-schedules
targets: [opencode]
x-opencode:
timezone: Europe/Berlin
experimental:
schedules: true
Use OpenCode's /schedule command to create schedules. Schedule definitions remain runtime state. Image generation has its own experimental.image_generate switch. agnostic-ai writes these settings but does not import the experimental fields in v0.90.0; see the native schema.
Vibe settings for outside-folder access and invalid keys
Vibe 3.0.3, released October 26 and checked October 29, provides outside_workdir: deny and strict_config: true. The existing x-vibe settings extension can write them. The first denies outside-folder access except for added directories and allowlisted paths; the second rejects unused configuration keys. These are existing upstream settings discovered during this release's audit. See the released configuration source for their limits.