Canned chips

The onboarding pills Jev picks from the question Z just asked, with the labels owned by code

Overview

Canned chips are the ready-made answers for a known onboarding question (ZLY-2025). They sit in the same row as the generic quick answer chips, just above the text box, and only on the onboarding chats: /onboarding, /onboarding/talent, /onboarding/brand and /onboarding/agency.

There is no step list. Z can ask in whatever order the conversation takes. After the reply text is on screen, Jev reads that reply and picks one known question type, or none. Code owns the pills, the highlighted one, and the line under the row. The model that writes Z's reply does not invent them.

A tap sends that pill's label as an ordinary message. The text box stays next to the pills, so the person can still type.

What you see

When the question has a recommended answer, that pill is highlighted: a pale blue fill, a light blue border, and a star. It is never pre-selected. Under the row the line reads "Z recommends" and the highlighted name, then the reason. The other pills stay white.

A tap sends at once. There is no second step of marking pills and then tapping Done. The next reply keeps arriving after that tap. Scrolling while it is still being written does not stop it or leave an error in the chat.

The text box stays on screen the whole interview, with one exception: while a research card is open, the box is hidden. It comes back once the person presses Done. While Z is answering, and while the photo or sign-up card is waiting, the box is only greyed out. It is ready again as soon as the reply has finished, even if the pills have not appeared yet. The pills never grey it out and never show a spinner in it.

Pills show only when that reply has finished and the newest line is in view. When they arrive with the reader already at the end, the conversation scrolls so the message they answer sits fully above them.

Scrolling up hides the pills. A round down arrow appears just above the text box. Its name is "Scroll to the latest message". Tapping it, or scrolling back to the end by hand, hides the arrow and brings the same pills back. The arrow does not stay on once the page is already at the bottom, and the pills and the arrow do not swap back and forth there.

The arrow is not only for pills. It shows whenever the reader has left the newest line: after their own message, on a reply with no pills, and while Z is still writing.

The pills also stay hidden while the research card is waiting for an answer: the card is how the person answers that turn. After a reload, the pills come back if that reply is still the last message and the newest line is in view.

How a reply gets its pills

Onboarding asks Jev twice, in order, and both picks share one wait of 2 seconds.

  1. Jev reads Z's reply against the eight canned types below, plus "none". A real match has to be at least 40% sure. The bar is lower than the generic chips because nine options share one probability. If Jev fails and Gemini Flash Lite names a type, that name is accepted.
  2. If that pick is a type, those pills are what you see. The generic list is not asked.
  3. If the pick is "none", too weak, or empty, the generic picker runs on the time still left. That is the same picker every other chat uses. It is not a special case for one sentence. A move-on line such as "Do you have any question before I move on?" can come back as Proceed alone, because that is one of the generic sets.
  4. If the canned pick already used the whole wait, the generic pick does not start. If neither list fits, there are no pills, and the person types.

Other chats never see this list. They go straight to the generic sets, at the 70% bar.

The eight types

Jev chooses the row. The words in the row are fixed.

TypeWhen Z is askingPillsZ recommends
Deal typeswhich kinds of deals they wantSocial campaigns, Free products / gifting, Sponsorships, Brand ambassador, Appearances, Open to anythingOpen to anything, so you never miss a good offer, and you can always say no later.
Smallest offerthe smallest offer worth their timeFree products, Any amount, $100+, $1K+, $10K+, $100K+Any amount, so you see everything, and you can raise your floor anytime.
Dream brandswhich brands they want, or who Z should look forFind the best for meFind the best for me. I'll match you with brands that already fit.
Brand formatswhat the talent should do for the brandSocial posts, Ads with their face or voice, Appearances, Merch, Open to ideasOpen to ideas. I'll suggest the formats that work best for your brand.
Budgeta spending bandUnder $1K, $1K to $10K, $10K to $100K, $100K+, Not sure yetnone
Agency kindrepresent talent, or buy for brandsI represent talent, I buy for brandsnone
Roster sourcepull people from the site, or upload a filePull it from my site, Upload a filePull it from my site. Fastest if your site already lists them.
Confirmwhat it heard, and whether that is rightThat's right, Let me fix somethingnone

The agency interview does not ask for the roster. That pair is in the list for when Z does ask how to add people. Pulling the roster from the site still does not start a crawl.

When a count of people already found on the site is passed in, the roster line changes to "I already found N on your site." The onboarding chat does not pass that count yet, so the line stays the one in the table.

The format highlight is always "Open to ideas". It is not taken from what research already found.

There is no "Step K of N" above the chat.

Where talent, brand and agency meet this list

  • Talent: deal types, smallest offer, dream brands.
  • Brand: formats and budget.
  • Agency: the kind question, and only when research could not tell. The interview does not ask the roster question.
  • Open interview: "any question before I move on?" is not one of the eight. It can still get the generic Proceed pill. A confirm ("is that right?") can get That's right / Let me fix something.

Key files

AreaFile
The eight types, the reason lines, and the fallbackpackages/z-agent/srv/src/onboarding-chips.ts
The generic sets the fallback usespackages/z-agent/srv/src/quick-answers.ts
Onboarding uses the canned list firstpackages/z-agent/srv/src/rooms.ts (streamRoomChat)
Jev, then Gemini Flash Litepackages/util-srv/src/classifyChoice.ts
The pills, the star, and "Z recommends"packages/z-agent/client/src/components/quick-answer-chips.tsx

Testing

  • packages/z-agent/srv/src/onboarding-chips.test.ts — each pick, a weak score, a slow call, the roster count, the Gemini fallback, and the fall through to Proceed.
  • packages/z-agent/client/src/components/quick-answer-chips.test.tsx — the star, the "Z recommends" line, and a tap that sends at once.