claude-code-workflow 6.3.38 → 6.3.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.codex/agents/ccw-loop-b-complete.md +227 -0
  2. package/.codex/agents/ccw-loop-b-debug.md +172 -0
  3. package/.codex/agents/ccw-loop-b-develop.md +147 -0
  4. package/.codex/agents/ccw-loop-b-init.md +82 -0
  5. package/.codex/agents/ccw-loop-b-validate.md +204 -0
  6. package/.codex/agents/ccw-loop-executor.md +4 -4
  7. package/.codex/prompts/clean.md +409 -0
  8. package/.codex/skills/ccw-loop/README.md +3 -3
  9. package/.codex/skills/ccw-loop/SKILL.md +16 -16
  10. package/.codex/skills/ccw-loop/phases/actions/action-complete.md +4 -4
  11. package/.codex/skills/ccw-loop/phases/actions/action-debug.md +3 -3
  12. package/.codex/skills/ccw-loop/phases/actions/action-develop.md +5 -5
  13. package/.codex/skills/ccw-loop/phases/actions/action-init.md +5 -5
  14. package/.codex/skills/ccw-loop/phases/actions/action-menu.md +2 -2
  15. package/.codex/skills/ccw-loop/phases/actions/action-validate.md +5 -5
  16. package/.codex/skills/ccw-loop/phases/orchestrator.md +6 -6
  17. package/.codex/skills/ccw-loop/phases/state-schema.md +11 -11
  18. package/.codex/skills/ccw-loop-b/README.md +260 -61
  19. package/.codex/skills/ccw-loop-b/SKILL.md +4 -4
  20. package/.codex/skills/ccw-loop-b/phases/orchestrator.md +2 -2
  21. package/.codex/skills/ccw-loop-b/phases/state-schema.md +3 -3
  22. package/.codex/skills/ccw-loop-b/specs/action-catalog.md +383 -0
  23. package/.codex/skills/parallel-dev-cycle/README.md +382 -0
  24. package/.codex/skills/parallel-dev-cycle/SKILL.md +512 -0
  25. package/.codex/skills/parallel-dev-cycle/phases/agents/code-developer.md +242 -0
  26. package/.codex/skills/parallel-dev-cycle/phases/agents/exploration-planner.md +285 -0
  27. package/.codex/skills/parallel-dev-cycle/phases/agents/requirements-analyst.md +285 -0
  28. package/.codex/skills/parallel-dev-cycle/phases/agents/validation-archivist.md +381 -0
  29. package/.codex/skills/parallel-dev-cycle/phases/orchestrator.md +696 -0
  30. package/.codex/skills/parallel-dev-cycle/phases/state-schema.md +436 -0
  31. package/.codex/skills/parallel-dev-cycle/specs/communication-optimization.md +423 -0
  32. package/.codex/skills/parallel-dev-cycle/specs/coordination-protocol.md +391 -0
  33. package/.codex/skills/parallel-dev-cycle/specs/versioning-strategy.md +330 -0
  34. package/ccw/dist/commands/install.js +1 -1
  35. package/ccw/dist/commands/install.js.map +1 -1
  36. package/ccw/dist/tools/claude-cli-tools.d.ts.map +1 -1
  37. package/ccw/dist/tools/claude-cli-tools.js +4 -3
  38. package/ccw/dist/tools/claude-cli-tools.js.map +1 -1
  39. package/ccw/dist/tools/cli-config-manager.d.ts +1 -0
  40. package/ccw/dist/tools/cli-config-manager.d.ts.map +1 -1
  41. package/ccw/dist/tools/cli-config-manager.js +2 -1
  42. package/ccw/dist/tools/cli-config-manager.js.map +1 -1
  43. package/ccw/src/commands/install.ts +1 -1
  44. package/ccw/src/tools/claude-cli-tools.ts +4 -3
  45. package/ccw/src/tools/cli-config-manager.ts +3 -1
  46. package/package.json +1 -1
@@ -27,8 +27,8 @@ Stateless iterative development loop using Codex subagent pattern. Supports deve
27
27
  +-------------------------------------------------------------+
28
28
  | loop-v2-routes.ts (Control Plane) |
29
29
  | |
30
- | State: .loop/{loopId}.json (MASTER) |
31
- | Tasks: .loop/{loopId}.tasks.jsonl |
30
+ | State: .workflow/.loop/{loopId}.json (MASTER) |
31
+ | Tasks: .workflow/.loop/{loopId}.tasks.jsonl |
32
32
  | |
33
33
  | /start -> Trigger ccw-loop skill with --loop-id |
34
34
  | /pause -> Set status='paused' (skill checks before action) |
@@ -42,8 +42,8 @@ Stateless iterative development loop using Codex subagent pattern. Supports deve
42
42
  | |
43
43
  | Codex Pattern: spawn_agent -> wait -> send_input -> close |
44
44
  | |
45
- | Reads/Writes: .loop/{loopId}.json (unified state) |
46
- | Writes: .loop/{loopId}.progress/* (progress files) |
45
+ | Reads/Writes: .workflow/.loop/{loopId}.json (unified state) |
46
+ | Writes: .workflow/.loop/{loopId}.progress/* (progress files) |
47
47
  | |
48
48
  | BEFORE each action: |
49
49
  | -> Check status: paused/stopped -> exit gracefully |
@@ -55,9 +55,9 @@ Stateless iterative development loop using Codex subagent pattern. Supports deve
55
55
 
56
56
  ## Key Design Principles (Codex Adaptation)
57
57
 
58
- 1. **Unified State**: API and Skill share `.loop/{loopId}.json` state file
58
+ 1. **Unified State**: API and Skill share `.workflow/.loop/{loopId}.json` state file
59
59
  2. **Control Signals**: Skill checks status field before each action (paused/stopped)
60
- 3. **File-Driven**: All progress documented in `.loop/{loopId}.progress/`
60
+ 3. **File-Driven**: All progress documented in `.workflow/.loop/{loopId}.progress/`
61
61
  4. **Resumable**: Continue any loop with `--loop-id`
62
62
  5. **Dual Trigger**: Supports API trigger (`--loop-id`) and direct call (task description)
63
63
  6. **Single Agent Deep Interaction**: Use send_input for multi-phase execution instead of multiple agents
@@ -100,7 +100,7 @@ Develop -> Debug -> Validate -> (if issues) -> Develop -> ...
100
100
  ## Session Structure (Unified Location)
101
101
 
102
102
  ```
103
- .loop/
103
+ .workflow/.loop/
104
104
  +-- {loopId}.json # Master state file (API + Skill shared)
105
105
  +-- {loopId}.tasks.jsonl # Task list (API managed)
106
106
  +-- {loopId}.progress/ # Skill progress files
@@ -129,8 +129,8 @@ const loopId = args['--loop-id'] || (() => {
129
129
  return `loop-v2-${timestamp}-${random}`
130
130
  })()
131
131
 
132
- const loopFile = `.loop/${loopId}.json`
133
- const progressDir = `.loop/${loopId}.progress`
132
+ const loopFile = `.workflow/.loop/${loopId}.json`
133
+ const progressDir = `.workflow/.loop/${loopId}.progress`
134
134
 
135
135
  // Create progress directory
136
136
  mkdir -p "${progressDir}"
@@ -144,14 +144,14 @@ mkdir -p "${progressDir}"
144
144
  // Step 1: Read or create initial state
145
145
  let state = null
146
146
  if (existingLoopId) {
147
- state = JSON.parse(Read(`.loop/${loopId}.json`))
147
+ state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
148
148
  if (!state) {
149
149
  console.error(`Loop not found: ${loopId}`)
150
150
  return
151
151
  }
152
152
  } else {
153
153
  state = createInitialState(loopId, taskDescription)
154
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
154
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
155
155
  }
156
156
 
157
157
  // Step 2: Create orchestrator agent (single agent handles all phases)
@@ -169,7 +169,7 @@ const agent = spawn_agent({
169
169
  ## LOOP CONTEXT
170
170
 
171
171
  - **Loop ID**: ${loopId}
172
- - **State File**: .loop/${loopId}.json
172
+ - **State File**: .workflow/.loop/${loopId}.json
173
173
  - **Progress Dir**: ${progressDir}
174
174
  - **Mode**: ${mode} // 'interactive' or 'auto'
175
175
 
@@ -186,7 +186,7 @@ ${taskDescription}
186
186
  You are executing CCW Loop orchestrator. Your job:
187
187
 
188
188
  1. **Check Control Signals**
189
- - Read .loop/${loopId}.json
189
+ - Read .workflow/.loop/${loopId}.json
190
190
  - If status === 'paused' -> Output "PAUSED" and stop
191
191
  - If status === 'failed' -> Output "STOPPED" and stop
192
192
  - If status === 'running' -> Continue
@@ -200,7 +200,7 @@ You are executing CCW Loop orchestrator. Your job:
200
200
  3. **Execute Action**
201
201
  - Follow action instructions from ~/.codex/skills/ccw-loop/phases/actions/
202
202
  - Update progress files in ${progressDir}/
203
- - Update state in .loop/${loopId}.json
203
+ - Update state in .workflow/.loop/${loopId}.json
204
204
 
205
205
  4. **Output Format**
206
206
  \`\`\`
@@ -283,10 +283,10 @@ Continue with: ${actionResult.next_action}
283
283
  }
284
284
 
285
285
  // Update iteration count in state
286
- const currentState = JSON.parse(Read(`.loop/${loopId}.json`))
286
+ const currentState = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
287
287
  currentState.current_iteration = iteration
288
288
  currentState.updated_at = getUtc8ISOString()
289
- Write(`.loop/${loopId}.json`, JSON.stringify(currentState, null, 2))
289
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(currentState, null, 2))
290
290
  }
291
291
 
292
292
  // Step 4: Cleanup
@@ -20,7 +20,7 @@ Complete CCW Loop session and generate summary report.
20
20
  ### Step 1: Verify Control Signals
21
21
 
22
22
  ```javascript
23
- const state = JSON.parse(Read(`.loop/${loopId}.json`))
23
+ const state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
24
24
 
25
25
  if (state.status !== 'running') {
26
26
  return {
@@ -174,7 +174,7 @@ state.updated_at = timestamp
174
174
  state.skill_state.last_action = 'COMPLETE'
175
175
  state.skill_state.summary = stats
176
176
 
177
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
177
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
178
178
  ```
179
179
 
180
180
  ## Output Format
@@ -190,8 +190,8 @@ ACTION_RESULT:
190
190
  }
191
191
 
192
192
  FILES_UPDATED:
193
- - .loop/{loopId}.json: Status set to completed
194
- - .loop/{loopId}.progress/summary.md: Summary report generated
193
+ - .workflow/.loop/{loopId}.json: Status set to completed
194
+ - .workflow/.loop/{loopId}.progress/summary.md: Summary report generated
195
195
 
196
196
  NEXT_ACTION_NEEDED: COMPLETED
197
197
  ```
@@ -233,7 +233,7 @@ if (confirmedHypothesis) {
233
233
 
234
234
  state.skill_state.last_action = 'DEBUG'
235
235
  state.updated_at = timestamp
236
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
236
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
237
237
  ```
238
238
 
239
239
  ## Output Format
@@ -249,8 +249,8 @@ ACTION_RESULT:
249
249
  }
250
250
 
251
251
  FILES_UPDATED:
252
- - .loop/{loopId}.progress/debug.md: Understanding updated
253
- - .loop/{loopId}.progress/hypotheses.json: Hypotheses updated
252
+ - .workflow/.loop/{loopId}.progress/debug.md: Understanding updated
253
+ - .workflow/.loop/{loopId}.progress/hypotheses.json: Hypotheses updated
254
254
  - [Source files]: Instrumentation added
255
255
 
256
256
  NEXT_ACTION_NEEDED: {DEBUG | VALIDATE | DEVELOP | MENU}
@@ -20,7 +20,7 @@ Execute development task and record progress to develop.md.
20
20
  ### Step 1: Verify Control Signals
21
21
 
22
22
  ```javascript
23
- const state = JSON.parse(Read(`.loop/${loopId}.json`))
23
+ const state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
24
24
 
25
25
  if (state.status !== 'running') {
26
26
  return {
@@ -133,7 +133,7 @@ state.skill_state.last_action = 'DEVELOP'
133
133
  state.skill_state.completed_actions.push('DEVELOP')
134
134
  state.updated_at = timestamp
135
135
 
136
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
136
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
137
137
  ```
138
138
 
139
139
  ## Output Format
@@ -149,9 +149,9 @@ ACTION_RESULT:
149
149
  }
150
150
 
151
151
  FILES_UPDATED:
152
- - .loop/{loopId}.json: Task status updated
153
- - .loop/{loopId}.progress/develop.md: Progress entry added
154
- - .loop/{loopId}.progress/changes.log: Change entry added
152
+ - .workflow/.loop/{loopId}.json: Task status updated
153
+ - .workflow/.loop/{loopId}.progress/develop.md: Progress entry added
154
+ - .workflow/.loop/{loopId}.progress/changes.log: Change entry added
155
155
 
156
156
  NEXT_ACTION_NEEDED: {DEVELOP | DEBUG | VALIDATE | MENU}
157
157
  ```
@@ -19,7 +19,7 @@ Initialize CCW Loop session, create directory structure and initial state.
19
19
  ### Step 1: Verify Control Signals
20
20
 
21
21
  ```javascript
22
- const state = JSON.parse(Read(`.loop/${loopId}.json`))
22
+ const state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
23
23
 
24
24
  if (state.status !== 'running') {
25
25
  return {
@@ -34,7 +34,7 @@ if (state.status !== 'running') {
34
34
  ### Step 2: Create Directory Structure
35
35
 
36
36
  ```javascript
37
- const progressDir = `.loop/${loopId}.progress`
37
+ const progressDir = `.workflow/.loop/${loopId}.progress`
38
38
 
39
39
  // Directories created by orchestrator, verify they exist
40
40
  // mkdir -p ${progressDir}
@@ -131,7 +131,7 @@ const skillState = {
131
131
 
132
132
  state.skill_state = skillState
133
133
  state.updated_at = getUtc8ISOString()
134
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
134
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
135
135
  ```
136
136
 
137
137
  ## Output Format
@@ -143,8 +143,8 @@ ACTION_RESULT:
143
143
  - message: Session initialized with {N} development tasks
144
144
 
145
145
  FILES_UPDATED:
146
- - .loop/{loopId}.json: skill_state initialized
147
- - .loop/{loopId}.progress/develop.md: Progress document created
146
+ - .workflow/.loop/{loopId}.json: skill_state initialized
147
+ - .workflow/.loop/{loopId}.progress/develop.md: Progress document created
148
148
 
149
149
  NEXT_ACTION_NEEDED: {DEVELOP (auto) | MENU (interactive)}
150
150
  ```
@@ -20,7 +20,7 @@ Display interactive action menu for user selection.
20
20
  ### Step 1: Verify Control Signals
21
21
 
22
22
  ```javascript
23
- const state = JSON.parse(Read(`.loop/${loopId}.json`))
23
+ const state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
24
24
 
25
25
  if (state.status !== 'running') {
26
26
  return {
@@ -172,7 +172,7 @@ If user selects "exit":
172
172
  // Save current state
173
173
  state.status = 'user_exit'
174
174
  state.updated_at = getUtc8ISOString()
175
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
175
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
176
176
 
177
177
  return {
178
178
  action: 'MENU',
@@ -21,7 +21,7 @@ Run tests and verify implementation, record results to validate.md.
21
21
  ### Step 1: Verify Control Signals
22
22
 
23
23
  ```javascript
24
- const state = JSON.parse(Read(`.loop/${loopId}.json`))
24
+ const state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
25
25
 
26
26
  if (state.status !== 'running') {
27
27
  return {
@@ -174,7 +174,7 @@ state.skill_state.validate.last_run_at = timestamp
174
174
 
175
175
  state.skill_state.last_action = 'VALIDATE'
176
176
  state.updated_at = timestamp
177
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
177
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
178
178
  ```
179
179
 
180
180
  ## Output Format
@@ -191,9 +191,9 @@ ACTION_RESULT:
191
191
  }
192
192
 
193
193
  FILES_UPDATED:
194
- - .loop/{loopId}.progress/validate.md: Validation report created
195
- - .loop/{loopId}.progress/test-results.json: Test results saved
196
- - .loop/{loopId}.progress/coverage.json: Coverage data saved (if available)
194
+ - .workflow/.loop/{loopId}.progress/validate.md: Validation report created
195
+ - .workflow/.loop/{loopId}.progress/test-results.json: Test results saved
196
+ - .workflow/.loop/{loopId}.progress/coverage.json: Coverage data saved (if available)
197
197
 
198
198
  NEXT_ACTION_NEEDED: {COMPLETE | DEBUG | DEVELOP | MENU}
199
199
  ```
@@ -45,7 +45,7 @@ const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOSt
45
45
  * @param loopId - Loop ID (e.g., "loop-v2-20260122-abc123")
46
46
  */
47
47
  function readLoopState(loopId) {
48
- const stateFile = `.loop/${loopId}.json`
48
+ const stateFile = `.workflow/.loop/${loopId}.json`
49
49
 
50
50
  if (!fs.existsSync(stateFile)) {
51
51
  return null
@@ -63,7 +63,7 @@ function readLoopState(loopId) {
63
63
  * Create new loop state (only for direct calls, API triggers have existing state)
64
64
  */
65
65
  function createLoopState(loopId, taskDescription) {
66
- const stateFile = `.loop/${loopId}.json`
66
+ const stateFile = `.workflow/.loop/${loopId}.json`
67
67
  const now = getUtc8ISOString()
68
68
 
69
69
  const state = {
@@ -83,7 +83,7 @@ function createLoopState(loopId, taskDescription) {
83
83
 
84
84
  // Ensure directories exist
85
85
  mkdir -p ".loop"
86
- mkdir -p ".loop/${loopId}.progress"
86
+ mkdir -p ".workflow/.loop/${loopId}.progress"
87
87
 
88
88
  Write(stateFile, JSON.stringify(state, null, 2))
89
89
  return state
@@ -137,7 +137,7 @@ async function runOrchestrator(options = {}) {
137
137
  return { status: 'error', message: 'Missing loopId or task' }
138
138
  }
139
139
 
140
- const progressDir = `.loop/${loopId}.progress`
140
+ const progressDir = `.workflow/.loop/${loopId}.progress`
141
141
 
142
142
  // 2. Create executor agent (single agent for entire loop)
143
143
  const agent = spawn_agent({
@@ -154,7 +154,7 @@ async function runOrchestrator(options = {}) {
154
154
  ## LOOP CONTEXT
155
155
 
156
156
  - **Loop ID**: ${loopId}
157
- - **State File**: .loop/${loopId}.json
157
+ - **State File**: .workflow/.loop/${loopId}.json
158
158
  - **Progress Dir**: ${progressDir}
159
159
  - **Mode**: ${mode}
160
160
 
@@ -213,7 +213,7 @@ Execution timeout reached. Please:
213
213
  state = readLoopState(loopId)
214
214
  state.current_iteration = iteration
215
215
  state.updated_at = getUtc8ISOString()
216
- Write(`.loop/${loopId}.json`, JSON.stringify(state, null, 2))
216
+ Write(`.workflow/.loop/${loopId}.json`, JSON.stringify(state, null, 2))
217
217
 
218
218
  // Handle different outcomes
219
219
  switch (actionResult.next_action) {
@@ -4,7 +4,7 @@ CCW Loop state structure definition for Codex subagent pattern.
4
4
 
5
5
  ## State File
6
6
 
7
- **Location**: `.loop/{loopId}.json` (unified location, API + Skill shared)
7
+ **Location**: `.workflow/.loop/{loopId}.json` (unified location, API + Skill shared)
8
8
 
9
9
  ## Structure Definition
10
10
 
@@ -208,7 +208,7 @@ Agent checks control signals at start of every action:
208
208
  * @returns { continue: boolean, action: 'pause_exit' | 'stop_exit' | 'continue' }
209
209
  */
210
210
  function checkControlSignals(loopId) {
211
- const state = JSON.parse(Read(`.loop/${loopId}.json`))
211
+ const state = JSON.parse(Read(`.workflow/.loop/${loopId}.json`))
212
212
 
213
213
  switch (state.status) {
214
214
  case 'paused':
@@ -338,17 +338,17 @@ State-to-file mapping:
338
338
 
339
339
  | State Field | Sync File | Sync Timing |
340
340
  |-------------|-----------|-------------|
341
- | Entire LoopState | `.loop/{loopId}.json` | Every state change (master) |
342
- | `skill_state.develop` | `.loop/{loopId}.progress/develop.md` | After each dev operation |
343
- | `skill_state.debug` | `.loop/{loopId}.progress/debug.md` | After each debug operation |
344
- | `skill_state.validate` | `.loop/{loopId}.progress/validate.md` | After each validation |
345
- | Code changes log | `.loop/{loopId}.progress/changes.log` | Each file modification (NDJSON) |
346
- | Debug log | `.loop/{loopId}.progress/debug.log` | Each debug log (NDJSON) |
341
+ | Entire LoopState | `.workflow/.loop/{loopId}.json` | Every state change (master) |
342
+ | `skill_state.develop` | `.workflow/.loop/{loopId}.progress/develop.md` | After each dev operation |
343
+ | `skill_state.debug` | `.workflow/.loop/{loopId}.progress/debug.md` | After each debug operation |
344
+ | `skill_state.validate` | `.workflow/.loop/{loopId}.progress/validate.md` | After each validation |
345
+ | Code changes log | `.workflow/.loop/{loopId}.progress/changes.log` | Each file modification (NDJSON) |
346
+ | Debug log | `.workflow/.loop/{loopId}.progress/debug.log` | Each debug log (NDJSON) |
347
347
 
348
348
  ### File Structure
349
349
 
350
350
  ```
351
- .loop/
351
+ .workflow/.loop/
352
352
  +-- loop-v2-20260122-abc123.json # Master state file (API + Skill)
353
353
  +-- loop-v2-20260122-abc123.tasks.jsonl # Task list (API managed)
354
354
  +-- loop-v2-20260122-abc123.progress/ # Skill progress files
@@ -366,7 +366,7 @@ If master state file corrupted, rebuild skill_state from progress files:
366
366
 
367
367
  ```javascript
368
368
  function rebuildSkillStateFromProgress(loopId) {
369
- const progressDir = `.loop/${loopId}.progress`
369
+ const progressDir = `.workflow/.loop/${loopId}.progress`
370
370
 
371
371
  // Parse progress files to rebuild state
372
372
  const skill_state = {
@@ -381,7 +381,7 @@ function rebuildSkillStateFromProgress(loopId) {
381
381
 
382
382
  ## Codex Pattern Notes
383
383
 
384
- 1. **Agent reads state**: Agent reads `.loop/{loopId}.json` at action start
384
+ 1. **Agent reads state**: Agent reads `.workflow/.loop/{loopId}.json` at action start
385
385
  2. **Agent writes state**: Agent updates state after action completion
386
386
  3. **Orchestrator tracks iterations**: Main loop tracks `current_iteration`
387
387
  4. **Single agent context**: All state updates in same agent conversation via send_input