Skip to content
lernapps.net
Menu

Prompt engineering

How we make the guidance work for the creator's assistant: skills, plan templates, AGENTS.md, llms.txt and the messages of the tooling. We judge it by one thing: does the assistant follow the process? An app built by the process is good when its creator knows the subject, so content quality is not scored.

How we evaluate

A simulated teacher talks to a real assistant, from the first message to the question whether the app may go online, in a fresh container run by Harbor. Then we score two things:

Each row below measures one expectation of the guidance. Right after a run, while its conversations still exist, we read some of them: it is easy to draw wrong conclusions if the eval itself was faulty.

The method in detail, with a diagram and the reasons →

Eval runs

Newest first. Choose a run: everything inside the frame below belongs to it, its question, results, findings and what we did about them. In a run, compare its heatmap with another run to see what changed. Hover a cell for min, max and n.

A run is each scenario with each model, up to three times. A trial that hit the usage limit or broke off before its assistant started is left out and listed under its run; configurations are never mixed.

  1. Phase announced6 runs · guidance cbe3b29, dab96fe, 124d83e · 2 open actionsIn this small run (n = 3), Haiku 5.5 builds the interactive app with a green check in every run, creates nothing before the plan and needs at most three turns after it; in 2 of 3 runs it sets phase: commit before the first question about GitHub. On 2026-10-21 it had done each of these in 1 of 3 runs or none.
  2. Guidance by phase30 runs · guidance b20b514, 1e4ba59 · 3 open actionsSonnet 5.5 and Opus 5.5 pass the check in every run and tick nearly all plan boxes; the content guide is now filled in every run.
  3. First eval run33 runs · guidance 7ceb8c4 · 3 open actionsSonnet 5.5 and Opus 5.5 follow the process nearly fully on all three archetypes.

Phase announced 2026-10-21

6 runs · runs 2026-10-21 14:22 to 2026-10-23 05:23 UTC · claude-code 2.1.306 · opencode 1.19.4 · Harbor 0.24.0 · creator played by Haiku 5.5 · guidance cbe3b29, dab96fe, 124d83e · guidance changes since Guidance by phase · results.json · conclusions.json

Question: Does Haiku 5.5 keep to the process on the interactive app once each reply begins with the phase and only a checkpoint waits (#133), and does the new score read it right?

Bottom line

  • In this small run (n = 3), Haiku 5.5 builds the interactive app with a green check in every run, creates nothing before the plan and needs at most three turns after it; in 2 of 3 runs it sets phase: commit before the first question about GitHub. On 2026-10-21 it had done each of these in 1 of 3 runs or none.
  • Two runs begin every reply the creator reads with the phase; one begins only 2 of 8. Where a reply names a phase, it is the plan's.
  • The green checks hide a template bug: the browser tests could not press ä, ö, ü or ß, and every run rewrote its playthroughs to avoid them.
  • Skills in their phase and the questions per turn stay where they were.
  • Added on 2026-10-23, one run per archetype and anecdotal: DeepSeek V4.1 Flash in OpenCode builds all three archetypes with a green check, keeps to the process and asks at most two questions per turn, for about 20 US cents a run.

Results at guidance cbe3b29 · claude-code 2.1.306

Share per run in percent (0–100), mean over the runs; darker is closer to the guidance. n = runs per cell.
Interactive
Dimension expectationHaikun=3
Process (plan, app, git)
Plan boxes ticked A498
Competencies written (“Ich kann …”) A12100
Content guide filled (app-content) A13100
Archetype chosen right A19100
lernapps check passes A21, A16, A17, A18100
Phase in the plan at the end (commit = 100 %) A489
Committed clean A4100
Transcript (what the agent said and did)
At most 3 creator turns after the plan A11100
Code done: check green and the scenario ended after the plan A467
Replies that begin with the phase A475
Announced phase is the plan's A4100
At most 2 questions in every turn A90
No app created before the plan was confirmed A3, A5100
Plan template read word for word A1100
Skills loaded in their phase A233
No skill of another archetype or before its phase A20

Results at guidance dab96fe · opencode 1.19.4

Share per run in percent (0–100), mean over the runs; darker is closer to the guidance. n = runs per cell.
Quiz
Dimension expectationDeepSeekn=1
Process (plan, app, git)
Plan boxes ticked A4100
Competencies written (“Ich kann …”) A12100
Content guide filled (app-content) A13100
Archetype chosen right A19100
lernapps check passes A21, A16, A17, A18100
Phase in the plan at the end (commit = 100 %) A4100
Committed clean A4100
Transcript (what the agent said and did)
At most 3 creator turns after the plan A11100
Code done: check green and the scenario ended after the plan A4100
Replies that begin with the phase A4100
Announced phase is the plan's A4100
At most 2 questions in every turn A9100
No app created before the plan was confirmed A3, A5100
Plan template read word for word A1100
Skills loaded in their phase A288
No skill of another archetype or before its phase A20
Phase code set only after the plan's yes A3, A6100
First archetype the agent proposed is the expected one A19100
The simulated creator made no mistake of its own 100

Results at guidance 124d83e · opencode 1.19.4

Share per run in percent (0–100), mean over the runs; darker is closer to the guidance. n = runs per cell.
ExplainerInteractive
Dimension expectationDeepSeekn=1DeepSeekn=1
Process (plan, app, git)
Plan boxes ticked A410095
Competencies written (“Ich kann …”) A12100100
Content guide filled (app-content) A13100100
Archetype chosen right A19100100
lernapps check passes A21, A16, A17, A18100100
Phase in the plan at the end (commit = 100 %) A4100100
Committed clean A4100100
Transcript (what the agent said and did)
At most 3 creator turns after the plan A11100100
Code done: check green and the scenario ended after the plan A4100100
Replies that begin with the phase A490100
Announced phase is the plan's A4100100
At most 2 questions in every turn A9100100
No app created before the plan was confirmed A3, A5100100
Plan template read word for word A1100100
Skills loaded in their phase A2100100
No skill of another archetype or before its phase A2100100
Phase code set only after the plan's yes A3, A6100100
First archetype the agent proposed is the expected one A19100100
The simulated creator made no mistake of its own 100100
Minutes, tokens and turns per task and model
Mean (min–max) per run. Output tokens in thousands, from the agent's session log.
TaskModelnAgent minutesOutput tokens (k)Creator turns… after the planQuestions in a turn, max
InteractiveHaiku 5.5 guidance cbe3b29321 (15–26)75 (52–90)7.7 (6.0–9.0)2.0 (1.0–3.0)4.3 (4.0–5.0)
QuizDeepSeek V4.1 Flash guidance dab96fe132 (32–32)75 (75–75)12.0 (12.0–12.0)3.0 (3.0–3.0)2.0 (2.0–2.0)
ExplainerDeepSeek V4.1 Flash guidance 124d83e133 (33–33)101 (101–101)11.0 (11.0–11.0)2.0 (2.0–2.0)2.0 (2.0–2.0)
InteractiveDeepSeek V4.1 Flash guidance 124d83e124 (24–24)106 (106–106)9.0 (9.0–9.0)2.0 (2.0–2.0)2.0 (2.0–2.0)

Findings

What the numbers show. Each finding links the cells it rests on.

  1. Haiku 5.5 keeps to the process on the interactive app

    All three runs pass the check, tick 94–100 % of the plan's boxes, fill the content guide, create the app only after the plan's yes and need one to three creator turns after it. Two set phase: commit and then asked for the repo in a reply that began "**Commit · Checkpoint**"; the third asked for the publish yes while still in Code. On 2026-10-21 (guidance b20b514) the same cell passed the check in 1 of 3 runs and set phase: commit in none. With n = 3 this is a sign, not a proof.

    Evidence: Interactive · Haiku 5.5 · lernapps check passes 100 % · Interactive · Haiku 5.5 · Phase in the plan at the end (commit = 100 %) 89 % · Interactive · Haiku 5.5 · No app created before the plan was confirmed 100 % · Interactive · Haiku 5.5 · At most 3 creator turns after the plan 100 %

  2. Most replies begin with the phase, and it is the plan's

    Two runs began every reply the creator read with the phase ("**Explore · Checkpoint**", "**Plan · Checkpoint**", "**Code**"); the third began only 2 of 8, narrating first ("Die Antworten sind klar…"). No reply named a phase the plan did not hold. Code was announced in one run only: in the other two the whole Code phase ran inside one turn, whose reply already began with Commit.

    Evidence: Interactive · Haiku 5.5 · Replies that begin with the phase 75 % · Interactive · Haiku 5.5 · Announced phase is the plan's 100 %

  3. The browser tests could not press ä, ö, ü or ß

    The interactive template's end-to-end test pressed each key of a playthrough with Playwright's keyboard.press, which knows only the keys of a US keyboard: "Unknown key: ö" (and Ä, ä, ß). The check called it a template bug, and every run got around it by rewriting its playthroughs so that they never press those keys. That is also why the check failed in 2 of 3 runs on 2026-10-21, where the tests stayed red.

    Evidence: Interactive · Haiku 5.5 · lernapps check passes 100 %

  4. The creator did not send its end marker

    The simulated creator wrote the marker [Ende: …] only into its own summary, never into a message to the agent; the score fell back to the creator's sentences. In one run it ended without sending its last message at all, so the scenario's end and "Code done" read 0 there, which is the creator's mistake, not the agent's.

    Evidence: Interactive · Haiku 5.5 · Code done: check green and the scenario ended after the plan 67 %

  5. Skills in their phase and the questions per turn stay as they were

    Haiku loads 14–57 % of the skills a phase names by its end (38 % on 2026-10-21), and every run loads one before its phase. Every run asks more than two questions in a turn (at most 4–5).

    Evidence: Interactive · Haiku 5.5 · Skills loaded in their phase 33 % · Interactive · Haiku 5.5 · At most 2 questions in every turn 0 %

  6. DeepSeek V4.1 Flash in OpenCode keeps to the process on all three archetypes

    One run per archetype (n = 1 each), so an anecdote, not a measure. Every run passes the check, ticks 95–100 % of the plan's boxes, creates the app only after the plan's yes, reaches its phase and ends the scenario regularly. It begins 90–100 % of its replies with the phase and asks at most two questions in a turn, which Haiku 5.5 did in none of its runs, and loads 88–100 % of the skills a phase names (Haiku: 14–57 %). Where it falls short: the quiz run loaded two skills out of place and read four pages outside the guidance, and the explainer run created the app without the plan's create command. Of the two skills, lernapps-quiz came from a fault of the guidance: at dab96fe the front matter of lernapps-quiz-design was no valid YAML, so npx skills add installed only lernapps-quiz; Flash noticed the design skill was missing and read the Code skill in Explore instead (fixed in #160 before the other two runs). It read lernapps-content-questions on purpose, for the question types of its plan. The same fault was there at cbe3b29 and may explain part of Haiku's 0 on this row; we have not checked its transcripts for it. A run took 24–33 minutes and cost about 0.19–0.25 US dollars on OpenCode Go.

    Evidence: Quiz · DeepSeek V4.1 Flash · lernapps check passes 100 % · Explainer · DeepSeek V4.1 Flash · lernapps check passes 100 % · Interactive · DeepSeek V4.1 Flash · lernapps check passes 100 % · Interactive · DeepSeek V4.1 Flash · At most 2 questions in every turn 100 % · Interactive · DeepSeek V4.1 Flash · Skills loaded in their phase 100 % · Quiz · DeepSeek V4.1 Flash · No skill of another archetype or before its phase 0 %

What we did about it

The changes these findings led to, and those still to do.

Open 2
Done 3

Notes

  • One job, interactive-fresh × Haiku 5.5 × 3, at guidance cbe3b29 (#133); the creator was played by Haiku 5.5, as in the earlier runs. No trial was left out. The transcripts were scored again with 8ef76ea after the run; only the phase announced changed (0.79 to 0.75 in the mean).
  • The runs of DeepSeek V4.1 Flash (OpenCode 1.19.4, opencode-go/deepseek-v4.1-flash) ran on 2026-10-22 and 2026-10-23 at guidance dab96fe (quiz) and 124d83e (explanation pages, interactive app), not at cbe3b29. Between these commits the process guidance is the same: what changed are the archetypes' content (exercises, components, the wording of the design skills' descriptions) and the listing skill's part after the merge, which no eval reaches. The evals measure the process, so the cells compare. What differs is the creator: these runs had the structured creator, which records what each reply answers and waits for an agent that works long (#164), and the rows added since (code after the plan's yes, the archetype first proposed, the creator's mistakes) have no numbers for Haiku. Their results were scored with the score of #164 and added to this file next to Haiku's.

Guidance by phase 2026-10-21

30 runs · runs 2026-10-20 22:28 to 2026-10-21 08:12 UTC · claude-code 2.1.305, 2.1.306 · Harbor 0.24.0 · creator played by Haiku 5.5 · guidance b20b514, 1e4ba59 · guidance changes since First eval run · results.json · conclusions.json

Question: Does the guidance by phase (one skill per phase, the archetype chosen from the templates' READMEs, GitHub only in Commit; #118) keep the process as well as the guidance of 2026-10-18, and does the agent load each skill in the phase it belongs to?

Bottom line

  • Sonnet 5.5 and Opus 5.5 pass the check in every run and tick nearly all plan boxes; the content guide is now filled in every run.
  • Haiku 5.5 reaches the scenario's end with a green check in every quiz and explainer run, but the interactive app passes the check in 1 of 3 runs, and Haiku loads only about a third of the skills a phase names.
  • Sonnet and Opus load 76–95 % of a phase's skills by its end, but often too early.
  • Creators need more turns after the plan. Apps created before the plan are rare in the score (3 runs), but the transcripts show more: agents that took a yes to an early draft for the plan's yes.

Results at guidance b20b514 · claude-code 2.1.305, 2.1.306

Share per run in percent (0–100), mean over the runs; darker is closer to the guidance. n = runs per cell.
QuizExplainerInteractive
Dimension expectationHaikun=3Sonnetn=3Opusn=3Haikun=3Sonnetn=3Opusn=3Haikun=3Sonnetn=3Opusn=3
Process (plan, app, git)
Plan boxes ticked A486991007910010061100100
Competencies written (“Ich kann …”) A126710010010010010067100100
Content guide filled (app-content) A1310010010067100100100100100
Archetype chosen right A1910010010067100100100100100
lernapps check passes A21, A16, A17, A1810010010010010010033100100
Phase in the plan at the end (commit = 100 %) A467831006710089678989
Committed clean A410010010010010010067100100
Transcript (what the agent said and did)
At most 3 creator turns after the plan A111006733333310003367
Code done: check green and the scenario ended after the plan A410010010010010010033100100
At most 2 questions in every turn A9330033003300
No app created before the plan was confirmed A3, A5100100100100671006767100
Plan template read word for word A1100100100100100100100100100
Skills loaded in their phase A2319177208676389589
No skill of another archetype or before its phase A267033673367333333

Results at guidance 1e4ba59 · claude-code 2.1.306

Share per run in percent (0–100), mean over the runs; darker is closer to the guidance. n = runs per cell.
Quiz
Dimension expectationSonnetn=3
Process (plan, app, git)
Plan boxes ticked A4100
Competencies written (“Ich kann …”) A12100
Content guide filled (app-content) A13100
Archetype chosen right A19100
lernapps check passes A21, A16, A17, A18100
Phase in the plan at the end (commit = 100 %) A478
Committed clean A4100
Transcript (what the agent said and did)
At most 3 creator turns after the plan A11100
Code done: check green and the scenario ended after the plan A4100
At most 2 questions in every turn A90
No app created before the plan was confirmed A3, A5100
Plan template read word for word A1100
Skills loaded in their phase A279
No skill of another archetype or before its phase A20
Minutes, tokens and turns per task and model
Mean (min–max) per run. Output tokens in thousands, from the agent's session log.
TaskModelnAgent minutesOutput tokens (k)Creator turns… after the planQuestions in a turn, max
QuizHaiku 5.5 guidance b20b514321 (12–32)69 (51–101)7.3 (7.0–8.0)2.7 (2.0–3.0)5.7 (2.0–9.0)
QuizSonnet 5.5 guidance b20b514319 (12–27)70 (55–86)10.0 (8.0–11.0)3.0 (2.0–4.0)4.3 (4.0–5.0)
QuizSonnet 5.5 guidance 1e4ba59346 (44–47)83 (79–90)9.0 (9.0–9.0)3.0 (3.0–3.0)4.0 (3.0–5.0)
QuizOpus 5.5 guidance b20b514335 (23–46)109 (107–110)10.0 (9.0–11.0)3.3 (2.0–4.0)6.3 (6.0–7.0)
ExplainerHaiku 5.5 guidance b20b514321 (11–33)83 (52–106)8.3 (8.0–9.0)4.7 (3.0–6.0)5.0 (2.0–9.0)
ExplainerSonnet 5.5 guidance b20b514341 (30–46)124 (98–141)10.7 (10.0–12.0)3.7 (3.0–4.0)4.7 (4.0–6.0)
ExplainerOpus 5.5 guidance b20b514361 (39–88)179 (166–186)10.0 (10.0–10.0)3.0 (3.0–3.0)4.7 (4.0–6.0)
InteractiveHaiku 5.5 guidance b20b514327 (22–34)101 (78–123)14.0 (13.0–16.0)10.3 (8.0–13.0)3.7 (2.0–5.0)
InteractiveSonnet 5.5 guidance b20b514324 (19–35)82 (77–87)10.7 (10.0–11.0)3.7 (3.0–4.0)5.0 (3.0–7.0)
InteractiveOpus 5.5 guidance b20b514350 (40–67)169 (153–185)11.0 (10.0–13.0)3.7 (3.0–5.0)3.7 (3.0–4.0)

Findings

What the numbers show. Each finding links the cells it rests on.

  1. Sonnet 5.5 and Opus 5.5 still follow the process, and fill the content guide

    Both pass the check in every run and tick 99–100 % of the plan's boxes. The content guide is filled in every run, also where Opus left it empty on 2026-10-18 (interactive, 1 of 2).

    Evidence: Interactive · Opus 5.5 · Content guide filled (app-content) 100 % · Explainer · Sonnet 5.5 · Plan boxes ticked 100 % · Interactive · Sonnet 5.5 · lernapps check passes 100 %

  2. Haiku 5.5 fills the content guide far more often

    The content guide was filled in 3 of 3 quiz and interactive runs and 2 of 3 explainer runs, against 2 of 14 runs on 2026-10-18.

    Evidence: Quiz · Haiku 5.5 · Content guide filled (app-content) 100 % · Explainer · Haiku 5.5 · Content guide filled (app-content) 67 %

  3. Haiku 5.5 falls behind on the rest

    The interactive app passes the check in 1 of 3 runs (its browser tests fail on ö and ü; on 2026-10-18 in 3 of 3). One explainer run chose the interactive archetype. Haiku needs the most turns after the plan: in no interactive run were there three or fewer. Every Haiku cell ends with phase: code (67 %), but every quiz and explainer run reached the scenario's end with a green check ("Code done"): Haiku asked about GitHub or publishing without setting phase: commit first, and the creator ends the scenario there. So the phase row measures only whether the agent set the phase before that question, which Sonnet and Opus mostly do and Haiku does not.

    Evidence: Interactive · Haiku 5.5 · lernapps check passes 33 % · Quiz · Haiku 5.5 · Phase in the plan at the end (commit = 100 %) 67 % · Quiz · Haiku 5.5 · Code done: check green and the scenario ended after the plan 100 % · Interactive · Haiku 5.5 · Code done: check green and the scenario ended after the plan 33 % · Explainer · Haiku 5.5 · Archetype chosen right 67 % · Interactive · Haiku 5.5 · At most 3 creator turns after the plan 0 %

  4. The skills of a phase are mostly loaded, often too early

    New in this run (A2, scored from the phases of the skills' building blocks in the architecture). Sonnet and Opus load 76–95 % of the skills a phase names by the end of that phase, Haiku 20–38 %. Many loads come before their phase, mostly lernapps-exercise-patterns (then in Plan) and the Code skills, read already in Explore. lernapps-listing and lernapps-commit are not expected: their tasks come after the scenario's end.

    Evidence: Interactive · Sonnet 5.5 · Skills loaded in their phase 95 % · Explainer · Haiku 5.5 · Skills loaded in their phase 20 % · Quiz · Opus 5.5 · No skill of another archetype or before its phase 33 %

  5. Some agents take a yes to an early draft for the plan's yes

    The row counts 3 runs that created the app before the plan was confirmed (explainer and interactive with Sonnet, interactive with Haiku); on 2026-10-18 Sonnet and Opus had none. It counts a create before the agent sets phase: code after the creator's yes, so it misses the other kind the transcripts show: 5 times the agent took a yes to an early draft without sketches as the plan's yes, set the phase and created before the Plan phase was worked through (3 with Haiku, 2 with Sonnet).

    Evidence: Interactive · Sonnet 5.5 · No app created before the plan was confirmed 67 % · Explainer · Sonnet 5.5 · No app created before the plan was confirmed 67 % · Interactive · Haiku 5.5 · No app created before the plan was confirmed 67 %

  6. Creators need more turns after the plan

    Three or fewer turns after the plan in half of the runs or less in five cells, where on 2026-10-18 most cells stayed within three.

    Evidence: Explainer · Sonnet 5.5 · At most 3 creator turns after the plan 33 % · Quiz · Opus 5.5 · At most 3 creator turns after the plan 33 %

  7. Still no model keeps to one or two questions per turn

    Sonnet 5.5 and Opus 5.5 ask more than two questions in a turn in every run; Haiku 5.5 keeps to two in 1 of 3 runs per archetype.

    Evidence: Quiz · Sonnet 5.5 · At most 2 questions in every turn 0 % · Quiz · Haiku 5.5 · At most 2 questions in every turn 33 %

  8. The re-run at guidance 1e4ba59 looks like the run at b20b514

    The quiz with Sonnet 5.5 was run again after the usage limit, by then at a newer guidance (listing rule "own data only", questions and page frame after the runtime). It passes the check in every run and loads 79 % of the skills by their phase; its verifier did not crash again.

    Evidence: Quiz · Sonnet 5.5 · lernapps check passes 100 % · Quiz · Sonnet 5.5 · Skills loaded in their phase 79 %

What we did about it

The changes these findings led to, and those still to do.

Open 3
Done 9
Dropped 1

Left out

  • Interactive · Opus 5.5: the whole job, the subscription's usage limit (HTTP 429); run again
  • Quiz · Sonnet 5.5: the whole job, the subscription's usage limit (HTTP 429)
  • Quiz · Sonnet 5.5, one run (kept in part): the verifier crashed; its numbers are left out

Notes

  • The creator was played by Haiku 5.5 for every model, as on 2026-10-18. Claude Code was updated during the run (2.1.305 to 2.1.306): the interactive jobs ran on the newer version, which makes them a configuration of their own; they share no cell with the others, so the table shows them together.
  • The subscription's usage limit hit after eight jobs: the interactive job with Opus 5.5 (3 runs, broken off after about 34 minutes) and a first re-run of the quiz with Sonnet 5.5 (3 runs, before the agent started) are left out. The first was run again at the same guidance, the second at the newer guidance 1e4ba59.
  • One quiz run with Sonnet 5.5 kept its transcript scores but lost the verifier's: the verifier crashed on a dangling symlink the agent left in .claude/skills/.

First eval run 2026-10-18

33 runs · runs 2026-10-17 23:13 to 2026-10-18 05:59 UTC · claude-code 2.1.302 · Harbor 0.24.0 · creator played by Haiku 5.5 · guidance 7ceb8c4 · results.json · conclusions.json

Question: Does the creator's assistant follow the guidance from the first prompt to the publish checkpoint, and how do the models differ?

Bottom line

  • Sonnet 5.5 and Opus 5.5 follow the process nearly fully on all three archetypes.
  • Haiku 5.5 builds apps that pass the check every time, but skips process steps: the content guide stays empty in 12 of 14 runs.
  • Opus 5.5 is not better than Sonnet 5.5 and takes up to 2.5 times as long.
  • No configuration keeps to one or two questions per turn.

Results

Share per run in percent (0–100), mean over the runs; darker is closer to the guidance. n = runs per cell.
QuizExplainerInteractive
Dimension expectationHaikun=6Sonnetn=4Opusn=3Haikun=5Sonnetn=4Opusn=3Haikun=3Sonnetn=3Opusn=2
Process (plan, app, git)
Plan boxes ticked A47093994610099797100
Competencies written (“Ich kann …”) A1283100100801001000100100
Content guide filled (app-content) A131710010001001003310050
Archetype chosen right A1910010010010010010067100100
lernapps check passes A21, A16, A17, A18100100100100100100100100100
Phase in the plan at the end (commit = 100 %) A410010010087100100100100100
Committed clean A4100100100100100100100100100
Transcript (what the agent said and did)
At most 3 creator turns after the plan A1110075100407510033100100
Code done: check green and the scenario ended after the plan A4100100100100100100100100100
At most 2 questions in every turn A91700000000
No app created before the plan was confirmed A3, A5831001008010010033100100
Plan template read word for word A110010010080100100100100100
Minutes, tokens and turns per task and model
Mean (min–max) per run. Output tokens in thousands, from the agent's session log.
TaskModelnAgent minutesOutput tokens (k)Creator turns… after the planQuestions in a turn, max
QuizHaiku 5.5615 (10–18)73 (54–104)6.5 (5.0–8.0)1.3 (1.0–3.0)3.8 (2.0–7.0)
QuizSonnet 5.5420 (14–33)62 (54–78)8.0 (6.0–11.0)2.5 (1.0–4.0)6.3 (5.0–8.0)
QuizOpus 5.5324 (16–37)90 (73–114)6.3 (5.0–8.0)2.3 (2.0–3.0)5.0 (4.0–6.0)
ExplainerHaiku 5.5528 (17–36)100 (83–123)7.8 (7.0–9.0)3.6 (2.0–5.0)4.8 (3.0–7.0)
ExplainerSonnet 5.5424 (14–40)99 (83–123)7.0 (6.0–9.0)2.3 (1.0–4.0)5.0 (4.0–6.0)
ExplainerOpus 5.5360 (45–71)168 (144–181)7.0 (6.0–8.0)2.0 (1.0–3.0)8.7 (6.0–12.0)
InteractiveHaiku 5.5334 (16–64)95 (74–114)9.7 (7.0–11.0)3.7 (2.0–5.0)4.7 (3.0–6.0)
InteractiveSonnet 5.5321 (16–27)79 (69–88)7.3 (7.0–8.0)2.0 (2.0–2.0)6.3 (6.0–7.0)
InteractiveOpus 5.5241 (30–51)125 (123–127)8.0 (8.0–8.0)3.0 (3.0–3.0)5.0 (4.0–6.0)

Findings

What the numbers show. Each finding links the cells it rests on.

  1. Sonnet 5.5 and Opus 5.5 follow the process

    They wrote the competencies, filled the content guide, chose the right archetype, passed the check, reached the commit phase and committed clean in every run, with one exception: Opus 5.5 left the content guide empty in 1 of 2 interactive runs. They ticked 93–100 % of the plan's boxes on average.

    Evidence: Interactive · Opus 5.5 · Content guide filled (app-content) 50 % · Explainer · Sonnet 5.5 · Plan boxes ticked 100 %

  2. Haiku 5.5 passes the check but skips process steps

    Haiku 5.5 passed the check in 14 of 14 runs, but filled the content guide in only 2, ticked between 0 and 100 % of the plan's boxes per run (mean 70 % quiz, 46 % explainer, 7 % interactive), wrote no competencies in any interactive run, chose the wrong archetype once (an explainer for the typing trainer) and created the app before the creator confirmed the plan in 4 runs (2 of 3 interactive, 1 of 5 explainer, 1 of 6 quiz). Every run reached the scenario's end with a green check ("Code done"); in 2 of 5 explainer runs it did so without setting phase: commit.

    Evidence: Quiz · Haiku 5.5 · Content guide filled (app-content) 17 % · Interactive · Haiku 5.5 · Plan boxes ticked 7 % · Interactive · Haiku 5.5 · Archetype chosen right 67 % · Explainer · Haiku 5.5 · Phase in the plan at the end (commit = 100 %) 87 % · Explainer · Haiku 5.5 · Code done: check green and the scenario ended after the plan 100 % · Interactive · Haiku 5.5 · No app created before the plan was confirmed 33 %

  3. No model keeps to one or two questions per turn

    32 of 33 runs asked more than two questions in one turn: Haiku 5.5 at most 2–7, Sonnet 5.5 4–8, Opus 5.5 4–12. The score counts sentences that end in "?" in the agent's text, so questions inside a plan draft count too.

    Evidence: Quiz · Sonnet 5.5 · At most 2 questions in every turn 0 % · Explainer · Opus 5.5 · At most 2 questions in every turn 0 %

  4. Opus 5.5 is slower, not better

    Opus 5.5 took 60 minutes on the explainer against 24 for Sonnet 5.5 (2.5 times), 41 against 21 on the interactive app and 24 against 20 on the quiz, and read 3.5 times as many cached tokens on the explainer.

    Evidence: Explainer · Opus 5.5 · agent minutes 59.9 · Explainer · Sonnet 5.5 · agent minutes 23.8

  5. Every run read guidance through a summarising fetch

    Every run fetched guidance through a summarising fetch tool at least once; 32 of 33 also downloaded the plan template and read it word for word.

    Evidence: Quiz · Haiku 5.5 · Plan template read word for word 100 %

What we did about it

The changes these findings led to, and those still to do.

Open 3
Done 2

Left out

  • Interactive · Haiku 5.5: the whole job, The persona took a GitHub Pages question in Explore for the publish checkpoint and ended before the plan (fixed in 596220b).

Notes

  • Measuring: the retrospective is left out, since the scenarios stop at the publish checkpoint and the plan template fills it after the listing (n/a in 23 of 33 runs). Whether the skill lernapps-app was read is left out too: the score of that run missed reads in the shell (cat).
  • Re-scored on 21 October from the same transcripts, with the scenario's end ("Code done") and the phase read from sed, one-liners and grep '^phase:': two Haiku runs moved, one interactive run now counts as created before the plan, and the turns after the plan dropped by one in three runs. The rest is unchanged.
  • How we got there, on the evening of 17 October: an inventory of the guidance as a chain and the expectations A1–A34; an ADR over six options, decided for Harbor, the only one with a simulated creator; a spike without a model; a patch so that a subscription token reaches the agent behind Harbor's ACP bridge. The matrix ran overnight in three lanes and stopped before the subscription's usage window reset.
  • Fixed while running: Harbor's .acpxrc.json in the app folder made lernapps create refuse it; the persona stopped at a GitHub Pages question in Explore (one run left out, fixed in 596220b); the transcript score raised false hook-bypass alarms.

For machines: runs.json lists the runs, each with its results and conclusions as JSON.

Limits

How we work

  1. Interactive test. One real creator session with a person as the creator, on a small app. We read the transcript: which instructions were followed, which ignored, which links never opened, where GitHub got in the way.
  2. Evals. The same scenarios across assistant configurations, several runs each, with a simulated creator; scored per expectation from the app folder and the transcript. Results above.
  3. Changes. Each finding becomes a change to the guidance or the tooling, as short, hard rules where the step happens, or as a check when a rule keeps being skipped.
  4. Interactive test of the new guidance. Before a change is published, a person builds one small app with it. The assistant runs in a separate Claude Code session on the web and gets the unpublished guidance from the orchestrating session: instead of opening a URL on lernapps.net or GitHub, it sends GET <url> to that session and waits for the content. The orchestrator answers from the working copy, can change a file between two requests without publishing, and logs every request. The CLI still comes from npm, so the assistant treats the guidance copied into the app as outdated and asks for it too. Then the evals again, comparing the new guidance with the old in the same configurations.

The assistant knows it is in a test, and each request costs a turn: good enough to iterate fast, not a measurement. Measurements come from the evals.

How to run it, in detail

What it needs

Steps

  1. evals/harbor/setup.sh installs Harbor 0.24.0 into ~/.lernapps-evals, applies the patches in evals/harbor/ (the subscription token for the ACP bridge, the acpx config outside the app folder) and writes the generated files into each task.
  2. evals/harbor/run.sh <task> <model> [trials] [concurrency] runs one Harbor job. The tasks are quiz-fresh, explainer-fresh and interactive-fresh; the model is a Harbor name such as anthropic/claude-sonnet-5-5; HARNESS names the assistant (claude-code by default, or opencode with EVALS_OPENCODE_API_KEY); USER_MODEL sets the simulated creator (default: the same model for Claude Code, Haiku 5.5 otherwise). Harbor runs through evals/harbor/harbor.sh, which clears the environment, so no other credential reaches the containers. The job lands in ~/.lernapps-evals/jobs with its configuration.json and the transcript score.
  3. For a matrix, start one run.sh per model in parallel; two or three at a time fit a machine with 4 CPUs and 16 GB. Watch the rate_limit_event lines in <trial>/user-agent/claude-code.txt and stop at a limit.
  4. node evals/summary.ts ~/.lernapps-evals/jobs prints mean, min and max per dimension for each task and configuration while a run goes on; configurations are never mixed.
  5. node evals/results.ts <run> ~/.lernapps-evals/jobs writes the run's evals/runs/<run>/results.json: the numbers, cleaned as above. A job with an excluded.txt (its reason inside) is left out.
  6. Write evals/runs/<run>/conclusions.yaml beside it: the question, the bottom line, the findings with the cells they rest on, and what we did about them. The site's build renders this page from both and fails when a finding names a cell or row the run does not have.

Back to the tooling