pinecallDocs
Testing / pinecall simulate

pinecall simulate

A persona calls the agent, written or out loud.

pinecall simulate --persona <name> [--judge] [--turns n (15)] [--voice] [--listen]
                  [--background-noise dB] [--packet-loss 0.05] [--agent <name>] [--file agent.tsx]
                  [--inspect[=host:port] | --inspect-brk]

A model in the gateway plays the caller — every turn improvised from the persona's goal, its style and its own facts, with no script. A process this terminal starts serves the agent (a written call names it; a spoken one arrives from a worker naming nobody, so for --voice that process takes unclaimed calls), this terminal prints the conversation, the gateway holds the provider keys.

Terminal
$ pinecall simulate --persona hurried --listen --turns 2
--listen is a call with audio in it: --voice is on
hurried · move the appointment to Tuesday afternoon, giving no more than needed
  listening as sup_edb03d90e627 · ffplay
› Clínica Norte, good morning.  How can I help you?   tts_node_ttfb 127ms
‹ Hi, I need to move my Thursday appointment with Dr. Vidal to Tuesday afternoon.
→ freeSlots({"day":"Tuesday"})
← freeSlots [{"when":"Tuesday at ten","doctor":"Dr. Vidal"},{…
› Here are Tuesday's free slots. …   llm_node_ttft 1681ms  tts_node_ttfb 127ms
  call_6123e7d7deb875e2e9be7686 · 2 caller turn(s) · 3 agent turn(s) · a clean line

--persona names one of the agent's callers, kept by the gateway — not a file of the project. The model that plays it is the persona's own llm when it set one; with --judge, a caller that wrote a rule adds a persona row to the score — held when it hung up satisfied, broken when it declined, which is exit 1 like any broken judge.

--voice is a real line: a room, the agent dispatched into it, and the caller read out in the persona's own tts and voice when it set them — else the platform's default voice vendor and a voice from the operator's list for the agent's language that the agent does not have (English's when that language has none), so the two sides are told apart by ear. The caller waits for the opening to be said before its first line, as a person does. --background-noise and --packet-loss spoil that line on purpose and are refused without it; --packet-loss is the share of the caller's packets that never arrive, from 0 to 1, as test takes it.

--listen puts the call on this machine's speakers while it happens: the same hidden observe seat the console's listen button takes, joined from Node, both tracks mixed onto whichever of ffplay, play, aplay or pw-play you have. It turns --voice on and says so, because a written call has no audio in it. --judge reads back the call.score the log seals on.