Steps
Runs a shell command.
- id: test type: shell with: command: npm test stdout: mode: text # none | text | json (default: text)stdout.mode controls stdout capture: none discards it, text captures as string, json parses as structured data.
Two kinds are supported: turn and review.
Normal Codex turns. Set collaboration_mode: plan to use Codex’s Plan collaboration mode (planning-only, no repo mutations).
- id: implement type: codex with: kind: turn prompt: Add input validation. model: gpt-5.4- id: draft_plan type: codex with: kind: turn collaboration_mode: plan prompt: Clarify the scope and produce an implementation plan. model: gpt-5.4steps.<id>.result is always the final plain-text response for turns.
review
Section titled “review”Scans diffs and returns review findings.
- id: review type: codex with: kind: review model: gpt-5.4 target: type: uncommitted # uncommitted | base | commitTarget variants:
type: uncommittedtype: basewithbranchtype: commitwithsha
Review always returns the built-in structured result below:
result: findings: - title: string body: string confidence_score: number priority: integer code_location: absolute_file_path: string line_range: start: integer end: integer overall_correctness: string overall_explanation: string overall_confidence_score: numberclaude
Section titled “claude”Runs Claude Code through the local Claude CLI and returns the final plain-text assistant response.
- id: build type: claude with: prompt: Implement the requested change. model: claude-opus-4-6 effort: high max_turns: 8 max_thinking_tokens: 12000 permission_mode: accept_editsRequired field:
with.prompt
Optional fields:
with.modelwith.effortwith.max_turnswith.max_thinking_tokenswith.permission_mode
Claude YAML stays snake_case and maps directly to Claude Agent SDK options in camelCase.
Do not set with.kind, with.mode, or with.action on Claude steps.
Claude steps require a locally installed and authenticated Claude Code CLI. Run claude login before use.
opencode
Section titled “opencode”Runs OpenCode through the local OpenCode CLI and returns the final plain-text assistant response.
- id: analyze type: opencode with: prompt: Analyze the architecture.
- id: build type: opencode with: prompt: Implement the requested change. model: anthropic/claude-sonnet-4-20250514 agent: build variant: high permission_mode: auto_approveRequired field:
with.prompt
Optional fields:
with.modelwith.agentwith.variantwith.permission_mode
OpenCode uses named agents and defaults with.agent to build.
with.model must use provider/model.
with.permission_mode supports default and auto_approve.
Headless runs reject permission requests by default unless with.permission_mode is auto_approve.
OpenCode steps require a local OpenCode CLI installation. Verify with opencode --version.
cursor
Section titled “cursor”Runs Cursor Agent through ACP and returns the final plain-text assistant response.
- id: triage type: cursor with: mode: agent # agent | ask | plan (default: agent) model: composer-2 prompt: Summarize the diff.cursor is ACP text-only. If you need structured JSON from Cursor, run Cursor headless through a shell step and parse that shell output there.
write_file
Section titled “write_file”Writes content to a file.
- id: save type: write_file with: path: ${{ inputs.output_path }} content: ${{ steps.draft.result }}Result access
Section titled “Result access”codexturns:steps.draft.resultcodexreview:steps.review.result.findingsclaude:steps.build.resultopencode:steps.build.resultcursor:steps.triage.result