Skip to content

Conversations

Conversation bindings let codex (exec) and claude steps share context across multiple invocations — primarily useful inside loops where each iteration should build on previous context.

- id: work
type: codex
with:
action: exec
prompt: Continue refining.
conversation:
name: worker # required: any non-blank string
scope: loop # optional: iteration | loop | workflow
ScopeBehaviorValid where
iterationFresh context each iterationInside loops only (default)
loopShared across all iterationsInside loops only
workflowShared across entire runAnywhere (default outside loops)

Steps with the same name in the same scope share a single conversation session.

  • Requires persist: true (the default)
  • codex review does not support conversations
  • conversation and output_schema cannot be used together when the conversation will be resumed (e.g., scope: loop inside a loop, or when another step shares the same name)
  • Resumed codex exec turns reject output_schema and add_dirs
- id: refine
type: loop
max: 3
until: ${{ steps.eval.result.quality >= 8 }}
steps:
- id: work
type: codex
with:
action: exec
prompt: |
Iteration ${{ run.iteration }}. Refine the implementation.
conversation:
name: worker
scope: loop # Codex remembers previous iterations
- id: eval
type: claude
with:
action: prompt
prompt: Rate quality (1-10).
output_schema:
type: object
required: [quality]
additionalProperties: false
properties:
quality:
type: integer