Concepts
Runtime adapters
Compare runtime adapter delivery for Claude Code, Codex, Cursor, DeepSeek Harness, Grok, Pi, and Oh My Pi.
Coding assistants do not share one file layout, tool set, or lifecycle event model. A runtime adapter converts a Kit into the surfaces the selected assistant can actually discover and use.
An adapter is a compatibility boundary, not a promise of identical behavior. If a runtime has no equivalent for a component, AgentKit may preserve it as inactive supporting content, drop it with a warning, or report it as unsupported.
Project and user scope
Scope answers where the installation is available:
| Scope | Availability | Use it when |
|---|---|---|
| Project | The current workspace | The Kit should travel with or apply only to one project. This is the default. |
| User | The runtime's user directories | You want the Kit available across projects for your user account. The CLI selects this with --global. |
Scope does not determine ownership of your repository. A project-scoped install lets AgentKit manage its recorded installation files in that project; it does not make every project file AgentKit-owned.
Project and user copies can coexist. The runtime may then shadow or duplicate a command or Hook, and updating or removing one scope does not automatically delete the other. Inspect both scopes when behavior appears twice or a runtime loads a different copy than expected.
Native and plugin delivery
Delivery answers how the runtime loads the installation:
- Native delivery writes supported components to the runtime's normal project or user locations. It is the default install mode.
- Plugin delivery packages and activates the Kit through a runtime's plugin
mechanism. In the current supported model, this is an explicit Claude Code
choice made with
--switch-to-plugin, at either project or user scope.
Scope and delivery are independent. Claude Code can therefore use project-native,
user-native, project-plugin, or user-plugin delivery. Codex, Cursor, DeepSeek
Harness, Grok, Pi, and Oh My Pi installs use their native project or user layouts.
Local-source Grok and DeepSeek Harness installs remain available for development
and CI with an explicit --local --kits-dir source.
--switch-to-plugin does not select plugin delivery for these targets.
Within one scope, native and plugin delivery for the same Claude Code Kit are mutually exclusive. Selecting the other mode starts an explicit transition; it does not leave both AgentKit-owned copies active in that scope.
Switching delivery mode is a lifecycle transition. Review the preview because AgentKit may need to withdraw its old registration and create a new one while preserving foreign or modified content.
Capability differences
The supported adapters share core file and tool workflows, but their active surfaces differ:
| Runtime | What to expect |
|---|---|
| Claude Code | Native or explicit plugin delivery. Skills, agents, slash commands, rules, hooks, and the AgentKit status line can be active at project or user scope. |
| Codex | Native Skill discovery, rules, and Agent dispatch through the local AgentKit runtime. Hook support is partial; unsupported groups are not projected, and task-state refresh occurs at supported turn and subagent boundaries rather than after every task tool call. Kit command files remain inactive supporting content, and Codex has no AgentKit status-line surface. |
| Cursor | The adapter projects Skills, agents, rules, and hooks at project or user scope. Kit command files remain inactive supporting content, there is no AgentKit status-line surface, and the adapter does not expose a dedicated plan-management tool. Live install, update, and invocation coverage is not complete across provider setups, so do not infer full parity from source support alone. |
| DeepSeek Harness | Signed registry Kit target with native projection under <project>/.dsh/, plus Skill dispatch through ak run --target dsh. Setup records the enabled adapter and resolves AGENTKIT_DSH_BIN or dsh; it does not install Kit packages. Confirm the user-scope destination from the install summary. Commands and unsupported exports remain inactive sidecars. Explicit local-source installs remain available for development and CI. |
| Grok Build | Signed registry Kit target with native projection. Rules, Skills, agents, and supported Hooks go below <project>/.grok or ${GROK_HOME:-~/.grok}; lifecycle metadata stays separately below <project>/.agentkit/adapters/grok/<kit> or ${AGENTKIT_HOME:-~/.agentkit}/adapters/grok/<kit>. Commands and unsupported exports remain inactive sidecars. Explicit local-source installs remain available for development and CI. |
| Pi | Source-registered --target pi Kit projection. ak setup --adapter and onboard --target list pi as an emitter-only Kit target. Project installs write portable ak-<slug> Skills below .pi/skills/, remapped Agents below .pi/agents/, owned rules below .pi/rules/, and first-party extensions below .pi/extensions/. Conditional global installs write directly under the active Pi coding-agent profile. Pi remains a spike for dispatch: no ak run --target pi, no complete harness wrapper, no .pi/commands/, and inactive sidecars stay under lifecycle ownership. Pi keeps its native TUI footer by default; AgentKit calls setFooter only when an explicit non-none statuslineMode is supplied. |
| Oh My Pi | Native install target for project or user scope, plus non-interactive Skill dispatch through ak run --target omp. Skills, Agents, rules, and Kit instructions use OMP-native discovery surfaces; unsupported exports remain inactive sidecars. Oh My Pi owns its configured backend and credentials. |
Pi projection and discovery
A project install with ak kit init <kit> --target pi writes portable Skill
directories such as .pi/skills/ak-cook/SKILL.md, remapped Agents such as
.pi/agents/Explore.md, .pi/agents/Plan.md, and kit-scoped
.pi/agents/ak-<kit>-*.md, plus owned rules under .pi/rules/. Hooks,
coding-level files, the emitted kit statusline .cjs, runnable scripts, and
sidecars live under .pi/extensions/agentkit-hooks-<kit>/; the shared Agent
runner lives under .pi/extensions/agentkit-agent/. AgentKit does not write
.pi/commands/ or register Pi slash commands. The kit statusline file is
emitted beside the extension; Pi keeps its native TUI footer unless you pass an
explicit non-none statuslineMode.
With --global, AgentKit writes directly below the active Pi coding-agent
profile, resolved from PI_CODING_AGENT_DIR or ~/.pi/agent; it does not add an
extra .pi/ segment under that profile. A fresh install refuses an occupied
profile by default. Pass --force only after reviewing the occupied paths and
deciding to authorize the overwrite. Pi projection is separate from Oh My Pi
dispatch: this release does not provide ak run --target pi or wrap Pi's agent
loop.
Oh My Pi projection and discovery
A project install with ak kit init <kit> --target omp writes portable Skills
below .omp/skills/ak-<slug>/, with top-level name: ak-<slug> in each projected
SKILL.md. Agents go to .omp/agents/<name>.md, and rules go to
.omp/rules/<name>.md. Body aliases such as /ak:cook and $ak:cook are not
rewritten. AgentKit also adds one Kit-scoped block to the project's
AGENTS.md, delimited by <!-- AGENTKIT-OMP:START:<kit> --> and
<!-- AGENTKIT-OMP:END:<kit> -->. Updating or uninstalling that Kit changes only
its managed block and preserves user content.
With --global, AgentKit resolves the OMP root in this order:
AGENTKIT_OMP_HOME, OMP_HOME, PI_CODING_AGENT_DIR, then ~/.omp/agent.
The same skills/, agents/, and rules/ directories plus AGENTS.md live
below that resolved root. Commands, Hooks, schemas, scripts, status-line files,
and other unsupported Kit surfaces stay inactive under
.agentkit/adapters/omp/<kit>/sidecars/ instead of being projected as native
OMP behavior.
Installation and dispatch are separate routes. ak kit init ... --target omp
creates the discoverable Kit projection; ak run <kit>/<skill> --target omp
runs one resolved Skill through the local OMP CLI without replacing that
installed inventory or changing the <kit>/<skill> selector.
Trusted project OMP also discovers project .agents/skills. If canonical forms
such as ak:advise and ak-advise collide, a project OMP install in
.omp/skills shadows the project .agents/skills copy. When you use a global
OMP install from that trusted project, the project .agents/skills copy shadows
the OMP profile copy. ak kit init --target omp warns and continues: it still
emits OMP content, does not delete or rewrite either Skill, does not alter
.agents or OMP settings, and does not require --force or return exit 6.
Native Grok exec-form command Hooks use the owned
agentkit-grok-envelope-shim.cjs launcher to add the Claude-shaped fields and
tool names that Kit scripts expect. HTTP handlers and command handlers without
exec-form arguments receive Grok's raw camelCase envelope. Project Hooks remain
inactive until you explicitly trust the project. Hook timeout, crash, malformed
output, and shim errors fail open; only an applicable PreToolUse denial blocks
the action, so pair safety-sensitive Hooks with Grok permissions.
ak run <kit>/<skill> --target dsh and ak run <kit>/<skill> --target grok
are native AgentKit dispatch routes. DeepSeek Harness resolves AGENTKIT_DSH_BIN
or dsh; Grok resolves AGENTKIT_GROK_BIN or grok. AgentKit owns process
framing, while the runtime and user own the model, authentication, trust,
permissions, sandbox, and native config. Grok dispatch is separate from Grok's
Claude-compat scanner reading .claude settings. Remote DeepSeek Harness and
Grok init and refresh use signed registry packages. Use --local --kits-dir
only when you intentionally select a development or CI source.
For native Claude Code Hooks, AgentKit checks the complete runtime closure before changing files. Preflight stops without mutation when untracked or modified content would collide with runtime-owned output. Replacement requires an explicitly authorized force operation, and a collision introduced after preflight is still rejected by the final check instead of being overwritten.
A Codex projection limit does not fail the installation. A fully unsupported
group is omitted and listed under Hook groups not projected; JSON can include hooksDropped and droppedHookSummaries. A partial
matcher keeps its handlers on the supported atoms and is listed under Hook
matchers narrowed (some tool matches unsupported on this target); JSON can
include hookMatchersNarrowed and narrowedHookSummaries. All four fields are
optional and omitted at zero.
For Engineer, the unsupported task-state PostToolUse group is fully dropped,
while two shared matchers are narrowed. For Marketing, three matchers are
narrowed and no group is fully dropped. These are capability disclosures, not
new failure classes. Claude Code and Cursor adapter destinations and inventories
are unchanged; do not infer new Cursor parity from shared package changes.
On Windows, AgentKit can make an eligible .cjs Hook inside the resolved Codex
home work from an ordinary path containing spaces by creating a managed
sibling .cmd shim. This does not cover a spaced external path, a path with
cmd.exe metacharacters, a non-ASCII shim name, or unsafe/non-ASCII baked
arguments; those cases remain unsupported on Windows and warn. Empty arguments
are rejected distinctly, identical same-path shims deduplicate, and a conflicting
same-path shim keeps the first emitted content and warns. Paths that do not need
a shim continue to use the direct command.
A wrapper-managed Codex home may link only its final hooks leaf to the
resolved user's canonical ~/.codex/hooks directory. The link may be a POSIX
symlink or a Windows directory junction. AgentKit resolves that alias once and
uses the canonical path for Hook writes, commands, rollback, and ownership. A
linked parent, or a leaf that resolves to anything other than the canonical user
hooks directory, is refused.
Do not infer runtime support from a file name or from another runtime's behavior. Use the install summary and the relevant Skill documentation as the authority for what became active. A warning about preserved or omitted content is a capability result, not necessarily a failed installation.
Choosing an adapter
- Choose the assistant where you will run the workflow.
- Choose project or user scope based on where it should be available.
- For Claude Code, keep native delivery unless you deliberately want plugin activation and lifecycle.
- Choose DeepSeek Harness with
--target dshwhen you want the signed DeepSeek Harness Kit package, or useak run --target dshfor direct Skill dispatch through the localdshbinary; add--local --kits-dironly for development or CI sources. - Choose Grok Build with
--target grokwhen you want the signed Grok Kit package; add--local --kits-dironly for development or CI sources. - Choose Oh My Pi with
--target ompwhen you want the signed OMP Kit package, or useak run --target ompfor direct Skill dispatch. - Review adapter warnings after installation, especially for Hooks and runtime-only UI surfaces.
- Start a fresh runtime session if the assistant has not reloaded newly installed content.
For installation commands, see Installing kits. For the component model, see Kits, Skills, Agents, and Hooks.
Runtime capability matrix
Package availability is release-bound; installation does not prove dispatch or live provider parity.
| Runtime | Registry package | Project / global | Setup/onboard | ak run | Limits |
|---|---|---|---|---|---|
| Claude Code | Yes | Yes / Yes | Yes | Yes | Native/plugin |
| Codex | Yes | Yes / Yes | Yes | Yes | MCP runtime dispatch |
| Cursor | Yes | Yes / Yes | Yes | Yes | Production projection; live parity is not fully verified |
DeepSeek Harness (dsh) | Yes | Yes / Yes | Yes | Yes | Native projection and dispatch |
| Grok / Oh My Pi | Yes | Yes / Yes | Yes | Yes | Provider authentication is runtime-owned |
| Pi | Yes | Yes / Yes | Yes | No | Emitter target; orchestration is separate |
Cloud Harness (cloud-harness) | Yes (distribution-only) | No / No | No | No | Signed package published for the Cloud Harness MCP harness; ak rejects it as a local install target |
| AGY | No | No / Yes | No | No | Global-only Skill and optional Agent export; signed Claude Code package source; no project, Hook or MCP projection |
| Portable | No | Export with --out | No | No | Standalone files; no installed runtime lifecycle |
| OpenCode | No | No | No | No | Unregistered adapter stub; external orchestration requires its own live probe |
AGY is not a full refresh peer. Its global export and ownership cleanup do not imply ak run --target agy support. Setup target choices exclude export-only targets. cloud-harness is likewise not a kit init, setup, or ak run target; the Cloud Harness MCP harness consumes its signed package directly. No fresh live provider canary is claimed by this matrix.
hooksDeferred is a subset of hooksDropped: the harness bridge defers that subscription, which does not mean the runtime cannot express it. Read the summary to distinguish deferred from unsupported groups.
For model selection and Agent-specific overrides, read Agent models across runtimes.