Motivation
Real-world feedback: persistence ≠ recovery. After a 3 a.m. crash, the agent restarts from the last checkpoint and resumes the next step — but the intent behind that step is gone. The state survives; the why doesn't.
Today the original goal is implicit in AgentContext.messages(), recoverable but not first-class. Downstream agents can also drift from the original goal at each hop ("téléphone arabe" effect).
Scope
Standardize how the original goal threads through the graph and survives checkpoints.
Acceptance criteria
Non-goals
- An
IntentRegistry component — this is a convention on a well-known StateKey, not a new module.
- Automatic intent extraction from messages.
Notes
Sub-intent chaining matters: when a node derives "to achieve X, first do Y," Y must record X as its parent so recovery preserves the full intent stack.
Motivation
Real-world feedback: persistence ≠ recovery. After a 3 a.m. crash, the agent restarts from the last checkpoint and resumes the next step — but the intent behind that step is gone. The state survives; the why doesn't.
Today the original goal is implicit in
AgentContext.messages(), recoverable but not first-class. Downstream agents can also drift from the original goal at each hop ("téléphone arabe" effect).Scope
Standardize how the original goal threads through the graph and survives checkpoints.
Acceptance criteria
WorkflowIntentrecord:goal,originator,traceId,@Nullable WorkflowIntent parentStateKey<WorkflowIntent> WORKFLOW_INTENTexposed from the coreWorkflowIntent.subIntent(String subGoal)for parent ↔ child chaining when an agent derives a sub-taskCheckpointserializes/restoresWorkflowIntentWORKFLOW_INTENTfirst, never solely the upstream outputNon-goals
IntentRegistrycomponent — this is a convention on a well-knownStateKey, not a new module.Notes
Sub-intent chaining matters: when a node derives "to achieve X, first do Y,"
Ymust recordXas its parent so recovery preserves the full intent stack.