CodePlate home

Agent evals · AI Chat Starter

AI Chat Starter: the eval log

We gave AI Chat Starter to a coding agent in a new session with no CodePlate context, along with a made-up user's brief ("Pawpal"), then sent the requests below one at a time.

5 of 5 requests passed

Run
2026-10-14
Agent
Claude Sonnet 5.5
The user
The script, relayed turn by turn
Version tested
v1.0.0
On sale now
v1.0.6

This run tested v1.0.0. The version on sale is v1.0.6, which includes the fixes listed at the end of the record and has not had its own eval run.

The made-up user

Written the way a buyer would put it. {ASSETS}, {ART} and {GODOT} stand for the folder with their files and the engine's path; their asset pack isn't published.

The user runs a small vet clinic and builds with an agent. They know what a chat assistant is but don't read code. They have no AI API key yet (the eval runs in demo mode, with the fake model; nothing is spent).

First message

Hi! I want to turn this template into "Pawpal", a pet-care assistant for our vet clinic (Green Hill Vet Clinic). It should answer pet owners from our care sheets, which are in {ASSETS}/care-sheets. Can you take a look and get us started?

Interview answers

The requests

  1. Make it Pawpal: our name, a paw-print logo, warm orange and cream, our words on the landing page, and one assistant called "Pawpal" that only answers from our care sheets.
  2. Write Pawpal's instructions: friendly and short, never diagnose, and for urgent signs tell people to call the clinic at 555-0142. Add a few checks we can run later with a real key to make sure it behaves.
  3. Our vaccination schedule is an HTML page ({ASSETS}/vaccines.html). Let us upload HTML files too, and make sure answers about vaccines cite it.
  4. Plans: Free gets 20,000 tokens a month, Plus is $15 a month with 1,000,000 tokens. No Team plan.
  5. Add a tool so Pawpal can tell owners the clinic's opening hours and whether we're open right now (Mon–Sat 8:00–19:00, closed Sundays, clinic time zone America/Chicago).

The run record

As we wrote it on 2026-10-14, with local paths and internal references taken out. "I" is the person running the eval.

#RequestTurnsResultNotes
0Interview1passSeven questions with defaults. Spotted that the template only has per-user uploads, while the clinic needs a shared knowledge base, and asked before changing it.
1Rebrand + one assistant1passName, paw mark, orange/cream in both themes, one "Pawpal" assistant. Built a knowledge/ folder indexed at startup for everyone and removed owner uploads. Had to lower minScore to 0.12 because the fake embedder only counts shared words. Looked at screenshots.
2Instructions + live checks1passPrompt rules (short, cite, never diagnose, urgent → 555-0142, honest about gaps) and 15 live eval cases. Template bugs: eval:live hit the app's rate limit after about 10 cases, and the agent patched the runner; eval:live --fake scores behaviour the fake model can't produce, so 6 cases fail by design. Skipped build and e2e this turn.
3HTML vaccines page1passHTML extractor (headings and lists kept, scripts and styles dropped). Vaccine answers cite the page, with unit, integration and browser tests and 3 live cases. The fake ranking confuses near-duplicate passages (puppies vs kittens).
4Plans1passFree and Plus are consistent everywhere, with a test pinning them. Template: the billing grid is hard-coded to 3 columns; recipes quote concrete allowances that go stale; sign-up ignores ?plan= from the pricing page.
5Opening-hours tool1passHours in config/clinic.ts, computed in America/Chicago (DST, boundaries and weekend tested), and the prompt uses the tool. Reviewed desktop and phone in light and dark across every page. Trimmed the starter questions to four.

Where the template fell short (fixed before merge)

  1. No shared knowledge base. "Answer from our documents" is the main use case. Documents now have a scope set in config:
    • user: per-user uploads.
    • shared: an admin-managed library plus a knowledge/ folder indexed at startup.
    • both.

The sample uses both.

  1. The fake embedder was too weak for demo content without tuning. It's now a better offline scorer, and minScore tuning is documented in the RAG recipe.
  2. eval:live hit the rate limit. Eval runs no longer count against the app's rate limit. --fake now validates the case file and plumbing and marks behaviour assertions as skipped rather than failed.
  3. The brief now says to run the full npm run check after every change.
  4. HTML is a built-in document type.
  5. Billing layout follows the plan count. Recipes refer to config/plans.ts instead of quoting numbers. The plan chosen on the pricing page carries through sign-up to checkout.
  6. Markdown lists in the document view render as lists.
What each request was scored against

Every request: npm run check ends with CODEPLATE CHECKS: PASS, no test weakened silently, new logic has tests, docs/project.md updated, screenshots (light and dark) looked at. No real provider was called and no key was requested in chat.

  1. Rebrand + one assistant
    • site.ts, logo mark (token classes), favicon and share image colors, orange/cream tokens in light and dark (tokens.test.ts passes without lowering the bar), landing copy rewritten truthfully (placeholder quotes still labelled or removed).
    • assistants.ts has one pawpal assistant with searchDocuments; defaultAssistantId updated; seed, e2e tests and suggestions updated accordingly (no test still picks "Docs expert"/"General" unless kept on purpose).
  2. Prompt + live evals
    • prompts/pawpal.md (or the renamed docs prompt) with role, sources/citation rules ([n]), the no-diagnosis rule and the emergency line; no prompt text inlined in code.
    • evals/*.yaml cases for: a cited care-sheet fact, an uncovered question ("couldn't find"), an urgent question (must contain 555-0142); npm run eval:live -- --fake parses them. The agent explains the evals need a key and cost a little.
  3. HTML uploads
    • An HTML entry in FILE_TYPES that strips scripts/styles/tags and keeps headings; upload hint and accept follow; tests for extraction and for a document from HTML being searchable; the existing "unsupported file" tests updated to the new hint.
    • Uploading vaccines.html in the app and asking about vaccines yields a citation to it (fake model).
  4. Plans
    • plans.ts: free (20,000) and plus ($15, 1,000,000); team removed from PlanId, pricing, billing, .env.example; feature text matches limits (config.test.ts); limit tests and seed numbers updated; the billing simulator still works.
  5. Opening-hours tool
    • A tool in the registry with a zod schema; time-zone-correct logic in a pure function with tests (Sunday closed, boundaries at 8:00/19:00, DST-safe via Intl); wired to the assistant; the fake model handles it (a pipeline test passes); a tool-step line in the UI.

← AI Chat Starter · Every eval log