Test agent

How Test agent rehearses a real inbound against your own agent, including Let me invent one

Test agent is the rehearsal bench on the dashboard. You watch your real agent negotiate an inbound, while a model plays the other side from a brief. The only fiction is who is approaching you. The pipeline is the same as a live deal: persist, plan, recall, reply.

Open it at /dashboard/agent/z-simulate (Agents panel → Test agent).

What you see

Same shape as a live deal: two private conversations, and a planner between them. You never talk to the inbound. They never talk to you.

UI labelSideWho is talking
Z & themExternalThe simulated inbound (brand, startup, licensee, …) talking to your agent
Z & YouInternalYour agent talking to you, when it needs a decision

The run pauses when the agent takes the package to you (Waiting for you… / Simulation paused - Tap to continue). Answer on Z & You, or tap continue to let the bots keep going.

Each click of let me invent one or sending a typed scenario starts a new demo room. Past runs sit under Advanced options → Past simulations.

Response mode (Advanced options):

  • Fully automatic — the agent answers on your behalf until it needs you.
  • Agent responds automatically — same agent replies, you can still steer.
  • Simulate talent and brand — a model answers on Z & You as you, and still plays the inbound on Z & them, until the run settles.
  • I will respond for agent to teach — you write the agent's external line.

Print / Save as PDF (printer icon on the run bar) opens both conversations in a print view. Use the browser dialog to save the whole chat as a PDF.

Starting a run

Two ways. Exactly one of them is sent to the server. Either way, the offer is completed before the inbound starts talking, so every name, date, and term is settled up front.

Type a scenario

Write who is approaching and what they want. Anything you leave out is filled in: the brand's name and category, the dates, the fee, usage, exclusivity, payment terms, and the decision deadline. The filled-in offer is written around your talent's name and what they are into, using the account's memory. The details you typed stay exactly as you wrote them.

Let me invent one

Let me invent one is not a list of canned briefs (no more StrideLab / sportswear). Flash Lite reads what this account's agent already knows and writes one complete inbound: a fake counterparty that fits that world, with every detail filled in and addressed to the talent by name. That inbound talks on Z & them. Your real agent still has the private memory, including any floor the inbound must not "remember".

Read it top to bottom: you click, Flash Lite looks up the account and writes the complete inbound, then the two chats start. The inbound matches memory like this:

Durable memory looks likeInbound
Living person / talent / creatorA brand or company asking to work with them
Fiction, IP, or a character who cannot appear in person (for example Mickey Mouse)Licensing, cameo, voice, or digital use — no physical shoot, travel day, or in-person appearance
Family office, home office, or investor whose inbound is startups seeking moneyA company asking for capital or a commercial partnership — not Reels, Instagram, or a photoshoot

Hard rules for the inbound:

  • Write from the counterparty's point of view (who they are, what they want, the budget they are offering).
  • Never copy the agent's private floor, no-go list, or phrasing like “against my $250K floor”. Those stay in host memory for the real agent.
  • Every date is a concrete calendar date after today. The brief's dates, fee, and deadline are fixed before the run starts.
  • Empty memory still writes a generic inbound. It does not fall back to sportswear / StrideLab.

What stays private

The inbound never sees your private floor. It may name a fee only if that number is in the finished brief or already written in this chat.

  1. POST /api/z-agent/my/simulate/rooms with either { scenario } or { invent: true } (not both).
  2. The offer is completed once, then createDemoRoom opens a kind: demo room that stores the finished brief. The host seat is bound to your account (durable memory seeds as in a real deal). The visitor seat is unbound — there is no brand account, only the brief.
  3. The simulated inbound speaks from that brief, then every line goes through the real chat pipeline so you watch your agent, not a script.
  4. Settling the rehearsal must not mint a real draft offer. Demo rooms keep the negotiation goal but strip its action, and they stay out of the live inbox / email path.

What the simulated inbound may say

The inbound plays the finished brief exactly. It never changes a name, date, or term, and it never invents a new one to fill a gap mid-run.

The opening message is short. It introduces the brand, its category, and what it wants: the deliverables or the ask, and the timing. The fee, usage, exclusivity, payment terms, and the decision deadline come out when the agent asks for them. Once the brief has been said, nothing is repeated or re-invented.

  • Prices — a fee, floor, or counter may appear only if it is in the brief or already written in this transcript. It must not treat your rate card as known unless the agent stated it in this chat, invent a “best and final” number that was never offered, or claim the agent earlier named a figure they did not write here.

That last rule is why a family-office rehearsal can open with a $350K ask from the startup, and must not later “remember” a private $250K floor the agent never said out loud.

When the agent needs you, it takes the active package to the talent (you) and returns. The inbound is told to keep the offer alive until you accept or reject.

Why a family office saw a startup, not Reels

The completed inbound is built from durable account memory, not a hardcoded talent collab list. If memory says family office / home-office investing, the inbound is a company seeking capital. If memory still describes an Instagram creator, the completed inbound will still be a brand collab — the brief follows what is on file, not the Profile display name.

Compared with other test surfaces

SurfaceWhat it testsRoom
Test agentYour live agent vs a model inbound, from memory or a typed briefFresh demo room per run
Agent PreviewOne brand-facing persona with a fixed snapshot, no plannerNone (stateless)
Zreplay / ZauthorScripted tapes against the real pipelinePlayground / scripted room

Source

PieceWhere
Dashboard UIpackages/offers/client/src/app/components/agent/ZSimulatePage.tsx
Complete the brief (typed or invented)packages/z-agent/srv/src/demo-simulation-invent.ts
Brand and talent rulespackages/z-agent/srv/src/demo-simulation-brand-prompt.ts, demo-simulation-talent-prompt.ts
Run orchestrationpackages/z-agent/srv/src/demo-simulation.ts
Demo roomcreateDemoRoom in packages/z-agent/srv/src/rooms.ts (kind: demo)
HTTPapps/zooly-app/app/api/z-agent/my/simulate/rooms/
Print / Save as PDF/z-agent/simulate/print?room= — both panes, browser print dialog

Durable memory itself is documented in Memory. How host vs visitor seeding works is in Identity and Representation.