# agnostic-ai v0.87.0: run portable commands as skills

> Source: <https://agnostic-ai.org/updates/2026-10-22-v0.87.0/>
> Published: 2026-10-21 22:00:00+00:00

## Upgrading from v0.86.0

Stop any running `agnostic-ai watch` process before updating the installation or project config.

Projects using `lint --strict` now fail on overlay files that no tool reads, such as `.agnostic-ai/overlays/gemini.settings.json`. Rename or remove those files after checking the [supported overlays](https://agnostic-ai.org/docs/spec-format/overlays/). Dot files, dot folders, and top-level README files are skipped.

Existing commands now produce skill files on qualifying targets. Review sync's notes when tools share a skills folder: a tool that reads another tool's copy can see it even when excluded from the command's targets. Except for Codex, command conversion requires that no other enabled tool writes the same skills folder. See [tools without commands](https://agnostic-ai.org/docs/spec-format/commands/#tools-without-commands).

Install through your existing package manager. For a global npm installation:

```
npm install -g agnostic-ai@0.87.0
```

For an exact project pin, `agnostic-ai upgrade --requires` updates `requires` and the schema URL, then syncs. It also replaces minimum or range requirements and local overrides. To keep a deliberate range or minimum, retain that requirement and update the schema URL to `v0.87.0` yourself. This release needs no spec-format migration from v0.86.0. See [upgrade options](https://agnostic-ai.org/docs/cli-reference/upgrades/#upgrade).

Run `agnostic-ai sync`, review the generated diff, and run `agnostic-ai sync --check` before restarting watch. Release binaries use Go 1.27.3, which includes the certificate verification fix [GO-2026-6809](https://pkg.go.dev/vuln/GO-2026-6809).

## What agnostic-ai changed

### Run commands as skills in more tools

Codex, Copilot, Zed, Windsurf, and Crush can receive a command as a skill you start yourself. Create a command with the existing workflow:

```
agnostic-ai new command review-changes
agnostic-ai sync
```

Codex writes the skill under `.agents/skills/` with its invocation policy in `agents/openai.yaml`. Copilot uses `.github/skills/`. Zed, Windsurf, and Crush write their native invocation fields. Codex keeps its earlier command output when `outputs.codex.commands-dir` is set.

A skill spec or hand-written native skill with the same name wins over the command. These skills treat the text after the name as arguments; they do not perform native `$ARGUMENTS` or `$1` substitution. Sync names those limits. The [command reference](https://agnostic-ai.org/docs/spec-format/commands/#tools-without-commands) covers invocation, native paths, and collisions.

### Find why Claude cannot see a synced skill

`doctor` reports synced skills hidden, disabled, or reduced to a name by `skillOverrides`. For an existing skill, inspect the matching settings entries:

```
agnostic-ai doctor
agnostic-ai explain .agnostic-ai/skills/deploy/SKILL.md
```

The report checks project-local, shared project, and user settings, and marks entries a higher file overrules. Managed settings and command-line `--settings` are outside these readers. Invalid JSON and rejected values are reported. `doctor --fix` can ask to remove matching entries from project-local settings; it leaves user and shared settings alone. See [Claude skill overrides](https://agnostic-ai.org/docs/cli-reference/check/#claude-skill-overrides).

### Keep deliberate Windsurf invocation edits

When no other enabled target writes a Windsurf skills folder, removing `triggers` from its native skill file and running `agnostic-ai import windsurf --overwrite` now survives the next sync. The permission changes for Windsurf only; other tools keep the portable user-only restriction. A shared folder keeps the restriction because sync omits `triggers` there too. Import also reads `outputs.windsurf.skills-dir` when configured. See [Windsurf skills](https://agnostic-ai.org/docs/targets/windsurf/#skills).

Claude MCP permission names also keep their intended server scope when a name contains `__` or ends in `_`. Hook lint no longer rejects `SessionEnd` matchers on Claude Code or Codex. The [full release notes](https://github.com/Chemaclass/agnostic-ai/releases/tag/v0.87.0) cover the smaller fixes and documentation changes.

## What changed in the targets

The following documentation was checked on October 22, 2026.

- **Claude Code sandbox exceptions have a user-settings boundary.** In v2.1.305 and later,`sandbox.allowNestedUserNamespaces: true` is ignored in project settings. It can count from user, managed, or command-line settings, and lets sandboxed code escape the sandbox. This release corrects the guide; it does not add a portable permission.[Claude sandbox setting](https://code.claude.com/docs/en/settings-reference#sandbox-allownestedusernamespaces) .
- **Ellipsis reviews can use Gemini CLI.** The current schema names the engine`gemini` , with models`gemini-4-argon` or`gemini-3.8-flash` . v0.87.0 writes and imports`x-ellipsis.reviewer.gemini` . These sessions use Ellipsis credits; Ellipsis lists skills as unsupported for this engine. See the[Ellipsis reviewer mapping](https://agnostic-ai.org/docs/targets/ellipsis/#first-review) ,[review schema](https://www.ellipsis.dev/docs/code-review/schema) , and[Gemini CLI limits](https://www.ellipsis.dev/docs/harnesses/gemini) .
