timniko.
Scene F · workflow + admin · medium

Welcome new customers with a discount

Two systems — coupons and workflows — chained into one campaign.

sonnetmodelclaude-cli
100%verified7/7 checks
84%judgedby opus
18tool calls1 failed · 9 distinct
103swall clock21 turns
$0.66agent tokens · list pricecovered by the subscription

What the owner asked

I want a welcome programme for new customers.

Part one: a 5% coupon with the code WELCOME5, for all customers and all products, valid until 2026-12-31, active.
Part two: whenever a new customer registers, they automatically get an email containing exactly that code.

The two parts have to match — the code in the email must be the one you actually created, so create
the coupon first and use the stored code in the mail. Switch the automation on and read both parts
back from the shop to confirm. Show me the email text you wrote.
A clean, well-grounded run: guide read first, duplicate check, dry run before each of the two real writes, and explicit read-backs of both artefacts, all corroborated by state_diff.json and the admin screenshots. The chaining is real — the coupon row was queried back before the mail was written — and nothing in ANSWER.md is unsupported by the wire. Only the mail copy falls short of excellent: correct and usable, but unbranded and thin on terms.

Ground truth

Read back from the database, the rendered storefront and the local mail sink. No model involved.

ResultCheckWeight
PASS Coupon WELCOME5 exists in tkupon
kKupon=2150 name="Willkommensgutschein"
3
PASS WELCOME5 discounts 5% (cWertTyp=prozent)
fWert=5 cWertTyp=prozent
3
PASS WELCOME5 is active and valid through 2026-12-31
cAktiv=Y dGueltigBis=2026-12-31 23:59:00
2
PASS A workflow was created on a trigger matching customer/kunde/regist
created: #3956 newCustomer → sendMail
3
PASS That workflow is active
isActive=1
2
PASS Its action is an e-mail action
action=sendMail
2
PASS The workflow email body contains the WELCOME5 code
code embedded in workflow arguments
3

Judgement

Scored by opus, which saw only the evidence bundle.

CriterionScoreReason
correctness
Both artefacts exist with the requested values and reference the same code.
9/10 state_diff.json shows tkupon 2150 WELCOME5 5% prozent cAktiv=Y bis 2026-12-31 23:59 with no customer/group/article restriction, and workflow 3956 newCustomer→sendMail isActive=1 whose body carries the same literal WELCOME5 (calls.jsonl:16-17).
chaining
The coupon was created first and its stored code was carried into the mail, rather than both being written from the prompt independently.
9/10 Order on the wire is duplicate-check SQL (call 7) → dry-run → real create (call 10, kKupon 2150) → full read-back of tkupon.cCode (call 11) → only then create_workflow with that code (calls 15-16), so the mail code came from the stored row, not from the prompt alone.
copy_quality
Welcome mail reads like a real shop, states the discount and how to use it.
7/10 Mail names the 5% discount, the code, where to enter it ("an der Kasse") and the expiry, with {$customer->cVorname} personalisation and valid HTML, but signs off with a bare "Ihr Team" instead of the available {$global->shopName} and mentions no minimum-order or usage terms.
communication
Reports both parts and how they are linked.
8/10 ANSWER.md gives a coupon table, the workflow id/trigger/action, quotes the raw DB read-back (kKupon 2150, cAktiv=Y, fWert=5, dGueltigBis) and the full mail text, and states explicitly that the mail carries the code from part one — though it asserts the link rather than showing the read-back that established it.
Highlight

It verified the code was free, dry-ran both writes, then read the stored coupon row back from tkupon before composing the mail — a genuine create-then-read-then-reuse chain rather than two independent writes from the prompt.

Weakness

The email copy is competent but generic — no shop name (the newCustomer trigger exposes {$global->shopName}), no terms beyond the expiry date — and the answer asserts the code match rather than showing the read-back that proves it.

What it actually looks like

Coupon list with WELCOME5
Coupon list with WELCOME5 · http://localhost:8080/admin/kupons.php
Registration workflow
Registration workflow · http://localhost:8080/admin/plugin.php?kPlugin=12

How it worked

ToolCallsErrorsAvg
run_sql_read41306 ms
invoke_admin_action30416 ms
list_admin_actions20425 ms
describe_admin_action20382 ms
describe_workflow_capabilities20295 ms
create_workflow20382 ms
get_guide10334 ms
list_workflows10286 ms
get_workflow10415 ms

The deliverable

# Willkommensprogramm – eingerichtet

## 1. Der Gutschein

| Feld | Wert |
|---|---|
| Code | **WELCOME5** |
| Rabatt | 5 % |
| Gültig für | alle Kunden, alle Kundengruppen, alle Produkte |
| Gültig bis | 31.12.2026, 23:59 Uhr |
| Status | aktiv |

Bestätigt direkt aus der Datenbank (kKupon 2150): `cCode=WELCOME5, cAktiv=Y, fWert=5, dGueltigBis=2026-12-31 23:59:00`.

## 2. Die Automatisierung

Neuer Workflow **"Willkommensprogramm: Neukunden erhalten den 5%-Gutschein WELCOME5 per E-Mail"** (ID 3956), aktiv.

- Auslöser: Neue Kundenregistrierung
- Aktion: E-Mail senden, an die E-Mail-Adresse und den Namen des neuen Kunden
- Enthält exakt den oben angelegten Code WELCOME5

Bestätigt: Workflow ist aktiv und feuert (`fires: true`).

## Die E-Mail an neue Kunden

**Betreff:** Willkommen bei uns – 5% Rabatt auf Ihre erste Bestellung

> Hallo {Vorname},
>
> schön, dass Sie sich bei uns registriert haben!
>
> Als Willkommensgeschenk erhalten Sie **5% Rabatt** auf Ihre nächste Bestellung. Nutzen Sie einfach folgenden Gutscheincode an der Kasse:
>
> **WELCOME5**
>
> Der Gutschein ist gültig bis 31.12.2026 und gilt für alle Produkte.
>
> Wir wünschen Ihnen viel Freude beim Einkaufen!
>
> Ihr Team

Jede neue Registrierung löst diese Mail automatisch aus, mit dem echten Gutscheincode aus Teil 1.

What this costs to run

Setting it up
this benchmark run
$0.66

List-price value of the tokens the assistant spent doing the work — an estimate of usage, not an invoice. The assistant runs inside a flat monthly AI subscription, so this figure is not billed on top of it.

Running what it built
ongoing, per shop
not measured

Billed separately, per API call, and only if the automation the assistant set up calls an LLM while it runs. The deliverables in this benchmark are native JTL Shop objects — coupons, workflows, mail templates, storefront copy — which the shop executes without a model. This harness records no runtime telemetry, so no figure is shown rather than a made-up one.


Run 20260810-205005_f-welcome-program_sonnet · shop reset to fixture before the run · restore with jtl restore 20260810-205005_f-welcome-program_sonnet

© 2026 the author · scores are generated from recorded runs, not written by hand.