Skip to main content

WorkflowProgressEvent

Enum WorkflowProgressEvent 

Source
pub enum WorkflowProgressEvent {
    WorkflowPhase {
        index: u32,
        title: String,
        extras: Extras,
    },
    WorkflowAgent {
        index: u32,
        label: String,
        phase_index: Option<u32>,
        phase_title: Option<String>,
        state: String,
        last_tool_name: Option<String>,
        last_tool_summary: Option<String>,
        result_preview: Option<String>,
        extras: Extras,
    },
    Other,
}
Expand description

Workflow’s per-event snapshot of the workflow’s phase + agent state, ridden via Message::TaskProgress’s workflow_progress field.

The CLI fires one system/task_progress per workflow-internal state change; each event carries the FULL workflow snapshot at that instant (not a delta). Two flavours of entry are observed in captured wire (see ~/Projects/forge/.claude/skills/claude-cli-upgrade/reference-captures/workflow.jsonl):

  1. workflow_phase - phase-level marker emitted when the workflow’s phase() call fires. Carries the phase index + title.
  2. workflow_agent - agent-level event tracking an agent call’s state transition (start → progress → done). Carries the parent phase index, the agent’s queued model, the running tool name (when known), a short prompt preview, and (on done) the result preview.

Both share the same wire envelope discriminated by type. The type stays open via #[serde(other)] on the trailing variant so future CLI additions decode cleanly without a primitives bump - and an unrecognised TYPE is the one loss stated here: the Other variant is a unit, so that event’s payload does not cross.

Every modelled field a view does not read stays in extras, so queuedAt, startedAt, lastProgressAt, attempt, tokens, toolCalls, durationMs, model, agentId and promptPreview all cross with the entry they arrived in.

Variants§

§

WorkflowPhase

Phase-level marker - emitted when the workflow’s phase() call fires.

Fields

§index: u32
§title: String
§extras: Extras
§

WorkflowAgent

Agent-level event - emitted on each state transition for an agent call inside a phase. The modelled fields are the ones a view reads; everything else the CLI sends crosses in extras.

Fields

§index: u32
§label: String
§phase_index: Option<u32>

Phase the agent belongs to. The fields became optional: phase-less agent entries were observed outside the pinned corpus (proxy-routed capture), while the committed corpus still tags every entry. Phase grouping then relies on workflow_phase markers alone.

§phase_title: Option<String>
§state: String

Current agent state on the wire: start, progress, done. Free-form string so future states decode without a primitives bump.

§last_tool_name: Option<String>

Latest tool the agent invoked, when known. None on initial start events.

§last_tool_summary: Option<String>

Short summary of the latest tool’s output.

§result_preview: Option<String>

Final structured-output preview emitted with the state: done event. JSON-stringified per the CLI’s resultPreview field.

§extras: Extras
§

Other

Unrecognised workflow event - preserved across decode to avoid serde refusing the surrounding task_progress. Not surfaced anywhere; the renderer treats unknown event types as no-ops.

Trait Implementations§

Source§

impl Clone for WorkflowProgressEvent

Source§

fn clone(&self) -> Self

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 WorkflowProgressEvent

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for WorkflowProgressEvent

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for WorkflowProgressEvent

Source§

impl PartialEq for WorkflowProgressEvent

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for WorkflowProgressEvent

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for WorkflowProgressEvent

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more