Capability Matrix¶
Capabilities are declared contracts, not feature guesses. Kedi validates the active profile against them and fails when a required surface is unavailable.
The tables between the generated markers come directly from the built-in
adapters' AdapterCapabilities. Run
python scripts/sync_capability_matrix.py after changing adapter metadata.
Every built-in adapter also implements raw text invocation because invoke is
part of the base adapter protocol rather than an optional capability.
Framework Adapters¶
| Capability | Pydantic AI | DSPy | LangChain |
|---|---|---|---|
| Structured output | yes | yes | yes |
| Kedi tool registration | yes | yes | yes |
| Kedi-declared MCP | yes | yes | yes |
| Profile override | yes | yes | yes |
| Model override | yes | yes | yes |
| Effort | yes | yes | yes |
| Settings | yes | yes | yes |
| Code mode | yes | no | yes |
| Native approvals | yes | no | yes |
| Dynamic native approval handler | yes | no | yes |
| Foreground subagents | yes | yes | yes |
| Background subagents | yes | no | yes |
| Semantic stream events | yes | no | yes |
Agent Harnesses¶
| Capability | Claude Agent SDK | Codex App Server | ACP |
|---|---|---|---|
| Structured output | yes | yes | no |
| Kedi tool registration | yes | yes | no |
| Kedi-declared MCP | yes | no | no |
| Profile override | yes | yes | yes |
| Model override | yes | yes | no |
| Effort | yes | yes | no |
| Settings | yes | yes | yes |
| Code mode | yes | yes | no |
| Native approvals | yes | yes | no |
| Dynamic native approval handler | yes | no | no |
| Foreground subagents | yes | yes | no |
| Background subagents | yes | yes | no |
| Semantic stream events | yes | yes | yes |
ACP is intentionally a raw-text harness. It starts a fresh ACP session for each Kedi invocation and consumes text chunks. Structured captures, Kedi tools, MCP projection, model selection, effort, and subagents are rejected rather than simulated.
“Native approvals” means the adapter can project Kedi's policy into its own tool loop. Kedi still performs argument validation and risk classification around registered tools. Transport modes, provider support, and other adapter-specific constraints are not represented by the boolean capability metadata; consult the corresponding adapter page.
Structured Schema Notes¶
Framework support still depends on the selected provider/model. Codex accepts
string schema formats date, date-time, duration, email, and time; it
rejects Kedi output schemas requiring Regex, HttpUrl, or FileUrl. Claude
accepts the documented built-in formats. Validate the exact production model,
not only the adapter.
Capability Meanings¶
| Capability | Required by |
|---|---|
structured_output |
Any >> block containing output fields |
tool_registration |
> use: of a procedure or Python callable |
mcp |
One or more > mcp: servers |
profile_override |
Lexical/profile state changes |
model_override |
Explicit > model: |
effort |
Explicit > effort: |
settings |
Nonempty > settings: |
codemode |
> codemode: enabled progressive tool discovery and bounded execution |
native_approvals |
Adapter-owned risky tool loop |
native_approval_handler |
Dynamic handler projected natively |
subagents |
> subagent: |
background_subagents |
Background lifecycle tools |
stream_events |
Completed semantic commentary/final messages and run lifecycle events |
Raw invokes with no structured fields can run on a text-only adapter. A profile may be syntactically valid but capability-invalid for its selected backend; that mismatch is an error before Kedi pretends the feature is active.
codemode replaces ordinary application-tool disclosure with explicit tool
search, schema hydration, and bounded code execution. Pydantic AI, LangChain,
Claude Agent SDK, and Codex App Server implement the Kedi-owned surface; Kedi
does not infer it from ordinary tool registration.
Custom Adapters¶
A custom AgentAdapter declares kind, shortname, and
AdapterCapabilities, then implements async/sync structured production and raw
invocation. Set an unsupported capability to false/None; never advertise a
surface and silently ignore it. See Custom Adapters.