Skip to main content

SubagentProfile

Struct SubagentProfile 

Source
pub struct SubagentProfile {
    pub description: String,
    pub model: Option<String>,
    pub system_prompt: String,
    pub tool_allow: Vec<String>,
    pub sampling: Option<SamplingParams>,
    pub inherit_project_prompt: bool,
    pub request_limit: Option<TurnRequestLimit>,
    pub hooks: Option<Arc<dyn HookEngine>>,
}
Expand description

A subagent profile that can be invoked by spawn_agent (agent-side representation).

ProfileSpec in defect-config is the source of truth on the config side; the CLI projects it into this struct during assembly before handing it to the tool. The two are kept separate because defect-config depends on defect-agent — the agent cannot depend on config in the opposite direction, or a cycle would result.

Fields§

§description: String

Selection-time description that goes into the tool schema’s catalog, allowing the LLM to choose a profile based on it.

§model: Option<String>

Optional model override; None falls back to the parent session’s currently selected model (ctx.current_model).

§system_prompt: String

The full system prompt for this profile.

§tool_allow: Vec<String>

Tool allowlist — the child agent can only see these tools (spawn_agent is always excluded).

§sampling: Option<SamplingParams>

Optional sampling overrides.

§inherit_project_prompt: bool

When true, prefix the child’s system prompt with the project AGENTS.md layer (project world-knowledge), without inheriting the parent’s identity. Default false.

§request_limit: Option<TurnRequestLimit>

Optional per-turn LLM-call cap for this subagent. None ⇒ a fixed anti-runaway default (Fixed(32)); a profile may raise it or make it adaptive/unbounded.

§hooks: Option<Arc<dyn HookEngine>>

The hook engine for this profile — hooks that run when a sub-agent executes a turn.

Consistent with the “inherit world, not identity” principle: hooks belong to the profile’s identity and are declared by the profile’s own configuration (the CLI assembles ProfileSpec.hooks into an engine at build time). They are not inherited from the parent session. None means the sub-agent has no hooks (falls back to NoopHookEngine), preserving exactly the same behavior as before — existing profiles without hooks are unaffected.

Trait Implementations§

Source§

impl Clone for SubagentProfile

Source§

fn clone(&self) -> SubagentProfile

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 SubagentProfile

Source§

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

Formats the value using the given formatter. 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> DynClone for T
where T: Clone,

Source§

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

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoMaybeUndefined<T> for T

Source§

impl<T> IntoOption<T> for T

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<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