Skip to main content

CapabilitiesV3

Struct CapabilitiesV3 

Source
pub struct CapabilitiesV3 {
Show 26 fields pub schema_version: String, pub summary: String, pub to_describe_to_user: String, pub tools: Vec<ToolEntry>, pub agent_permitted_families: Option<Vec<String>>, pub your_harness_supports_deferred_registration: Option<bool>, pub tier: String, pub version: String, pub features: CapabilityFeatures, pub models: CapabilityModels, pub permissions: CapabilityPermissions, pub hooks: CapabilityHooks, pub compaction: CapabilityCompaction, pub approval: CapabilityApproval, pub transcripts: CapabilityTranscripts, pub hnsw: CapabilityHnsw, pub kg_backend: Option<String>, pub memory_kinds: Vec<String>, pub reflection: CapabilityReflection, pub skills: CapabilitySkills, pub forensic: CapabilityForensic, pub governance: CapabilityGovernance, pub atomisation: CapabilityAtomisation, pub memory_kind_vocab: CapabilityMemoryKindVocab, pub confidence_calibration: CapabilityConfidenceCalibration, pub provenance_substrate_layer: CapabilityProvenanceSubstrateLayer,
}
Expand description

v0.7.0 capabilities schema (A1 increment). Additive over Capabilities (v2): the top-level summary field carries a pre-computed, plain-language description of the LLM’s operational tool surface so reasoning-class LLMs converge on accurate first-answer descriptions without having to traverse families[] and count manually.

Wire selection: clients opt in via accept="v3" on the MCP memory_capabilities call, or Accept-Capabilities: v3 over HTTP (HTTP wiring lands with A5). Default response remains v2 until A5 flips the default. v2 stays supported indefinitely.

Increment plan: A2 adds to_describe_to_user, A3 adds per-tool callable_now, A4 adds agent_permitted_families. A5 bumps the default wire shape and seals v3 as the recommended client target.

Fields§

§schema_version: String

Schema-version discriminator. Always "3" in v0.7.0.

§summary: String

Pre-computed plain-language summary of operational access. Carries the loaded vs total tool counts under the active profile plus the three named recovery paths (--profile, memory_load_family, memory_smart_load). Computed at response time from the live profile state — never cached at build time because the count of advertised tools depends on the running server’s --profile flag.

§to_describe_to_user: String

v0.7.0 A2 — pre-computed end-user-facing sentence the LLM should repeat verbatim when an end-user asks “what tools do you have?”. Distinct in tone from Self::summary: no MCP jargon, no --profile references, no JSON-RPC vocabulary. Reads as a normal sentence a human would say. See docs/v0.7/canonical-phrasings.md for the canonical substitution template + worked examples per profile.

§tools: Vec<ToolEntry>

v0.7.0 A3 — per-tool array carrying name, family, loaded, and callable_now. callable_now combines profile-side loaded-state with the [mcp.allowlist] agent-can-call decision so an LLM that caches this manifest can skip a doomed JSON-RPC call rather than discovering -32601 the hard way. Order matches tool_definitions()’s registration walk so a sequential reader gets a stable presentation.

§agent_permitted_families: Option<Vec<String>>

v0.7.0 A4 — list of family names this agent is permitted to access via the [mcp.allowlist] gate. Present (with possibly an empty array) only when the allowlist is configured AND an agent_id was provided. Absent when the allowlist is disabled or no agent_id was provided — that absence is meaningful, not a drift, hence Option<Vec<String>> + skip_serializing_if.

LLMs that keep a per-agent manifest cache can use this to short-circuit family-level decisions without iterating tools[] and counting unique families.

§your_harness_supports_deferred_registration: Option<bool>

v0.7.0 B4 — whether the active MCP harness exposes tools registered after the initial tools/list to the LLM. Computed at response time from the harness detected at the initialize.clientInfo.name handshake (see crate::harness).

Some(true) only for Claude Code today (deferred registration via ToolSearch). Some(false) for every other named harness. None (omitted from the wire via skip_serializing_if) when no clientInfo was captured — typically HTTP callers, or an MCP client that issued memory_capabilities before initialize (malformed but defensively handled by absence).

Track B’s runtime loaders (B1 memory_load_family, B2 memory_smart_load) key off this bit to shape their to_invoke text — on false harnesses they advise the LLM to ask the operator for a --profile <family> restart rather than expect the new tools to appear mid-session.

§tier: String§version: String§features: CapabilityFeatures§models: CapabilityModels§permissions: CapabilityPermissions§hooks: CapabilityHooks§compaction: CapabilityCompaction§approval: CapabilityApproval§transcripts: CapabilityTranscripts§hnsw: CapabilityHnsw§kg_backend: Option<String>

v0.7 J1 — knowledge-graph backend tag forwarded from the v2 projection. Some("age" | "cte") once the SAL handle is threaded through AppState; None while no SAL adapter is wired. Skipped from the JSON wire when None so older clients that don’t know the field round-trip cleanly.

§memory_kinds: Vec<String>

L1-1 (v0.7.0) — typed memory-kind set. Forwarded from the v2 projection’s memory_kinds field. Always ["observation", "reflection"] for v0.7.0.

L3-5 honesty note. The grand-slam spec called for a third "goal" kind here, but the crate::models::memory::MemoryKind enum in this binary only carries Observation and Reflection. Per the operator’s “every reported field maps to real implementation” directive, the v3 surface reports exactly what the substrate enforces — the goal kind is deferred to the tracker (a4f8d465) for a v0.8.0 wave that lands the enum variant + migration + write-path coverage. Reporting it here today would be theatrical.

§reflection: CapabilityReflection

v0.7.0 L3-5 — recursive-learning capability surface. Every sub-field anchors a real implementation in this binary; see CapabilityReflection for the per-field audit anchors.

§skills: CapabilitySkills

v0.7.0 L3-5 — Agent-Skills capability surface. Lists the seven registered memory_skill_* MCP tools; the round-trip guarantee is pinned by tests/skill_test.rs. See CapabilitySkills.

§forensic: CapabilityForensic

v0.7.0 L3-5 — forensic-evidence CLI surface. Names the three driver verbs that this binary actually ships (verify-reflection-chain, export-forensic-bundle, verify-forensic-bundle). See CapabilityForensic.

§governance: CapabilityGovernance

v0.7.0 L3-5 — substrate-rules governance surface. Honestly labelled "operator_signed" because the L1-6 loader refuses to honour unsigned rules. See CapabilityGovernance.

§atomisation: CapabilityAtomisation

v0.7.0 WT-1-G — atomisation capability surface. Names the six operator-facing atomisation surfaces (tool / cli / auto / recall_preference / forensic / curator) plus the derives_from link relation that anchors atom → parent lineage. See CapabilityAtomisation for the per-field implementation anchor map.

Additive over the L3-5 surface — pre-WT-1-G v3 payloads still deserialise cleanly (the default_capability_atomisation helper resolves to the current-implementation snapshot for any payload missing the field).

§memory_kind_vocab: CapabilityMemoryKindVocab

v0.7.x Form 6 (issue #759) — Batman-taxonomy memory-kind vocabulary capability surface. Names the recall-filter + auto-classify surfaces shipped under Form 6 and enumerates the substrate’s full set of recognised memory_kind values. See CapabilityMemoryKindVocab.

Additive over the WT-1-G surface — pre-Form-6 v3 payloads deserialise cleanly via the default_capability_memory_kind_vocab helper.

§confidence_calibration: CapabilityConfidenceCalibration

v0.7.0 Form 5 (issue #758) — confidence-calibration capability surface. Names the five operator-facing Form-5 substrates (auto_derive / shadow_mode / freshness_decay / calibration_cli / calibration_tool) plus the signals_schema wire-shape discriminator. See CapabilityConfidenceCalibration for the per-field anchor map.

Additive over the WT-1-G surface — pre-Form-5 v3 payloads still deserialise cleanly because of the default_capability_confidence_calibration helper.

§provenance_substrate_layer: CapabilityProvenanceSubstrateLayer

v0.7.0 #973 Item C — narrative summary of the substrate’s do-calculus posture.

Trait Implementations§

Source§

impl Clone for CapabilitiesV3

Source§

fn clone(&self) -> CapabilitiesV3

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CapabilitiesV3

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for CapabilitiesV3

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for CapabilitiesV3

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more