{"slug": "agnostic-ai-v0-91-0-keep-files-safe-when-targets-are-empty", "title": "agnostic-ai v0.91.0: keep files safe when targets are empty", "summary": "Agnostic-ai released version 0.91.0, which changes sync behavior so that an empty target list (`targets: []`) now warns and keeps generated files instead of deleting them, with removal requiring the explicit `agnostic-ai sync --allow-empty-targets` flag. The release also makes repeated YAML keys in nested maps a parse error with a line number, has Qwen import `.agents/skills/` (stopping agents written as skills by Amp, Crush, Warp or Zed when Qwen is selected), and rejects unsupported Kimi MCP executors such as `x-kimi.executor: kaos`. Users upgrade via `npm install -g agnostic-ai@0.91.0` and run `agnostic-ai upgrade --requires` before syncing.", "body_md": "## Upgrading from v0.90.0\n\nStop running `agnostic-ai sync --watch` processes before changing the installation or project configuration. Complete the applicable changes below before installing, since package install hooks can run sync.\n\n- **Review empty target lists.**`targets: []` now makes sync warn and keep generated files. Add a target to resume sync, or run`agnostic-ai sync --allow-empty-targets` when you intend to remove generated files.`sync --check` fails while generated files remain; a missing sync state also needs the explicit removal command before a plain check can confirm the result. See[sync and cleanup](https://agnostic-ai.org/docs/cli-reference/sync/) .\n- **Fix repeated YAML keys.** Repeated keys in nested maps now produce a parse error with a line number. Remove the duplicate and keep the value you intend. An empty local key or model tier keeps the shared value; use an empty object to clear a group where supported. See[configuration](https://agnostic-ai.org/docs/configuration/) .\n- **Check shared skill folders.** Qwen now imports`.agents/skills/` . Agents written as skills by Amp, Crush, Warp, or Zed stop when Qwen is selected; set the other tool's`outputs.<tool>.skills-dir` to a separate folder if you need those agents. See[Qwen output](https://agnostic-ai.org/docs/targets/qwen/) .\n- **Update Kimi MCP executors.** Remove`x-kimi.executor: kaos` or choose`local` for a server that should run locally. Sync now rejects unsupported executors. See[Kimi MCP settings](https://agnostic-ai.org/docs/targets/kimi/) .\n- **Choose Vibe sampling for existing global servers.** If an earlier sync adopted a server with`sampling_enabled: true` from a spec that omitted sampling, set`x-vibe.sampling_enabled` to`true` to keep it or`false` to disable it before global sync. See[Vibe global sync](https://agnostic-ai.org/docs/targets/vibe/) .\n\nInstall through your existing package manager. For a global npm installation:\n\n```\nnpm install -g agnostic-ai@0.91.0\n```\n\nRun `agnostic-ai upgrade --requires` from the project to update its requirement and schema URL, then sync. A minimum remains a minimum, an exact requirement remains exact, and a range becomes a minimum. Review the generated changes and run `agnostic-ai sync --check` before restarting watch. See [upgrade options](https://agnostic-ai.org/docs/cli-reference/upgrades/#upgrade).\n\n## What agnostic-ai changed\n\n### Keep files and surface unsafe input\n\nPlain sync and every watch pass keep generated files when the configured target list is empty. Removing one tool from a nonempty list still cleans up that tool's recorded output. Sync reports unreadable JSON settings and state-write failures instead of silently replacing or losing data. Git ignore files are written whole, and failed pack fetches keep the installed content. See [sync behavior](https://agnostic-ai.org/docs/cli-reference/sync/) and [packs](https://agnostic-ai.org/docs/packs/).\n\n### Review context and configure tools in the browser\n\nRun `agnostic-ai serve --open` and open **Context > Context size** to see what each source contributes at startup, inspect a file's scoped context, and copy a review prompt. **Settings > Coding tools** saves shared or personal target selections for the next sync. Settings also offers editor links, and **Open global settings** can create the global folder when needed. See the [web interface](https://agnostic-ai.org/docs/cli-reference/inspect/#serve).\n\n### Preserve more settings on import and sync\n\nCline agent settings and OpenHands agent skills survive native import followed by sync. Gemini MCP OAuth options, including private-network opt-in, also round-trip without placing literal credentials in specs. Kiro settings can write a workspace default model to `chat.defaultModel`; global voice settings now cover Qwen, Gemini, Grok, Vibe, Kiro, and Warp where supported. See [Cline](https://agnostic-ai.org/docs/targets/cline/), [OpenHands](https://agnostic-ai.org/docs/targets/openhands/), and [settings by target](https://agnostic-ai.org/docs/spec-format/settings/).\n\n### Check hooks and MCP servers more reliably\n\nMCP server listing respects its timeout when a detached child keeps stderr open. Hook commands preserve home, environment-variable, and absolute paths, and Windows hook timeouts report the correct result. Import and sync retain Crush's supported lifecycle events and reject invalid matchers. See [hook reference](https://agnostic-ai.org/docs/spec-format/hook-reference/) and [MCP configuration](https://agnostic-ai.org/docs/spec-format/mcps/).\n\nSee the [full release notes](https://github.com/Chemaclass/agnostic-ai/releases/tag/v0.91.0) for the remaining fixes.\n\n## What changed in the targets\n\n### Project defaults and imported agents\n\n[Kiro's settings reference](https://kiro.dev/docs/cli/reference/settings/), checked November 1, documents a default model and workspace settings. This release writes a settings spec's Kiro model to `.kiro/settings/cli.json`; use a model ID Kiro accepts.\n\n[Cline v4.1.26's agent parser](https://github.com/cline/cline/blob/v4.1.26/sdk/packages/core/src/extensions/tools/team/configured-agent-config.ts), released October 26, accepts tools, skills, provider, model, and iteration settings. Import now preserves those settings for sync. [OpenHands documents named skills in file-based agents](https://docs.openhands.dev/sdk/guides/agent-file-based); import now retains those skill names as well. Both sources were checked November 1. The released Cline parser and OpenHands SDK 1.59.0, released October 28, were tested against import and sync output.\n\n### Shared skill paths and workspace rules\n\n[Qwen Code's skill guide](https://qwenlm.github.io/qwen-code-docs/en/users/features/skills/), checked November 1, documents project and user skill locations. This release imports the shared `.agents/skills/` path as well as `.qwen/skills/`.\n\n[Antigravity's current rules guide](https://antigravity.google/docs/rules/), checked November 1, says it does not load rules below the workspace folder. A scoped rule emitted in a descendant folder needs a workspace rooted at that scoped directory. Its [plugin guide](https://antigravity.google/docs/build-plugins) documents `mcp_config.json` at the plugin root; this release corrects the guidance and note for that path. Native discovery was not tested in this audit.\n\n[Junie's CLI reference](https://junie.jetbrains.com/docs/environment-variables.html) documents a custom guidelines filename. [Qoder CLI](https://docs.qoder.com/cli/Skills) and its [IDE extension](https://docs.qoder.com/extensions/skills) describe different skill conflict precedence. The target guidance now names the relevant surface; native precedence was not tested.\n\n### Native hooks and OAuth\n\nCrush v0.99.0, released October 29, documents 13 lifecycle hooks, which this release can import and sync. Gemini CLI v0.66.0, released October 27, documents `oauth.allowPrivateNetwork` as an explicit MCP server opt-in; this release preserves non-secret native OAuth options through import and sync. See the [Crush release](https://github.com/charmbracelet/crush/releases/tag/v0.99.0) and [Gemini CLI release](https://github.com/google-gemini/gemini-cli/releases/tag/v0.66.0).", "url": "https://wpnews.pro/news/agnostic-ai-v0-91-0-keep-files-safe-when-targets-are-empty", "canonical_source": "https://agnostic-ai.org/updates/2026-11-01-v0.91.0/", "published_at": "2026-10-31 23:00:00+00:00", "updated_at": "2026-11-01 21:51:45.479205+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents", "agent-protocols"], "entities": ["agnostic-ai", "Qwen", "Kimi", "Amp", "Crush", "Warp", "Zed", "Cline"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/agnostic-ai-v0-91-0-keep-files-safe-when-targets-are-empty", "markdown": "https://wpnews.pro/news/agnostic-ai-v0-91-0-keep-files-safe-when-targets-are-empty.md", "text": "https://wpnews.pro/news/agnostic-ai-v0-91-0-keep-files-safe-when-targets-are-empty.txt", "jsonld": "https://wpnews.pro/news/agnostic-ai-v0-91-0-keep-files-safe-when-targets-are-empty.jsonld"}}