AgenticPlanning
API Reference
Rust API for the agentic-planning crate.
Rust API for the agentic-planning crate.
PlanningEngine
The core engine managing all planning state. Supports in-memory and file-backed modes.
Construction
use agentic_planning::PlanningEngine;
// In-memory engine
let engine = PlanningEngine::new();
// File-backed engine
let engine = PlanningEngine::from_file("planning.aplan")?;Goal Methods
// Create a goal
let goal = engine.create_goal(CreateGoalRequest {
title: "Ship v2.0".into(),
description: "Next major release".into(),
intention: "Deliver value to users".into(),
priority: Some(Priority::High),
deadline: Some(Timestamp(1735689600)),
..Default::default()
})?;
// List goals with optional filter
let goals = engine.list_goals(Some(GoalFilter {
status: Some(vec![GoalStatus::Active]),
priority: Some(vec![Priority::High, Priority::Critical]),
limit: Some(10),
..Default::default()
}))?;
// Get a specific goal
let goal = engine.get_goal(goal_id)?;
// Lifecycle transitions
engine.activate_goal(goal_id)?;
engine.update_progress(goal_id, 0.5, Some("Halfway there"))?;
engine.pause_goal(goal_id, Some("Waiting on dependency"))?;
engine.resume_goal(goal_id)?;
engine.complete_goal(goal_id, Some("All criteria met"))?;
engine.abandon_goal(goal_id, "No longer relevant")?;
// Blockers
engine.block_goal(goal_id, "API dependency unavailable", 0.8)?;
engine.unblock_goal(goal_id, blocker_id, "Dependency released")?;
// Structure
engine.decompose_goal(goal_id, sub_goal_specs)?;
engine.link_goals(goal_a, goal_b, GoalRelationship::Alliance { .. })?;
let tree = engine.goal_tree(Some(root_id))?;
// Analysis
let feelings = engine.goal_feelings(goal_id)?;
let physics = engine.goal_physics(goal_id)?;
// Reincarnation
let new_goal = engine.reincarnate_goal(goal_id, ReincarnationUpdates {
title: Some("Ship v2.1".into()),
lessons_learned: Some(vec!["Scope too large".into()]),
..Default::default()
})?;Decision Methods
// Create and populate
let decision = engine.create_decision(CreateDecisionRequest {
question: "Which database?".into(),
context: Some("Need sub-10ms reads".into()),
..Default::default()
})?;
engine.add_option(decision.id, DecisionPath {
name: "PostgreSQL".into(),
pros: vec!["Mature".into()],
cons: vec!["Slower reads".into()],
..Default::default()
})?;
// Crystallize (choose a path)
engine.crystallize(decision.id, chosen_path_id, "Best fit for requirements")?;
// Analysis
let shadows = engine.decision_shadows(decision.id)?;
let chain = engine.decision_chain(decision.id)?;
let archaeology = engine.decision_archaeology("database choice")?;
let prophecy = engine.decision_prophecy(question)?;
let regret = engine.decision_regret(decision.id)?;
// Revise
engine.recrystallize(decision.id, new_path_id, "Requirements changed")?;Commitment Methods
let commitment = engine.create_commitment(CreateCommitmentRequest {
promise: Promise {
description: "Deliver API docs".into(),
deliverables: vec!["OpenAPI spec".into()],
conditions: vec![],
},
stakeholder: Stakeholder {
name: "Engineering".into(),
role: "consumer".into(),
importance: 0.8,
..Default::default()
},
due: Some(Timestamp(1735689600)),
goal: Some(goal_id),
})?;
engine.fulfill_commitment(commitment.id, "Docs published")?;
engine.break_commitment(commitment.id, "Scope changed")?;
engine.renegotiate(commitment.id, new_promise, "Timeline shifted")?;
engine.entangle(commitment.id, other_id, EntanglementType::Parallel, 0.8)?;
let inventory = engine.commitment_inventory()?;
let due_soon = engine.commitments_due_soon(7)?;
let at_risk = engine.commitments_at_risk()?;Progress & Query Methods
let momentum = engine.momentum(Some(goal_id))?;
let gravity = engine.gravity()?;
let blockers = engine.predict_blockers()?; // Vec<BlockerProphecy>
let echoes = engine.listen_echoes()?; // Vec<ProgressEcho>
let forecast = engine.forecast(goal_id)?;
let velocity = engine.velocity()?;
let trend = engine.trend()?;Singularity Methods
let singularity = engine.collapse_singularity()?;
let position = engine.position_goal(goal_id)?;
let path = engine.golden_path()?;
let tensions = engine.tensions()?;
let themes = engine.themes()?;
let center = engine.intention_center()?;
let vision = engine.unified_vision()?;Dream Methods
let dream = engine.dream_goal(goal_id)?;
let collective = engine.dream_collective(Some(federation_id))?;
let interpreted = engine.interpret_dream(dream_id)?;
let insights = engine.dream_insights(Some(goal_id))?;
let accuracy = engine.dream_accuracy(dream_id)?;
let history = engine.dream_history(Some(goal_id))?;Persistence
engine.save()?; // Save to configured path
engine.load("other.aplan")?; // Load from pathError Handling
All engine methods return Result<T, PlanningError>.
pub enum PlanningError {
NotFound(String),
InvalidTransition(String),
ValidationError(String),
IoError(std::io::Error),
SerializationError(String),
EngineError(String),
}Key Types
See concepts.md for the domain model. Key request/response types:
CreateGoalRequest— Fields for new goal creationCreateDecisionRequest— Fields for new decisionCreateCommitmentRequest— Fields for new commitmentGoalFilter— Filter criteria for goal listing (status, priority, tags, deadline, progress range, limit)ReincarnationUpdates— Optional overrides for reincarnated goalMergeReport— Result of workspace merge (counts per entity type)
See ffi-reference.md for the C FFI interface.