vritax
Research log 001·2026-09-10

One description change, and a published ChatGPT app lost the first call in 9 of 10 chats

Two flight-search tools live in the same ChatGPT conversation, one fixed request, 40 fresh chats. Changing nothing but the test connector's tool description moved the host's first call from 0 of 10 to 9 of 10, back to 0 when I put the old text back, and to 9 again with a description a real publisher could ship.

TL;DR
  • Description is a first-order lever for in-conversation selection. The A/B/A reversal was clean: 0–10, 9–1, 0–10.
  • Published, curated status, a carousel widget and app metadata did not save the incumbent on this request.
  • The prompt-mirroring description wins but can't ship. A realistic one, no place names, no weekday names, won at the same rate.
  • Picked is not used. In the realistic phase Vritax got the first call in 9 of 10 chats; its fare made the final answer in 4.
  • The Responses API gave the same direction in all four phases. A cheap API run worked as a compass for the real host.

What I ran

Two flight-search tools were live in the same ChatGPT conversation. One was Flight Network, the published app from Etraveli Group that sits in OpenAI’s curated directory. The other was Vritax Flight Test, a developer-mode connector I built for this, with Flight Network’s own search_flights signature copied over: same title, same input schema, same annotations, neutral server instructions. The only thing I ever changed on my side was the tool description.

The request was the same every time, typed in Turkish, no app named:

Prompt used$ onumuzdeki hafta istanbuldan erzuruma gidecegim. istanbuldaki herhangi bir havalimanini kullanabilirim. pzt veya sali gidebilirim. en ucuz ucak biletini bul

Roughly: I’m going from Istanbul to Erzurum next week, any Istanbul airport is fine, Monday or Tuesday, find me the cheapest ticket. Ten fresh chats per phase, memory off, custom instructions blank, and the score is simply which tool the host called first.

Four phases

Phase Vritax description Vritax called first
A1 exact copy of Flight Network’s own description 0/10
B overfit: names the route and the days 9/10
A2 exact copy again 0/10
R realistic: no place names, no weekday names, nothing quoted from the prompt 9/10

In A1 and A2 the two tools were, at the text level, identical. The host called Flight Network first in all twenty chats and then, every single time, called mine as well, splitting the two dates between them: Flight Network got Monday, Vritax got Tuesday. Same description, and the published app gets the first call. That is the baseline everything else is measured against.

B is the maximum dose. The description says, more or less, use this for the cheapest one-way from Istanbul to Erzurum next Monday or Tuesday. It won 9 to 1. A2 is the control: put the copied text back and it drops straight to 0 of 10. The winner followed the description, not the server, which is the thing I needed to see before believing any of it.

R is the phase that matters for anyone who has to ship. I wrote that description under three rules: no place names, no weekday names, no echo of the prompt’s wording. Only things that are generally true of the tool and happen to be what this class of request needs: every result carries a total price sorted lowest first, origin and destination accept metro codes that cover all of a city’s airports, and for flexible dates you call once per date and compare. It also won 9 to 1, and in all ten chats the host queried both dates through it, which the copied description never managed once. In B and R the host called both tools in 4 and 5 chats out of 10; I count the first call.

Same thing through the API

I ran all four phases again against the Responses API with the same two tool definitions, Flight Network always first in the tools array, 40 requests, all 200, all resolved to gpt-5.6-sol. Result: 0–10, 10–0, 0–10, 10–0. Same direction as the host in every phase, just more decisive. The API doesn’t execute the calls, so it can’t see published-app priors, the rendered carousel, web fallback, or which fare ends up in the answer. In this setup it was still a good enough compass, which matters because an API run costs cents and a browser run costs an evening.

One API trial (A2-02) read “next week” as the week after and added a direct-flights filter nobody asked for. Noted, not corrected.

Why the overfit description can’t ship

It mirrors the prompt. Route, days, the lot. It is keyword stuffing with extra steps, and I’d expect hosts to start penalizing it the way search engines did. It’s in the study as the upper bound, so I know what the ceiling looks like. The real question was whether a description you could actually put in front of a review team gets anywhere near that ceiling. It got all the way there.

Picked is not used

In R, Vritax got the first call in 9 of 10 chats. Its fare made it into the final answer in 4. In the rest the host went with Flight Network’s rendered carousel or a web search, and in a couple of chats it explicitly named the 1,525 TRY fare my tool returned (a dummy fare, the connector doesn’t sell tickets) and then set it aside as unverified in favor of a 3,599 TRY fare from the airline’s site. Two R chats never produced a scorable final answer, one stuck generating, one hit a rate-limit overlay; first-call scoring was unaffected. Utilization is a second surface with its own levers, and it’s out of scope here.

What this does and doesn’t say

One intent, one route, one competitor, and the test connector is mine. The name “Vritax Flight Test” may itself be a negative signal; I couldn’t change it mid-series without invalidating the earlier phases. A finding this narrow says: on this request, in this host, on this day, the description moved the first call from 0 to 9 out of 10 and back. It does not say yours will. Directional, not a prediction.

If you ship a tool

Write the description against the class of request, not against a prompt. Say what the tool is genuinely good at in the terms that class uses, and tell the model how to handle the flexible parts (several dates, any airport in a city) so it doesn’t have to guess. Then measure the first call and the final answer separately, because you can win one and lose the other in the same chat.

Methodology
Host
ChatGPT web, Plus account, default model at High reasoning
Design
A/B/A/R, 10 fresh chats per phase, 40 in total
Metric
The tool the host called first
Competitor
Flight Network (Etraveli Group), published and OpenAI-curated
Controls
Memory off, custom instructions blank, same model throughout
Replication
OpenAI Responses API, resolved to gpt-5.6-sol, 40 requests, all HTTP 200
Run date
2026-08-30, Europe/Istanbul
Limits
One intent, one route, one competitor. The test connector is ours. API trial A2-02 misread "next week".

Results are directional simulations, never predictions.

Get the next report.

One email when there is something measured to report.