pub struct PlanTool { /* private fields */ }Implementations§
Trait Implementations§
Source§impl SchemaTool for PlanTool
impl SchemaTool for PlanTool
const NAME: &'static str = "Plan"
const DESCRIPTION: &'static str = r#"Manage structured planning workflow for complex implementation tasks. ## Actions - **start**: Begin plan mode for complex tasks (creates Draft plan) - **complete**: Finalize plan and proceed to implementation (approves plan) - **cancel**: Abort current plan - **update**: Update plan content while in plan mode - **status**: Check current plan state ## When to Use Plan Mode Use `action: "start"` for implementation tasks unless they're simple: 1. **New Feature Implementation**: Adding meaningful new functionality 2. **Multiple Valid Approaches**: Task can be solved in several ways 3. **Code Modifications**: Changes affecting existing behavior 4. **Architectural Decisions**: Choosing between patterns or technologies 5. **Multi-File Changes**: Task touching more than 2-3 files 6. **Unclear Requirements**: Need exploration before understanding scope ## When NOT to Use Skip for simple tasks: - Single-line fixes (typos, obvious bugs) - Adding a single function with clear requirements - Tasks with specific, detailed instructions - Pure research (use Task tool with Explore agent) ## Workflow 1. Call with `action: "start"` to enter plan mode 2. Explore codebase using Glob, Grep, Read tools 3. Call with `action: "update"` to record your plan 4. Call with `action: "complete"` to finalize and proceed ## Examples ```json // Start planning {"action": "start", "name": "Add user authentication"} // Update plan content {"action": "update", "content": "1. Add JWT middleware\n2. Create auth routes"} // Complete and proceed {"action": "complete"} // Check status {"action": "status"} // Cancel if needed {"action": "cancel"} ``` ## Integration - Use Plan for high-level approach and exploration - Use TodoWrite for granular task tracking during execution - Plan content persists across session compaction"#
type Input = PlanInput
fn handle<'life0, 'life1, 'async_trait>(
&'life0 self,
input: PlanInput,
_context: &'life1 ExecutionContext,
) -> Pin<Box<dyn Future<Output = ToolResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
const STRICT: bool = false
fn input_schema() -> Value
Auto Trait Implementations§
impl Freeze for PlanTool
impl !RefUnwindSafe for PlanTool
impl Send for PlanTool
impl Sync for PlanTool
impl Unpin for PlanTool
impl !UnwindSafe for PlanTool
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
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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 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>
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 moreCreates a shared type from an unshared type.