Install any skill in seconds. Free to start, no credit card required.
Get Started Free →do e2e tests, run e2e, validate feature, prove it works, PR proof, frame proof, pnpm evals. Launches iPolloWork on Daytona or local Electron and runs the coded eval flows via CDP. Launch + run mechanics; the proof loop itself is the fraimz skill.
.claude/skills/devin-axis-run-evals/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -70% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -49% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -39% | 0% |
Launch a real iPolloWork app and run coded eval flows against it. This skill owns launch + run; the prove/repair/verdict loop and evidence standard live in the fraimz skill — load that too for anything that ends in a verdict.
daytona CLI installed and logged in (daytona login), right org selected(daytona organization use "<org-name>")
.devcontainer/ files present in the repobash .devcontainer/setup-daytona-secrets-volume.sh .newtoken (never print keys; sandboxes source every /daytona-secrets/*.env before Electron starts)
bashdaytona organization use "<org-name>" bash .devcontainer/test-on-daytona.sh <branch-or-commit> --artifacts-volume
The helper creates a fresh VNC-capable sandbox from the ipollowork-eval-vnc snapshot, mounts the secrets + pnpm-store volumes, starts XFCE/noVNC, Vite, and Electron with Daytona-safe flags, waits for CDP, then prints the CDP and noVNC URLs. --artifacts-volume mounts /daytona-artifacts served on port 8090 for published frame proof. Refresh the snapshot when dependencies change: bash .devcontainer/create-daytona-ipollowork-snapshot.sh.
Verify the endpoint before running flows:
bashcurl -fsS "<CDP_URL>/json/list" # must include an iPolloWork page target
If it fails, inspect /tmp/electron.log — the real success marker is Chromium's DevTools listening on ws://127.0.0.1:9825/....
If the app shows the Welcome page, use a coded onboarding flow or create /workspace/hello through the visible UI before running a workspace-dependent flow.
bashpnpm evals --list pnpm evals --flow <flow-id> --cdp-url <printed-electron-cdp-url> pnpm evals --all --stack den # brings up MySQL + den-api + seed for cloud flows
The runner produces machine-checkable assertions, validated screenshots, and writes fraimz.html + report.md / report.json under evals/results/<run-id>/. If no coded flow exists for the behavior, add one in evals/flows/<id>.flow.mjs (see the fraimz skill and evals/README.md for the ctx.* API); use manual browser tools only to debug or prototype — a coded flow is the PR evidence.
Frame proof is the default deliverable; record video only when motion matters (streaming, animations). Start with bash .devcontainer/test-on-daytona.sh <branch> --record-video --recording-name <name>, stop with daytona exec "$SANDBOX" -- 'bash .devcontainer/stop-daytona-recording.sh', download via the port-8090 artifacts URL. Details: daytona-recording-artifacts.
When Daytona is down or quota-limited:
bashpnpm install pnpm --filter @ipollowork/app typecheck IPOLLOWORK_ELECTRON_REMOTE_DEBUG_PORT=9826 pnpm dev # then: pnpm evals --flow <flow-id> --cdp-url http://127.0.0.1:9826
Report clearly whether the result came from Daytona or the local fallback — a local run is not a Daytona validation.
bashdaytona delete "$SANDBOX"
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→fail | 25,041 | 20,376 | -19% | 1 | 1 | 0% | 2,793 | 3,385 | +21% | 0 | 0 | — |
case-01 | fail→fail | 18,101 | 16,571 | -8% | 1 | 1 | 0% | 2,065 | 1,307 | -37% | 0 | 0 | — |
case-02 | fail→fail | 14,605 | 15,441 | +6% | 1 | 1 | 0% | 1,613 | 1,193 | -26% | 0 | 0 | — |
case-03 | fail→fail | 16,597 | 15,835 | -5% | 1 | 1 | 0% | 1,715 | 1,228 | -28% | 0 | 0 | — |
case-04 | fail→fail | 17,212 | 15,835 | -8% | 1 | 1 | 0% | 2,003 | 1,252 | -37% | 0 | 0 | — |
case-05 | fail→fail | 20,147 | 17,731 | -12% | 1 | 1 | 0% | 2,759 | 3,290 | +19% | 0 | 0 | — |
case-07 | pass→pass | 16,847 | 9,904 | -41% | 1 | 1 | 0% | 2,142 | 1,826 | -15% | 0 | 0 | — |
case-08 | fail→pass | 13,645 | 7,191 | -47% | 1 | 1 | 0% | 1,468 | 1,254 | -15% | 0 | 0 | — |
case-09 | fail→pass | 20,363 | 15,398 | -24% | 1 | 1 | 0% | 2,457 | 2,479 | +1% | 0 | 0 | — |
case-10 | fail→pass | 26,644 | 1,238 | -95% | 1 | 1 | 0% | 3,620 | 1,068 | -70% | 0 | 0 | — |
case-11 | fail→fail | 15,721 | 7,596 | -52% | 1 | 1 | 0% | 1,981 | 1,331 | -33% | 0 | 0 | — |
case-12 | fail→pass | 23,986 | 9,385 | -61% | 1 | 1 | 0% | 3,156 | 1,595 | -49% | 0 | 0 | — |
case-13 | fail→fail | 15,396 | 8,207 | -47% | 1 | 1 | 0% | 1,699 | 1,175 | -31% | 0 | 0 | — |
case-14 | pass→fail | 7,973 | 6,343 | -20% | 1 | 1 | 0% | 548 | 1,098 | +100% | 0 | 0 | — |
case-15 | fail→pass | 17,126 | 7,349 | -57% | 1 | 1 | 0% | 2,133 | 1,298 | -39% | 0 | 0 | — |
case-16 | pass→pass | 16,840 | 7,995 | -53% | 1 | 1 | 0% | 1,768 | 1,411 | -20% | 0 | 0 | — |
case-17 | fail→pass | 15,356 | 6,849 | -55% | 1 | 1 | 0% | 1,926 | 1,177 | -39% | 0 | 0 | — |
case-18 | fail→pass | 16,624 | 6,792 | -59% | 1 | 1 | 0% | 1,827 | 1,155 | -37% | 0 | 0 | — |
case-19 | fail→pass | 17,933 | 10,926 | -39% | 1 | 1 | 0% | 1,905 | 1,893 | -1% | 0 | 0 | — |
case-20 | fail→pass | 20,399 | 7,318 | -64% | 1 | 1 | 0% | 2,738 | 1,320 | -52% | 0 | 0 | — |
case-21 | pass→pass | 16,278 | 7,764 | -52% | 1 | 1 | 0% | 1,880 | 1,413 | -25% | 0 | 0 | — |
case-22 | fail→pass | 18,344 | 2,987 | -84% | 1 | 1 | 0% | 2,247 | 1,427 | -36% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.