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: StringSchema-version discriminator. Always "3" in v0.7.0.
summary: StringPre-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: Stringv0.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: CapabilityReflectionv0.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: CapabilitySkillsv0.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: CapabilityForensicv0.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: CapabilityGovernancev0.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: CapabilityAtomisationv0.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: CapabilityMemoryKindVocabv0.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: CapabilityConfidenceCalibrationv0.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: CapabilityProvenanceSubstrateLayerv0.7.0 #973 Item C — narrative summary of the substrate’s do-calculus posture.
Trait Implementations§
Source§impl Clone for CapabilitiesV3
impl Clone for CapabilitiesV3
Source§fn clone(&self) -> CapabilitiesV3
fn clone(&self) -> CapabilitiesV3
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CapabilitiesV3
impl Debug for CapabilitiesV3
Source§impl<'de> Deserialize<'de> for CapabilitiesV3
impl<'de> Deserialize<'de> for CapabilitiesV3
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for CapabilitiesV3
impl RefUnwindSafe for CapabilitiesV3
impl Send for CapabilitiesV3
impl Sync for CapabilitiesV3
impl Unpin for CapabilitiesV3
impl UnsafeUnpin for CapabilitiesV3
impl UnwindSafe for CapabilitiesV3
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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