# `Raxol.AgentClientProtocol.Schema.Unstable`
[🔗](https://github.com/DROOdotFOO/raxol-agent/blob/raxol_agent_client_protocol-v0.1.0/packages/raxol_agent_client_protocol/lib/raxol/agent_client_protocol/schema/unstable.ex#L1)

Unstable ACP types that are not yet part of the stable protocol surface —
the Elixir counterpart of the Rust reference implementation's
`#[cfg(feature = "unstable_*")]`-gated types: session model selection
(`session/set_model`), generic session config options
(`session/set_config_option`), session fork/resume/list
(`session/fork`, `session/resume`, `session/list`), and their capability
flags. These may be removed or changed at any point; callers should gate
their use on the corresponding `Raxol.AgentClientProtocol.Schema.AgentTypes.
SessionCapabilities` fields (`:list`, `:fork`, `:resume`) rather than
assuming availability.

Every struct here carries an `_meta` map (default `%{}`), total on decode
via the shared `Raxol.AgentClientProtocol.Schema.AgentTypes` decode helpers
(`fetch/2`, `decode_list/2`, `decode_optional/3`, `extract_meta/2`,
`put_meta/2`) — unrecognized top-level wire keys are folded into `_meta` on
decode and re-emitted on encode. `from_json/1` never raises.

## Cross-module references

`SessionInfoUpdate` uses `Raxol.AgentClientProtocol.Schema.MaybeUndefined`
for its three-state undefined/null/value fields.
`ForkSessionRequest`/`ResumeSessionRequest.mcp_servers` and
`ForkSessionResponse`/`ResumeSessionResponse.modes` reference
`Raxol.AgentClientProtocol.Schema.AgentTypes.{McpServer,
SessionModeState}`.

Note: `ACP.SessionUpdate`'s unstable variants (`config_option_update`,
`session_info_update`) are wired in
`Raxol.AgentClientProtocol.Schema.SessionUpdate` (`session_update.ex`),
not here. This file defines only the payload structs those variants
carry (`ConfigOptionUpdate`, `SessionInfoUpdate`).

Ported from the MIT `f1729/agent_client_protocol` (c) 2025 f1729; see NOTICE.md.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
