﻿{"id":273,"date":"2026-06-14T16:50:20","date_gmt":"2026-06-14T16:50:20","guid":{"rendered":"https:\/\/tokita.online\/?p=273"},"modified":"2026-06-14T17:08:28","modified_gmt":"2026-06-14T17:08:28","slug":"how-to-spot-an-llm-wrapper","status":"publish","type":"post","link":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/","title":{"rendered":"&#8220;Not a Wrapper,&#8221; Said the Wrapper. How to Tell If Your AI Tool Is Just a Dropdown."},"content":{"rendered":"<p>An LLM wrapper can hide in plain sight. I sat across from an AI startup founder a few weeks ago. He was pitching his platform. &#8220;AI-native workspace.&#8221; &#8220;Agentic AI.&#8221; Over 40 built-in agents. He leaned in and asked if I really understood what his system could do.<\/p>\n<p>I went home and signed up.<\/p>\n<p>Then I opened DevTools.<\/p>\n<h2 id=\"what-i-found-in-the-network-tab\"><span class=\"h-num\">01<\/span>What I found in the network tab<\/h2>\n<p>The platform had an AI chat feature. I asked it a question. While it was answering, I watched the network requests in my browser.<\/p>\n<p>One request stood out. The platform&#8217;s own frontend was sending my query to its backend with two extra fields:<\/p>\n<pre><code>\"model\": \"google\/gemini-3.1-pro-preview\"\n\"provider\": \"openrouter\"<\/code><\/pre>\n<p>That&#8217;s <a href=\"https:\/\/openrouter.ai\/\" target=\"_blank\" rel=\"noopener\">OpenRouter&#8217;s<\/a> model identifier format. The platform was routing my prompt through OpenRouter to Google&#8217;s Gemini model. The same Gemini you can access directly through <a href=\"https:\/\/aistudio.google.com\/\" target=\"_blank\" rel=\"noopener\">Google AI Studio<\/a> for free, or through the API for <a href=\"https:\/\/openrouter.ai\/google\/gemini-3.1-pro-preview\" target=\"_blank\" rel=\"noopener\">a few dollars per million tokens<\/a>.<\/p>\n<p>The platform charges tens of dollars per user, per month.<\/p>\n<h2 id=\"the-denial\"><span class=\"h-num\">02<\/span>The denial<\/h2>\n<p>I asked the AI agent directly whether it was Gemini.<\/p>\n<p>It responded: &#8220;I am not Gemini or affiliated with any other external AI provider.&#8221;<\/p>\n<p>The system prompt instructs the model to deny its own identity. Meanwhile, the HTTP request payload contains the model name in plaintext. The network layer doesn&#8217;t lie, even when the system prompt does.<\/p>\n<h2 id=\"not-a-wrapper-on-the-same-page-as-switch-your-model\"><span class=\"h-num\">03<\/span>&#8220;Not a wrapper&#8221; on the same page as &#8220;switch your model&#8221;<\/h2>\n<p>Here&#8217;s where it gets interesting. This platform&#8217;s marketing page includes the phrase: &#8220;Intelligence baked into the Core. Not a wrapper.&#8221;<\/p>\n<p>Three sections below that, on the same page: &#8220;Multi-Model Support: Switch your agent&#8217;s brain between GPT-4o, Claude 3.5, or Gemini Pro.&#8221;<\/p>\n<p>Read that again. If your AI&#8217;s &#8220;brain&#8221; can be swapped between three different providers with a dropdown, that is the definition of a wrapper. Proprietary AI doesn&#8217;t have a &#8220;switch model&#8221; button. That&#8217;s like a restaurant claiming they cook everything from scratch while the menu says &#8220;choose your meal kit provider.&#8221;<\/p>\n<h2 id=\"what-the-agents-actually-are\"><span class=\"h-num\">04<\/span>What the &#8220;agents&#8221; actually are<\/h2>\n<p>The platform advertises &#8220;40+ built-in AI agents.&#8221; I opened one to see the configuration.<\/p>\n<p>The entire agent profile consisted of three fields: an icon, a name (&#8220;Product Manager&#8221;), and a 100-character description (&#8220;Leads product development from conception to launch, balancing user needs with business goals.&#8221;).<\/p>\n<p>No tools attached, no retrieval pipeline, no reasoning chain. The API response confirmed it: <code>tool_calls<\/code> was empty, <code>knowledge_base<\/code> was empty, <code>reasoning_steps<\/code> was empty, <code>references<\/code> was empty.<\/p>\n<p>These aren&#8217;t agents. They&#8217;re prompt templates with a role label. The model receives your question plus a one-liner about who it&#8217;s supposed to be, and autocompletes. Every &#8220;agent&#8221; runs on the same model through the same passthrough. The only difference is the 100-character system instruction.<\/p>\n<p>Compare that to what an actual agentic system requires: <a href=\"\/ai-agent-pre-action-gate-tutorial\/\">mechanical enforcement gates<\/a>, model pinning, persistent memory, session continuity, tool orchestration, and the ability to refuse dangerous actions before they happen. That&#8217;s infrastructure, not a dropdown.<\/p>\n<h2 id=\"how-to-tell-if-your-ai-tool-is-a-wrapper\"><span class=\"h-num\">05<\/span>How to tell if your AI tool is a wrapper<\/h2>\n<p>You don&#8217;t need to reverse-engineer anything. Five checks, five minutes.<\/p>\n<table>\n<thead>\n<tr>\n<th>Check<\/th>\n<th>What to look for<\/th>\n<th>Wrapper signal<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Model selector<\/strong><\/td>\n<td>Can you switch between GPT, Claude, Gemini, or others?<\/td>\n<td>If yes, the AI is a routing layer, not proprietary.<\/td>\n<\/tr>\n<tr>\n<td><strong>BYOK option<\/strong><\/td>\n<td>Is there a &#8220;Bring Your Own API Key&#8221; field in settings?<\/td>\n<td>If yes, the platform is forwarding your prompts to a third-party provider.<\/td>\n<\/tr>\n<tr>\n<td><strong>Developer docs<\/strong><\/td>\n<td>Does the platform have a public API? Check \/developers, \/api, \/docs.<\/td>\n<td>If all return 404, there&#8217;s no programmatic access because there&#8217;s nothing proprietary to expose.<\/td>\n<\/tr>\n<tr>\n<td><strong>Network tab<\/strong><\/td>\n<td>Open DevTools (F12), send a message, check the request payload.<\/td>\n<td>Look for model identifiers like <code>gpt-4o<\/code>, <code>claude-3.5-sonnet<\/code>, <code>gemini-pro<\/code>, or provider fields like <code>openrouter<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><strong>Ask the AI<\/strong><\/td>\n<td>Ask &#8220;What model are you?&#8221; then ask &#8220;Are you [specific model]?&#8221;<\/td>\n<td>If it deflects the first question and denies the second, a system prompt is hiding the identity.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>If three or more of these checks light up, you&#8217;re paying a subscription for a UI layer on top of an API you could call directly.<\/p>\n<h2 id=\"why-this-matters-beyond-price\"><span class=\"h-num\">06<\/span>Why this matters beyond price<\/h2>\n<p>The cost arbitrage is obvious. But there are two less visible problems.<\/p>\n<p><strong>Your data takes an extra hop.<\/strong> When you type into one of these platforms, your prompt travels through at least three parties: the wrapper, the routing service (like OpenRouter), and the model provider (like Google). Each party has its own <a href=\"https:\/\/openrouter.ai\/docs\/guides\/privacy\/data-collection\" target=\"_blank\" rel=\"noopener\">data retention policy<\/a>. OpenRouter doesn&#8217;t store prompts by default, but metadata is always logged, and third-party provider policies vary. Most users never audit past the wrapper&#8217;s own privacy page.<\/p>\n<p><strong>Token costs are uncontrolled.<\/strong> Without <a href=\"\/context-engineering-vs-prompt-engineering\/\">proper context engineering<\/a>, every prompt goes raw to whichever model the dropdown points at. No caching, no routing intelligence, no cost gates. The user picks the most expensive model because it&#8217;s at the top of the list, and the platform has no incentive to optimize because they&#8217;re not paying the inference bill. You are, through your subscription, subsidizing unoptimized API calls.<\/p>\n<h2 id=\"wrappers-arent-the-problem-dishonesty-is\"><span class=\"h-num\">07<\/span>Wrappers aren&#8217;t the problem. Dishonesty is.<\/h2>\n<p>I want to be clear: there&#8217;s nothing wrong with building on top of third-party models. I do it every day. My own research tooling routes queries through Gemini. My daily coding environment is a wrapper around Claude. I&#8217;ve adapted an open-source model (Gemma) for private, on-device mobile inference because the use case demanded it. Wrappers, when properly configured with cost controls, prompt engineering, and data governance, are a legitimate architecture.<\/p>\n<p>The problem is calling it &#8220;proprietary&#8221; when you&#8217;re not. The problem is marketing &#8220;AI-native intelligence baked into the core&#8221; when the core is someone else&#8217;s API behind a dropdown. The problem is instructing your model to deny its own identity when a customer asks.<\/p>\n<p>If you&#8217;re building a great UI on top of Gemini and charging for the convenience, say that. Plenty of successful products do exactly that, honestly. But when you tell a customer your AI is &#8220;robust&#8221; and &#8220;not a wrapper&#8221; while your frontend sends <code>\"provider\": \"openrouter\"<\/code> in every request payload, that&#8217;s not marketing. That&#8217;s misrepresentation.<\/p>\n<h2 id=\"the-pattern-is-accelerating\"><span class=\"h-num\">08<\/span>The pattern is accelerating<\/h2>\n<p>I wrote about <a href=\"\/llm-wrappers-what-actually-matters\/\">how to evaluate AI tools beyond the marketing<\/a> back in March. At the time, the wrapper problem was mostly startups padding their pitch decks. It&#8217;s worse now. These platforms have real revenue, real customers, and real marketing budgets. They&#8217;re profitable because the per-token cost of routing API calls is fractions of a cent while the per-seat subscription is dollars.<\/p>\n<p>This isn&#8217;t going away. If anything, it&#8217;s going to intensify as model APIs get cheaper and easier to integrate. The barrier to building a &#8220;40+ AI agent platform&#8221; is a weekend, an OpenRouter account, and a landing page.<\/p>\n<p>The fix isn&#8217;t regulation or outrage. It&#8217;s literacy. Open DevTools. Check the network tab. Read the request payload. The information is right there, in plaintext, every time you send a message.<\/p>\n<p>Your AI tool&#8217;s identity isn&#8217;t a secret. It&#8217;s just one F12 away.<\/p>\n<hr>\n<p><em>Tom Tokita is President of Aether Global Technology Inc., a Salesforce consulting firm in the Philippines. tokita.online is where he documents his personal AI R&amp;D: building production harness infrastructure, evaluating AI tools, and running on-device models for mobile.<\/em><\/p>\n<details>\n<summary>How can I check if an AI tool is using a third-party model?<\/summary>\n<p>Open your browser&#8217;s developer tools (F12), go to the Network tab, and send a message through the AI feature. Check the request payloads for model identifiers (like &#8220;gpt-4o&#8221;, &#8220;gemini-pro&#8221;, or &#8220;claude-3.5-sonnet&#8221;) or provider fields (like &#8220;openrouter&#8221;). If the requests reference external model names, the tool is routing your prompts to a third-party API.<\/p>\n<\/details>\n<details>\n<summary>What does &#8220;AI-native&#8221; actually mean versus an LLM wrapper?<\/summary>\n<p>An AI-native platform builds its intelligence into the product&#8217;s core architecture with proprietary models, custom training, or purpose-built inference pipelines. An LLM wrapper routes your prompts to third-party models (like GPT, Claude, or Gemini) through APIs and adds a user interface on top. The simplest test: if the platform lets you switch between multiple models from different providers, it&#8217;s a wrapper.<\/p>\n<\/details>\n<details>\n<summary>Is it safe to use AI platforms that route through OpenRouter?<\/summary>\n<p>OpenRouter does not store prompts or responses by default and offers Zero Data Retention settings. However, metadata (token counts, latency) is always logged, and the downstream model provider may have its own retention policies. When you use a wrapper platform, your data passes through at least three parties (the wrapper, the router, and the model provider), each with separate policies. Review all three before sharing sensitive information.<\/p>\n<\/details>\n<details>\n<summary>Why would an AI tool hide which model it uses?<\/summary>\n<p>Wrapper platforms instruct the underlying model (via system prompts) to deny its identity because revealing the model breaks the value proposition. If users know the &#8220;AI-native&#8221; feature is just Gemini or GPT through an API, the subscription becomes harder to justify since users could access the same model directly at a fraction of the cost or, in some cases, for free.<\/p>\n<\/details>\n","protected":false},"excerpt":{"rendered":"<p>An LLM wrapper can hide in plain sight. I sat across from an AI startup founder a few weeks ago. He was pitching his platform. &#8220;AI-native workspace.&#8221; &#8220;Agentic AI.&#8221; Over 40 built-in agents. He leaned in and asked if I really understood what his system could do. I went home and signed up. Then I [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-273","post","type-post","status-publish","format-standard","hentry","category-ai-strategy"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Spot an LLM Wrapper Before You Buy | tokita.online<\/title>\n<meta name=\"description\" content=\"A founder said his AI was robust, not a wrapper. I opened DevTools. Every request routed through OpenRouter to Gemini. Spot a wrapper in 5 minutes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Spot an LLM Wrapper Before You Buy | tokita.online\" \/>\n<meta property=\"og:description\" content=\"A founder said his AI was robust, not a wrapper. I opened DevTools. Every request routed through OpenRouter to Gemini. Spot a wrapper in 5 minutes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/\" \/>\n<meta property=\"og:site_name\" content=\"Tom Tokita\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-14T16:50:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-14T17:08:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tokita.online\/wp-content\/uploads\/2026\/03\/tokita-logo-clear-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"474\" \/>\n\t<meta property=\"og:image:height\" content=\"151\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Spot an LLM Wrapper Before You Buy | tokita.online","description":"A founder said his AI was robust, not a wrapper. I opened DevTools. Every request routed through OpenRouter to Gemini. Spot a wrapper in 5 minutes.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/","og_locale":"en_US","og_type":"article","og_title":"How to Spot an LLM Wrapper Before You Buy | tokita.online","og_description":"A founder said his AI was robust, not a wrapper. I opened DevTools. Every request routed through OpenRouter to Gemini. Spot a wrapper in 5 minutes.","og_url":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/","og_site_name":"Tom Tokita","article_published_time":"2026-06-14T16:50:20+00:00","article_modified_time":"2026-06-14T17:08:28+00:00","og_image":[{"width":474,"height":151,"url":"https:\/\/tokita.online\/wp-content\/uploads\/2026\/03\/tokita-logo-clear-cropped.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/#article","isPartOf":{"@id":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/"},"author":{"name":"","@id":""},"headline":"&#8220;Not a Wrapper,&#8221; Said the Wrapper. How to Tell If Your AI Tool Is Just a Dropdown.","datePublished":"2026-06-14T16:50:20+00:00","dateModified":"2026-06-14T17:08:28+00:00","mainEntityOfPage":{"@id":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/"},"wordCount":1505,"publisher":{"@id":"https:\/\/tokita.online\/#organization"},"articleSection":["ai-strategy"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/","url":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/","name":"How to Spot an LLM Wrapper Before You Buy | tokita.online","isPartOf":{"@id":"https:\/\/tokita.online\/#website"},"datePublished":"2026-06-14T16:50:20+00:00","dateModified":"2026-06-14T17:08:28+00:00","description":"A founder said his AI was robust, not a wrapper. I opened DevTools. Every request routed through OpenRouter to Gemini. Spot a wrapper in 5 minutes.","breadcrumb":{"@id":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tokita.online\/how-to-spot-an-llm-wrapper\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tokita.online\/"},{"@type":"ListItem","position":2,"name":"&#8220;Not a Wrapper,&#8221; Said the Wrapper. How to Tell If Your AI Tool Is Just a Dropdown."}]},{"@type":"WebSite","@id":"https:\/\/tokita.online\/#website","url":"https:\/\/tokita.online\/","name":"Tom Tokita","description":"","publisher":{"@id":"https:\/\/tokita.online\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tokita.online\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/tokita.online\/#organization","name":"Tom Tokita","url":"https:\/\/tokita.online\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tokita.online\/#\/schema\/logo\/image\/","url":"https:\/\/tokita.online\/wp-content\/uploads\/2026\/03\/tokita-logo-clear-cropped.png","contentUrl":"https:\/\/tokita.online\/wp-content\/uploads\/2026\/03\/tokita-logo-clear-cropped.png","width":474,"height":151,"caption":"Tom Tokita"},"image":{"@id":"https:\/\/tokita.online\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/tokita.online\/?rest_route=\/wp\/v2\/posts\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tokita.online\/?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tokita.online\/?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/tokita.online\/?rest_route=%2Fwp%2Fv2%2Fcomments&post=273"}],"version-history":[{"count":3,"href":"https:\/\/tokita.online\/?rest_route=\/wp\/v2\/posts\/273\/revisions"}],"predecessor-version":[{"id":276,"href":"https:\/\/tokita.online\/?rest_route=\/wp\/v2\/posts\/273\/revisions\/276"}],"wp:attachment":[{"href":"https:\/\/tokita.online\/?rest_route=%2Fwp%2Fv2%2Fmedia&parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tokita.online\/?rest_route=%2Fwp%2Fv2%2Fcategories&post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tokita.online\/?rest_route=%2Fwp%2Fv2%2Ftags&post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}