@neonwatty/limner 0.1.7 → 0.1.9

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 (60) hide show
  1. package/README.md +7 -31
  2. package/dist/commands/compare-image-reference.d.ts +1 -0
  3. package/dist/commands/compare-image-reference.js +4 -0
  4. package/dist/commands/compare-image-reference.js.map +1 -1
  5. package/dist/commands/compare-output.js +1 -1
  6. package/dist/commands/compare-output.js.map +1 -1
  7. package/dist/commands/compare.d.ts +1 -0
  8. package/dist/commands/compare.js +4 -12
  9. package/dist/commands/compare.js.map +1 -1
  10. package/dist/commands/loop-cli.js +35 -2
  11. package/dist/commands/loop-cli.js.map +1 -1
  12. package/dist/commands/loop-comparison-adapters.d.ts +1 -0
  13. package/dist/commands/loop-comparison-adapters.js +7 -2
  14. package/dist/commands/loop-comparison-adapters.js.map +1 -1
  15. package/dist/commands/loop-response.d.ts +31 -0
  16. package/dist/commands/loop-response.js +84 -0
  17. package/dist/commands/loop-response.js.map +1 -0
  18. package/dist/commands/loop-task.js +24 -3
  19. package/dist/commands/loop-task.js.map +1 -1
  20. package/dist/commands/loop.d.ts +11 -0
  21. package/dist/commands/loop.js +22 -8
  22. package/dist/commands/loop.js.map +1 -1
  23. package/dist/core/agent-comparison-fingerprint.js +1 -0
  24. package/dist/core/agent-comparison-fingerprint.js.map +1 -1
  25. package/dist/core/agent-comparison-pack.d.ts +5 -1
  26. package/dist/core/agent-comparison-pack.js +17 -100
  27. package/dist/core/agent-comparison-pack.js.map +1 -1
  28. package/dist/core/agent-comparison-prompts.d.ts +1 -1
  29. package/dist/core/agent-comparison-prompts.js +4 -4
  30. package/dist/core/agent-comparison-prompts.js.map +1 -1
  31. package/dist/core/agent-comparison-report.js +2 -2
  32. package/dist/core/agent-comparison-report.js.map +1 -1
  33. package/dist/core/agent-comparison-response.d.ts +0 -18
  34. package/dist/core/agent-comparison-response.js +1 -33
  35. package/dist/core/agent-comparison-response.js.map +1 -1
  36. package/dist/core/agent-comparison-submit.d.ts +35 -0
  37. package/dist/core/agent-comparison-submit.js +113 -0
  38. package/dist/core/agent-comparison-submit.js.map +1 -0
  39. package/dist/core/agent-task-brief.d.ts +4 -1
  40. package/dist/core/agent-task-brief.js +11 -2
  41. package/dist/core/agent-task-brief.js.map +1 -1
  42. package/dist/core/comparison-artifacts.js +3 -8
  43. package/dist/core/comparison-artifacts.js.map +1 -1
  44. package/dist/core/ledger-agent-responses.d.ts +1 -0
  45. package/dist/core/ledger-agent-responses.js +3 -3
  46. package/dist/core/ledger-agent-responses.js.map +1 -1
  47. package/dist/core/ledger-db.js +2 -0
  48. package/dist/core/ledger-db.js.map +1 -1
  49. package/dist/core/ledger-markdown.js +1 -1
  50. package/dist/core/ledger-markdown.js.map +1 -1
  51. package/dist/core/ledger-queries.js +2 -1
  52. package/dist/core/ledger-queries.js.map +1 -1
  53. package/dist/core/report-writer.js +1 -1
  54. package/docs/agent-workflow.md +14 -16
  55. package/docs/archive/visual-spec-workflow.md +23 -0
  56. package/docs/goals/db-native-agent-responses/goal.md +91 -0
  57. package/docs/goals/db-native-agent-responses/state.yaml +240 -0
  58. package/package.json +1 -1
  59. package/skills/limner/SKILL.md +11 -21
  60. package/templates/target/AGENT_GUIDE.md +4 -4
@@ -0,0 +1,240 @@
1
+ version: 2
2
+
3
+ goal:
4
+ title: "DB-Native Agent Responses"
5
+ slug: "db-native-agent-responses"
6
+ kind: existing_plan
7
+ tranche: "Implement SQLite-native agent response submission/storage and remove agent-response.json as canonical loop state."
8
+ status: done
9
+ oracle:
10
+ signal: "A fresh Limner loop can submit and validate an agent comparison response through SQLite, docs/skills describe that workflow, and npm run check passes."
11
+ cadence: "after Worker implementation and at final audit"
12
+ final_proof: "Receipt-backed npm run check result plus evidence that docs/skills and CLI behavior no longer make agent-response.json the canonical response state."
13
+ intake:
14
+ original_request: "Plan this out using GoalBuddy prep and make Limner stop using agent-response.json as canonical state."
15
+ interpreted_outcome: "Limner should make SQLite the source of truth and CLI submission channel for agent comparison responses."
16
+ input_shape: existing_plan
17
+ audience: "Limner users and agents running visual polish loops across multiple projects"
18
+ authority: approved
19
+ proof_type: test
20
+ completion_proof: "npm run check passes and a fresh loop validates a DB-submitted agent response without relying on target-scoped agent-response.json."
21
+ likely_misfire: "SQLite stores a copy of the file, but the file remains the true handoff/state mechanism."
22
+ blind_spots_considered:
23
+ - "Existing ledger migration from 0.1.7 rows that used response_path."
24
+ - "Direct compare commands may still need prompt/schema artifacts without a loop trajectory."
25
+ - "Freshness must become DB submission state rather than file existence timing."
26
+ - "Agents need docs/skills that reveal the submission CLI without reading code."
27
+ - "Seatify smoke artifacts should not be committed."
28
+ existing_plan_facts:
29
+ - "SQLite already has an agent_responses table with response_json."
30
+ - "Current 0.1.7 still reads captures/**/agent-response.json before storing rows."
31
+ - "The new workflow should accept response JSON through CLI file or stdin."
32
+ - "The full raw JSON must remain stored locally in SQLite."
33
+ - "Loop ledger exports should keep surfacing response evidence and action history."
34
+
35
+ rules:
36
+ pm_owns_state: true
37
+ one_active_task: true
38
+ max_write_workers: 1
39
+ no_implementation_without_worker_or_pm_task: true
40
+ no_completion_without_judge_or_pm_audit: true
41
+ planning_is_not_completion: true
42
+ queued_required_worker_blocks_completion: true
43
+ continuous_until_full_outcome: true
44
+ missing_input_or_credentials_do_not_stop_goal: true
45
+ preserve_and_validate_existing_plan: true
46
+ intake_misfire_must_be_audited: true
47
+ goal_pressure_requires_oracle: true
48
+ no_completion_on_weak_proof: true
49
+ slice_policy:
50
+ max_consecutive_tiny_tasks: 2
51
+ prefer_vertical_slices: true
52
+ judge_picks_largest_safe_slice: true
53
+ worker_completes_whole_slice: true
54
+
55
+ agents:
56
+ scout: installed
57
+ worker: installed
58
+ judge: installed
59
+
60
+ visual_board:
61
+ selected: local
62
+ local:
63
+ status: starting
64
+ url: "http://goalbuddy.localhost:41737/db-native-agent-responses/"
65
+ command: "npx goalbuddy board docs/goals/db-native-agent-responses"
66
+
67
+ active_task: null
68
+
69
+ tasks:
70
+ - id: T001
71
+ type: judge
72
+ assignee: Judge
73
+ status: done
74
+ reasoning_hint: high
75
+ objective: "Validate the DB-native response plan against the current Limner code and choose the largest safe Worker implementation slice."
76
+ inputs:
77
+ - "docs/goals/db-native-agent-responses/goal.md"
78
+ - "Current Limner source, tests, README, docs, and skills"
79
+ - "Existing plan facts in goal.intake.existing_plan_facts"
80
+ constraints:
81
+ - "Read-only."
82
+ - "Do not implement."
83
+ - "Preserve the user's correction that agent-response.json must not remain canonical."
84
+ expected_output:
85
+ - "Decision"
86
+ - "Exact Worker objective"
87
+ - "allowed_files"
88
+ - "verify"
89
+ - "stop_if"
90
+ - "Any split tasks if the first slice is too large or risky"
91
+ receipt:
92
+ result: done
93
+ decision: approved
94
+ full_outcome_complete: false
95
+ summary: "Current code stores response_json in SQLite but still reads captures/**/agent-response.json as canonical input. Approve one vertical Worker slice: DB pending context on loop compare, loop response submit for file/stdin, validation from stored context, summary artifacts, ledger export, docs/skills updates."
96
+ evidence:
97
+ - "src/core/agent-comparison-pack.ts reads responsePath and readAgentResponse()."
98
+ - "src/commands/loop.ts records responseJson after compare, not as the submission channel."
99
+ - "src/core/agent-comparison-prompts.ts tells agents to write JSON to responsePath."
100
+ - "README.md and docs/agent-workflow.md instruct agent-response.json handoff."
101
+ worker:
102
+ objective: "Implement SQLite-native agent response submission and remove agent-response.json as canonical loop state."
103
+ allowed_files:
104
+ - "src/core/agent-comparison*.ts"
105
+ - "src/core/comparison-artifacts.ts"
106
+ - "src/core/current-artifacts*.ts"
107
+ - "src/core/ledger*.ts"
108
+ - "src/core/report-writer.ts"
109
+ - "src/commands/compare*.ts"
110
+ - "src/commands/loop*.ts"
111
+ - "src/commands/ledger*.ts"
112
+ - "src/schemas/*.ts"
113
+ - "src/index.ts"
114
+ - "README.md"
115
+ - "docs/agent-workflow.md"
116
+ - "skills/limner/SKILL.md"
117
+ - "templates/target/AGENT_GUIDE.md"
118
+ verify:
119
+ - "npm test -- agent-comparison-pack loop-agent-responses loop-task ledger"
120
+ - "npm run check"
121
+ stop_if:
122
+ - "The migration requires destructive changes to existing ledgers."
123
+ - "Direct compare commands cannot remain useful without an explicit user decision."
124
+ - "The implementation would require remote telemetry or model-provider coupling."
125
+ - id: T002
126
+ type: worker
127
+ assignee: Worker
128
+ status: done
129
+ reasoning_hint: high
130
+ objective: "Implement the DB-native agent response submission/storage workflow selected by T001."
131
+ allowed_files:
132
+ - "src/core/agent-comparison*.ts"
133
+ - "src/core/comparison-artifacts.ts"
134
+ - "src/core/current-artifacts*.ts"
135
+ - "src/core/ledger*.ts"
136
+ - "src/core/report-writer.ts"
137
+ - "src/commands/compare*.ts"
138
+ - "src/commands/loop*.ts"
139
+ - "src/commands/ledger*.ts"
140
+ - "src/schemas/*.ts"
141
+ - "src/index.ts"
142
+ - "README.md"
143
+ - "docs/agent-workflow.md"
144
+ - "skills/limner/SKILL.md"
145
+ - "templates/target/AGENT_GUIDE.md"
146
+ verify:
147
+ - "npm test -- agent-comparison-pack loop-agent-responses loop-task ledger"
148
+ - "npm run check"
149
+ stop_if:
150
+ - "Need files outside allowed_files."
151
+ - "Current code shape contradicts the selected implementation approach."
152
+ - "A migration risk appears that requires an explicit Judge decision."
153
+ - "Verification fails twice with different root causes."
154
+ receipt:
155
+ result: done
156
+ changed_files:
157
+ - "src/core/agent-comparison*.ts"
158
+ - "src/core/ledger*.ts"
159
+ - "src/commands/loop*.ts"
160
+ - "src/commands/compare*.ts"
161
+ - "README.md"
162
+ - "docs/agent-workflow.md"
163
+ - "skills/limner/SKILL.md"
164
+ - "templates/target/AGENT_GUIDE.md"
165
+ commands:
166
+ - cmd: "npm test -- loop-agent-responses"
167
+ status: pass
168
+ - cmd: "npm test -- agent-comparison-pack comparison-artifacts loop-agent-responses loop-task ledger current-artifacts ledger-store"
169
+ status: pass
170
+ - cmd: "npm run typecheck"
171
+ status: pass
172
+ - cmd: "npm test"
173
+ status: pass
174
+ - cmd: "npm run check"
175
+ status: pass
176
+ summary: "Loop comparison prompts now submit responses through SQLite via loop response submit; stored comparison context validates submissions and writes summary artifacts without canonical agent-response.json."
177
+ - id: T003
178
+ type: worker
179
+ assignee: Worker
180
+ status: done
181
+ reasoning_hint: medium
182
+ objective: "Run a fresh local smoke workflow, preferably Seatify if available, and record evidence without committing generated artifacts."
183
+ allowed_files:
184
+ - "No repo file writes; smoke may write only external workspace/ledger artifacts."
185
+ - "/Users/neonwatty/Desktop/seatify-ux-limner-artifacts/2026-06-04/limner-workspaces/A-public-homepage/targets/homepage-desktop/captures/image-reference"
186
+ verify:
187
+ - "Run a fresh loop compare and loop response submit using the source CLI."
188
+ - "Confirm ledger export includes a fresh validated agent response row."
189
+ stop_if:
190
+ - "Seatify workspace is unavailable."
191
+ - "Smoke workflow needs credentials or external publishing."
192
+ - "Generated artifacts would need to be committed."
193
+ receipt:
194
+ result: done
195
+ changed_files:
196
+ - "/Users/neonwatty/Desktop/seatify-ux-limner-artifacts/2026-06-04/limner-workspaces/A-public-homepage/targets/homepage-desktop/captures/image-reference"
197
+ commands:
198
+ - cmd: "LIMNER_LEDGER_HOME=/tmp/limner-db-native-smoke.kZldTK npm run dev -- --workspace /Users/neonwatty/Desktop/seatify-ux-limner-artifacts/2026-06-04/limner-workspaces/A-public-homepage loop start --mode image-mockup --target homepage-desktop --name db-native-seatify-smoke --max-iterations 2"
199
+ status: pass
200
+ - cmd: "LIMNER_LEDGER_HOME=/tmp/limner-db-native-smoke.kZldTK npm run dev -- --workspace /Users/neonwatty/Desktop/seatify-ux-limner-artifacts/2026-06-04/limner-workspaces/A-public-homepage loop compare --trajectory traj_2da3a56dc1909a61"
201
+ status: pass
202
+ - cmd: "test ! -e targets/homepage-desktop/captures/image-reference/agent-comparison/agent-response.json"
203
+ status: pass
204
+ - cmd: "LIMNER_LEDGER_HOME=/tmp/limner-db-native-smoke.kZldTK npm run dev -- --workspace /Users/neonwatty/Desktop/seatify-ux-limner-artifacts/2026-06-04/limner-workspaces/A-public-homepage loop response submit --trajectory traj_2da3a56dc1909a61 --from-run 2026-06-14T125413357Z-db02fl --file targets/homepage-desktop/captures/image-reference/agent-comparison/agent-response.example.json"
205
+ status: pass
206
+ - cmd: "LIMNER_LEDGER_HOME=/tmp/limner-db-native-smoke.kZldTK npm run dev -- --workspace /Users/neonwatty/Desktop/seatify-ux-limner-artifacts/2026-06-04/limner-workspaces/A-public-homepage loop task --trajectory traj_2da3a56dc1909a61 --executor subagent"
207
+ status: pass
208
+ summary: "Fresh Seatify homepage loop validated DB-native response submission: pending missing row, fresh validated row, comparison summary, task brief, and skipped no-op action were all recorded."
209
+ - id: T999
210
+ type: judge
211
+ assignee: Judge
212
+ status: done
213
+ reasoning_hint: high
214
+ objective: "Audit whether DB-native agent responses satisfy the original user outcome for this tranche."
215
+ inputs:
216
+ - "All done task receipts"
217
+ - "Last verification"
218
+ - "Current dirty diff"
219
+ constraints:
220
+ - "Do not implement."
221
+ - "Reject completion if agent-response.json remains canonical in loop behavior, docs, or skills."
222
+ - "Reject completion if npm run check has not passed after implementation."
223
+ - "Reject completion if required Worker work is still queued or active."
224
+ expected_output:
225
+ - "complete | not_complete"
226
+ - "full_outcome_complete: true | false"
227
+ - "missing evidence"
228
+ - "next task if not complete"
229
+ receipt:
230
+ result: done
231
+ decision: complete
232
+ full_outcome_complete: true
233
+ summary: "Oracle satisfied: npm run check passed; Seatify smoke validated loop response submit; docs/skill/target guide teach SQLite submission; current loop comparison code no longer uses agent-response.json as canonical state."
234
+
235
+ checks:
236
+ dirty_fingerprint: "main...origin/main clean before GoalBuddy control files"
237
+ last_verification:
238
+ result: unknown
239
+ task: null
240
+ commands: []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neonwatty/limner",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Agent-guided visual fidelity workbench for turning images into HTML references and comparing references to real apps.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,24 +17,24 @@ Use `limner loop` for Ralph Loop-style polishing across one or more trajectories
17
17
 
18
18
  1. Start with `limner loop start --mode <mode> --target <name> --name <human-name> --max-iterations <count>`.
19
19
  2. Compare with `limner loop compare --trajectory <trajectory-id>`.
20
- 3. Read the generated comparison prompt and response target.
21
- 4. Write or validate the agent response.
20
+ 3. Read the generated comparison prompt.
21
+ 4. Submit the agent response with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
22
22
  5. After validation, prefer `limner loop task --trajectory <trajectory-id> --executor subagent`.
23
23
  6. Record `limner loop action start --trajectory <trajectory-id> --from-run <run-id> --kind polish --executor subagent --summary "<short edit intent>"` before edits.
24
24
  7. Make one scoped edit from the task brief.
25
25
  8. Record `limner loop action complete --trajectory <trajectory-id> --action <action-id> --executor subagent --summary "<what changed>" --files "<paths>"` after edits, then rerun `limner loop compare --trajectory <trajectory-id>`.
26
26
  9. For comparison-only smoke runs with no intended edit, record `limner loop action skip --trajectory <trajectory-id> --from-run <run-id> --summary "Comparison smoke only; no edit intended"`.
27
- 10. Check state with `limner loop status --trajectory <trajectory-id>`.
27
+ 10. Check state with `limner loop status --trajectory <trajectory-id>` or `limner loop status --trajectory <trajectory-id> --format json`.
28
28
  11. Move to the next scoped fix with `limner loop next --trajectory <trajectory-id>`.
29
29
  12. Close with `limner loop close --trajectory <trajectory-id>`.
30
30
 
31
- The intended edit loop is `loop compare -> loop task --executor subagent -> loop action start -> edit -> loop action complete -> loop compare`. Every meaningful loop interaction writes a ledger event. Agent responses are stored in local SQLite with the full JSON body, hash, validation status, and freshness, so cached reuse is visible. Keep every action `--summary` under 255 characters. Use `--feedback "<short note>"` for a 255-character `agentFeedback` note about improving the current process. Use `limner ledger export <trajectory-id> --format markdown` to hand a compact trajectory history to another agent.
31
+ The intended edit loop is `loop compare -> loop response submit -> loop task --executor subagent -> loop action start -> edit -> loop action complete -> loop compare`. Every meaningful loop interaction writes a ledger event. Agent responses are submitted to local SQLite with the full JSON body, hash, validation status, and freshness. Keep every action `--summary` under 255 characters. Use `--feedback "<short note>"` for a 255-character `agentFeedback` note about improving the current process. Use `limner ledger export <trajectory-id> --format markdown` to hand a compact trajectory history to another agent.
32
32
 
33
- Use `limner loop task --trajectory <trajectory-id> --executor subagent --format json` when another tool needs machine-readable task data.
33
+ Use `limner loop task --trajectory <trajectory-id> --executor subagent --format json` when another tool needs machine-readable task data. The task is generated from the latest validated response stored in SQLite and includes a stable `comparisonSource`; do not depend on mutable files under `captures/**` as the source of truth.
34
34
 
35
35
  Limner records executor intent and action claims; it cannot prove an external orchestrator actually used a subagent.
36
36
 
37
- Agents can discover the current command surface with `limner --help`, `limner loop --help`, `limner loop task --help`, and `limner ledger --help`.
37
+ Agents can discover the current command surface with `limner --help`, `limner loop --help`, `limner loop response --help`, `limner loop task --help`, and `limner ledger --help`.
38
38
 
39
39
  ## Image To Reference
40
40
 
@@ -44,32 +44,22 @@ Agents can discover the current command surface with `limner --help`, `limner lo
44
44
  4. Edit `reference/index.html` and `reference/styles.css`.
45
45
  5. Run `limner compare image-reference --target <name>`.
46
46
  6. Read `captures/image-reference/agent-comparison/agent-prompt.codex.md`.
47
- 7. Write `captures/image-reference/agent-comparison/agent-response.json`.
48
- 8. Rerun `limner compare image-reference --target <name>` so Limner validates `image-comparison.json` and `comparison-summary.json`.
47
+ 7. Submit JSON with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
48
+ 8. Use the validated `image-comparison.json` and `comparison-summary.json`.
49
49
  9. Use the validated next-iteration guidance for one scoped mockup fix.
50
50
 
51
- Optional structured spec layer:
52
-
53
- - Run `limner compare image-reference --target <name> --spec`.
54
- - Edit `contract/visual-spec-instructions.md` to customize the agent prompt for this target, or pass `--spec-instructions <path>` for a shared policy file.
55
- - Use `captures/image-reference/spec/agent-prompt.codex.md` for Codex or `captures/image-reference/spec/agent-prompt.claude.md` for Claude.
56
- - Use the generated `captures/image-reference/spec/agent-response.schema.json` for strict structured output when the agent supports it.
57
- - The agent should inspect the ideal image and reference screenshot separately. The side-by-side is comparison context, not the image to parse.
58
- - Have the agent write `captures/image-reference/spec/agent-response.json`.
59
- - Rerun the same command so Limner can validate the response and emit the spec and diff JSON artifacts.
60
-
61
51
  ## Reference To Implementation
62
52
 
63
53
  1. Confirm the reference HTML is approved.
64
54
  2. Ensure every important region has both `referenceSelector` and an implementation selector in `appSelector`.
65
55
  3. Run `limner compare reference-implementation --target <name> --url <implementation-url>`.
66
56
  4. Read `captures/reference-implementation/agent-comparison/agent-prompt.codex.md`.
67
- 5. Write `captures/reference-implementation/agent-comparison/agent-response.json`.
68
- 6. Rerun the same command so Limner validates image, structure, and summary comparison artifacts.
57
+ 5. Submit JSON with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
58
+ 6. Use the validated image, structure, and summary comparison artifacts.
69
59
  7. Use the validated next-iteration guidance for one scoped implementation fix.
70
60
 
71
61
  ## Constraints
72
62
 
73
- - Limner does not call an AI vision model itself. Agent comparison and the `--spec` workflow require an external agent.
63
+ - Limner does not call an AI vision model itself. Agent comparison requires an external agent.
74
64
  - Limner does not make final pass/fail judgments.
75
65
  - Limner logs only local JSONL events under `.limner/runs/`.
@@ -11,8 +11,8 @@ Prompt profiles: `ideal-to-mockup` for Loop 1, and `mockup-to-implementation` fo
11
11
  3. Edit `reference/index.html` and `reference/styles.css` until the reference is a faithful HTML facsimile.
12
12
  4. Run `limner compare image-reference --target <target>`.
13
13
  5. Read `captures/image-reference/agent-comparison/agent-prompt.codex.md`.
14
- 6. Write `captures/image-reference/agent-comparison/agent-response.json`.
15
- 7. Rerun the comparison and use the validated next-iteration guidance for one scoped mockup fix.
14
+ 6. Submit JSON with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
15
+ 7. Use the validated next-iteration guidance for one scoped mockup fix.
16
16
 
17
17
  ## Loop 2: Reference To Implementation
18
18
 
@@ -20,8 +20,8 @@ Prompt profiles: `ideal-to-mockup` for Loop 1, and `mockup-to-implementation` fo
20
20
  2. Add implementation selectors to `contract/regions.json` using `appSelector`.
21
21
  3. Run `limner compare reference-implementation --target <target> --url <implementation-url>`.
22
22
  4. Read `captures/reference-implementation/agent-comparison/agent-prompt.codex.md`.
23
- 5. Write `captures/reference-implementation/agent-comparison/agent-response.json`.
24
- 6. Rerun the comparison and use the validated next-iteration guidance for one scoped implementation fix.
23
+ 5. Submit JSON with `limner loop response submit --trajectory <trajectory-id> --from-run <run-id> --file ./response.json`.
24
+ 6. Use the validated next-iteration guidance for one scoped implementation fix.
25
25
 
26
26
  ## Rule
27
27