Shipped in agnostic-ai v0.59.0

Added

  • agnostic-ai verify blocks stale generated output, fingerprints the selected harness, and sends versioned JSON with the configured model and detectable CLI identity to a project-owned verifier. Output and non-zero exit codes pass through to CI (#834).
  • Amp environment specs emit dependency setup as executable .agents/setup scripts and long-running terminals as supervised .amp/services.yaml services. Amp's wake-time .agents/resume lifecycle stays intentionally unmapped (#637).
  • Goose and OpenHands emit project agents to their shared .agents/agents/<name>.md path with portable name, description, model, and prompt content. Generic tool lists raise a coverage note instead of silently using the wrong vocabulary (#631).
  • Goose hook specs emit a complete Open Plugins package: manifest, 12 lifecycle events, regex matchers, seconds-based timeouts, and x-goose.on_failure policy (#629).
  • Portable model settings round-trip through Codex, Copilot, OpenCode, Junie, Qoder, and Kilo. Qoder also supports shared allow, deny, and ask permissions. Target-specific settings, unrelated keys, and Codex overlay precedence remain intact (#806, #827).
  • Augment and Factory emit native Markdown commands, preserving documented frontmatter and $ARGUMENTS; Augment also preserves nested command namespaces (#630).
  • Augment ignore specs emit to .augmentignore, and import augment preserves existing pattern order and negations (#808).
  • Directory-scoped skills stay scoped through emit and import on Codex, Cursor, Warp, and OpenCode (#805).
  • agnostic-ai.org is the canonical GitHub Pages site, with consistent assets, social previews, release links, discovery files, and Cronitor RUM coverage for the site and playground.
  • Coding agents can follow /agent-setup.txt to install, import, configure, sync, and verify agnostic-ai safely. The website and README expose the same ready-to-paste prompt, and the plain-text endpoint and llms-full.txt are generated from canonical user guides.
  • User guides live at /docs/ with task-based navigation, page outlines, mobile browsing, and source links. Website, repository, and llms-full.txt share one Markdown source.
  • The updates archive filters whole editions by one or more targets and search terms, keeps applied filters in shareable URLs, and serves the complete date-ordered archive when JavaScript is unavailable.
  • Release briefings ship with each release and keep the exact project changelog separate from verified upstream CLI and model news, high-impact changes first, each item stating agnostic-ai support. target-audit produces the evidence-backed reports and issues behind them, and --compare-models <model> adds a bounded challenge pass without treating model agreement as proof.

Changed

  • The site builds with Zola 0.22.0 from shared templates and Markdown content. One responsive navbar, theme control, and header span every page including the playground, and a new briefing updates the latest edition, archive, RSS feed, compatibility alias, and sitemap without design edits. Legacy URLs and feed identifiers remain stable.
  • The landing page leads with a platform-matched, copy-ready install command, a three-step activation path, a ten-target integration comparison across rules, agents, skills, MCP, hooks, commands, and portable permissions, and the latest ecosystem briefing. The README keeps installation and core task guides one click away. The site shell, playground, and favicons share the aⁱ brand mark.
  • The target capability matrix shows clear support states, filters by target name or selection, preserves comparisons in shareable URLs, keeps target and capability context visible on desktop, and switches to a vertical target summary on mobile. CI checks every status against adapter capability declarations.
  • The playground exposes all ten portable spec kinds, opens on an agent spec targeting Claude, Codex, and Gemini, marks unsupported targets before rendering, and reads capability support directly from adapter declarations so target-audit fixes reach the next Pages build automatically. Changing kind swaps an untouched built-in sample to the matching kind and preserves user-edited source.
  • The coding-agent setup guide opens with a copy-ready TL;DR prompt, keeping the full safety and validation workflow below it.
  • Antigravity agents use the documented .agents/agents/<name>/agent.md layout, avoiding collisions with Goose and OpenHands. Import prefers nested profiles, and sync migrates managed legacy flat files (#717).

Fixed

  • Codex imports package-style MCP server names containing / into one safe source file and preserves the exact name through sync; shared MCP importers and Continue per-server output use the same filename rule (#711).
  • Amp, Cline, and Windsurf import every documented project skill path with explicit collision precedence, bundled assets, and file modes. Windsurf also preserves native triggers invocation policy through import and sync (#821, #823).
  • Kiro preserves an explicit x-kiro.name display name while keeping the canonical spec name as the filename (#807).
  • Claude prompt hooks preserve continueOnBlock; Copilot preserves HTTP and sessionStart prompt handlers through emit and import (#804, #629).
  • Zed maps WorktreeCreate hooks to native create_worktree task hooks and restores the event on import (#817).
  • Factory and Windsurf skip unsupported WebSocket MCP entries with a coverage note instead of writing invalid native configuration (#809, #816).
  • Amp verification uses the current installer and npm package, and Copilot audits track its canonical repository settings and model policy reference (#822).

Upstream CLI and model news

Every item below was checked against its primary vendor page on 2026-09-16. None of these pages carries a publication date, so the check date is what is stated. Upstream availability is not agnostic-ai support; each item names its support state.

OpenHands deprecates its legacy agent names

Product: OpenHands SDK. Checked: 2026-09-16. State: watch.

The file-based agent documentation marks the legacy agent names deprecated as of v1.12.0, with removal planned for 2.0.0. A project pinning an old name gets a working agent today and a broken one after the 2.0.0 cut. Source: file-based agents. The shared .agents/agents/<name>.md output this release adds for Goose and OpenHands writes the portable name, so a project that keeps its agent names in specs is not carrying a vendor-specific legacy name forward.

Qoder and OpenHands put approval policy on the agent

Product: Qoder CLI, OpenHands SDK. Checked: 2026-09-16. State: target extension on Qoder, adapter gap on OpenHands, design candidate for a portable field.

Qoder documents permissionMode on subagent frontmatter with default, acceptEdits, bypassPermissions, dontAsk, auto, and plan. Omission inherits the parent session, and the page is explicit that a subagent under a parent already in acceptEdits, bypassPermissions, or auto cannot make itself stricter. OpenHands documents permission_mode with always_confirm, never_confirm, and confirm_risky, also inheriting from the parent conversation when omitted. The two enums are not equivalent, and neither maps onto a shared field today. Qoder keeps its native value through x-qoder; the OpenHands agents this release adds carry name, description, model, and prompt only. Sources: Qoder subagents, OpenHands file-based agents. Tracked as a design question in #826.

Lifecycle hooks can be scoped to one agent

Product: Qoder CLI, OpenHands SDK. Checked: 2026-09-16. State: target extension on Qoder, design candidate.

Qoder says hooks in subagent frontmatter "are scoped to that Subagent session", across PreToolUse, PostToolUse, PostToolUseFailure, Stop, SubagentStart, SubagentStop, and Notification, with command, HTTP, prompt, and agent handlers. OpenHands documents the same idea in snake_case with command handlers. A Hook spec here has no agent relationship, so a team wanting validation inside one delegated agent writes it natively. Sources: Qoder subagents, OpenHands file-based agents. Tracked in #825.

Reasoning effort is a per-agent field on Qoder and Factory

Product: Qoder CLI, Factory. Checked: 2026-09-16. State: target extension, design candidate.

Qoder accepts effort as low, medium, high, xhigh, max, or a positive integer. Factory accepts reasoningEffort as low, medium, or high "for models that support it", and ignores it when the droid uses model: inherit. Both are preserved through target extensions, and the portable model settings this release adds cover the model itself, not its reasoning budget. Sources: Qoder subagents, Factory subagents. Tracked in #824.