Harness compatibility
What each harness receives natively — capabilities, invocation, context, hooks
Harness compatibility
Current matrix, derived from the integration implementations themselves.
| Harness | AGENTS.md | Skill | User-only | MCP | Package | Agents | Hooks | Session | Shim |
|---|---|---|---|---|---|---|---|---|---|
| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🧪 | |
| 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🧪 | |
| 🟢 | 🟢 | 🟢 | 🟢 | ⚪ | 🟢 | 🟡 | 🟢 | 🧪 | |
Antigravity | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🧪 |
🟢 native · 🟡 adapted · 🟠 degraded · ⚪ roadmap · 🧪 experimental · — n/a
Project context: All harnesses read AGENTS.md natively via uze;
@AGENTS.md bridge for Claude Code, native file for others.
Planned harnesses
| Harness | Status |
|---|---|
| Cursor CLI | ⚪ |
| Muse | ⚪ |
| PI | ⚪ |
⚪ roadmap — no integration yet; cells flip when it lands.
Invoking a plugin
flow:commit is model+user; workflow:review is user-only (never auto-invoked):
| Harness | flow:commit (default) | workflow:review (user-only) |
|---|---|---|
/flow:commit | /flow:review | |
$flow:commit | $flow:review | |
@flow:commit | @flow:review | |
Antigravity | /flow:commit | /flow:review |
Reading the columns
| Column | The question it answers |
|---|---|
| AGENTS.md | Does the harness reach the project's context, natively or through the one bridge? |
| Skill | Is a canonical Skill delivered with its semantics intact? |
| User-only | Can a skill be marked explicit action only, so the model never auto-invokes it? |
| MCP | Is an MCP server delivered through the harness's own mechanism? |
| Package | Does the harness consume a plugin envelope at all, or only individual capabilities? |
| Agents | Is a portable agent profile delivered to a native agent surface? |
| Hooks | Does a portable hook reach the harness's own hook configuration? |
| Session | Can uze put a relaunched agent back into the conversation it was in? |
| Shim | Runtime context projection through the PATH shim — experimental everywhere. |
Notes per harness
Each name links to that harness's own site; what follows is how uze delivers to it.
- Claude Code — plugin delivery through a UZE-managed marketplace; a skills-directory
reference is the fallback. Project context arrives through the
CLAUDE.mdbridge (@AGENTS.md) — the only bridge uze maintains. Hooks merge into its own user-scope hook configuration. - Codex — the same marketplace model; its skills root (
~/.agents/skills) is shared with OpenCode, which uze accounts for when resolving names. User-only skills carryagents/openai.yamlwith implicit invocation disabled. Hooks merge into Codex's ownhooks.jsoncommand form. - OpenCode — consumes no external plugin envelope: skills and agents are delivered natively,
MCP through its global config, and hooks through an owned, regenerable plugin bridge, since no
declarative hook surface exists. A Skill is invoked as a mention (
@flow:commit), not a slash command —slash: falsewithholds one from the/catalog but a mention still expands it, which is why auser: falsepolicy is reported adapted rather than native. Its binary is detected asopencode, with the legacyopencode2alias still resolved. - Antigravity — the Google-family v0 harness (ADR-027): the canonical
plugin.jsonis a valid plugin manifest, so envelope-less packages install straight from the Store. Non-default invocation policies are adapted — no explicit-only mechanism exists, so skills stay model-discoverable and slash-invocable. It carries the widest hook effect set of the four.
Profiles
Profiles are beta — the axes are settled, the per-harness translations are not. The management TUI marks the screen accordingly.
Alongside packages, uze models user intent about how a harness behaves, and each integration translates it into that harness's own settings file. Three axes, deliberately small:
| Axis | Values | What it means |
|---|---|---|
| Autonomy | manual, balanced, auto, unattended | How much the harness may do without asking |
| Sandbox | read-only, workspace-write, full-access | How far its writes and execution reach |
| Model | default, fast, capable | A capability tier — never a literal vendor model id |
Edit them on the Profiles screen of the management TUI (Ctrl+O). Apply makes the
selected profile active and writes it into every checked harness; being active and being in effect
are different things, so the drawer says which — a profile edited since it was applied, or a
settings file changed by hand, reads Active, not in effect.
Preview (v, or the drawer's Preview button) answers before anything is written: one row
per harness with a word for each axis — as asked, adapted (set another way), partial (not
fully honoured) or n/a (no such setting) — and whether applying would change anything there. A
harness with something to write opens by itself onto its own file: each key with what applying
adds, changes or removes, and the reason behind any partial or n/a. For example:
- Claude Code's sandbox limits writes to the working directory, which is
workspace-writeexactly;read-onlycannot be delivered from user-scope settings and is reported degraded. On Linux and WSL2 its sandbox needsbubblewrapandsocat, and the preview says when one is missing — without them Claude runs every command unsandboxed. Auto mode does not run on Haiku, soautowith thefastmodel accepts edits instead and says why. - A
defaultmodel is the key being absent, never the worddefault, which Claude Code cannot resolve. Any model that does resolve is left where it is — nothing in the file says whether you wrote it or an earlier profile did, so uze never assumes it was its own. - Codex needs an exact model id and publishes no tier-alias catalogue, so anything but
defaultis reported unsupported rather than guessed into a model that may not exist. It no longer has a policy that asks before every command, somanualis its most careful one, reported degraded. - OpenCode has no single autonomy key — permissions are independent per-category values — so
autonomyis always adapted, decomposed across several keys. - Antigravity's model is a label from the signed-in account's own catalogue, so
fastandcapableare unsupported; its other mappings are adapted, never native.
Every value uze writes is checked against the shipped harness binaries, not only their docs.
A preference is never carried by guessing a key. Where a harness cannot express an axis, uze says so and writes nothing: overwriting a setting you made yourself is worse than not carrying the intent.
The runtime PATH shim
An experimental mechanism that projects AGENTS.md into a harness without writing into the
project — a real shim symlink in $UZE_HOME/shims that resolves the real harness binary without
ever recursing into itself, a boundary held by its own test. Disable it by removing the symlink.
Antigravity