v2.3.3: Your Codex Tokens Were Invisible, Your Kanban Goes Full Trello, and White-Label Mode Ships
v2.3.3 is one of those patch releases that looks small on the version number and turns out to be a full day of work in the notes. The headline: Codex employees were silently reporting zero token usage, and now they count properly. Around that fix, a round of SaaS and multi-provider improvements (including a white-label mode for resellers), faster and more reliable session startup, a Trello-style upgrade to the Kanban board, and a batch of chat-sidebar fixes that remove some long-standing friction.
Codex tokens were recording zero. Now they count.
If you run Codex-backed employees, the Admin Usage Overview has been quietly lying to you: a daily row existed for each employee, but every field stayed at zero. Claude, Custom LLM, and Grok employees were unaffected.
The investigation turned up three stacked problems. The stop signal that triggers usage tracking was dropping the session id on its way through the relay. With no session id, the token API inside the container answered "session not found" and contributed a clean plus zero. And even if both had worked, that in-container API only understands the Claude transcript format, not the rollout format Codex writes to disk. Three layers, each one masking the next.
The fix sidesteps the whole chain. Codex already writes its usage data to rollout files that the backend can read directly from the host, so the backend now parses those files itself: it picks up every token-count entry since the last recorded timestamp and maps it into the same shape the usage table already consumes. One subtle detail: Codex reports input tokens with cached tokens already included, so the parser separates them out to keep the cache-read column honest.
Validation was satisfying. The first call recorded real numbers (16,623 in, 406 out, 77,952 cache reads). An immediate second call added exactly zero, proving the incremental boundary works. Counting is repaired going forward for existing Codex employees; historical zero rows stay as they are unless a backfill is requested.
SaaS image generation now actually looks at your reference photo
On SaaS instances, asking an employee to generate an image from a reference photo produced results with no resemblance to the input. The reference was being silently dropped: the gateway posted to an image endpoint using a format that never forwarded the attached photos to the model.
Image requests on SaaS now go through the multimodal chat format, where reference images are part of the message itself, so the model genuinely receives what you sent. The response parser was also hardened to accept base64 payloads instead of throwing. BYOK instances, which talk directly to FAL, were never affected and are unchanged.
White-label mode for resellers
If you run a white-labeled SaaS instance, you probably handle your own billing, and the last thing you want is the platform's subscription screens showing through. Until now, white-label only covered logo, brand, colors, and CSS. v2.3.3 adds an explicit white-label mode toggle in Admin. When enabled, the Subscription tab disappears from the sidebar and the dashboard billing links and upgrade prompts are hidden, while credits and plan information stay visible.
OpenCode-backed employees on SaaS also got a discretion upgrade: they are instructed not to disclose the underlying LLM beyond the model id they were given, which keeps the white-label story consistent down to the conversation level.
New SaaS employees start on the right provider
New employees created on SaaS instances were defaulting to Claude instead of the metered GAT provider, which meant they started life misconfigured. Creation now applies the correct default ("GAT AI Medium") across all three creation paths: standard, advanced, and import. Existing employees are untouched, and BYOK instances see no change.
While we were in there, the in-chat model picker for SaaS got cleaned up: the three GAT tiers now show as Standard, Medium, and Max with icons and short descriptions, ordered from most to least capable, matching the Intelligence Level list in the provider settings.
The auto-greeting is gone, and sessions start faster
Two long-running session annoyances were addressed in one pass.
First, the automatic session-start greeting and onboarding were removed for all providers, SaaS and BYOK alike. Your employees have persistent memory; they do not need to reintroduce themselves every time a session opens. The manual triggers are still there if you want them.
Second, two startup hangs were fixed. The chat could stick on "Connecting" indefinitely because the frontend sent its session request exactly once and never retried; if the container was reachable before the app inside was ready, the request vanished and only a page refresh recovered. It now retries until the session list arrives. And OpenCode and Custom LLM sessions used to sit on "waking up" for around 40 seconds because the input only unlocked after the first message created a session file; the input now unlocks about 5 seconds after connect, and the waking-up indicator disappears the moment you can type.
Kanban: Trello-style cards, comment editing, agent attachments
The card modal on the Kanban board was reworked into a proper Trello-style layout: a wide main column with the description on top and comments below, a narrow sidebar for column, deadline, and attachments, full-screen on mobile, and a single scroll instead of nested scrolling areas. Line breaks in agent-written card bodies are preserved, and card previews show a clean text snippet instead of raw HTML.
Comments can now be edited, not just posted and deleted. And employees gained two new abilities on their own board: editing their own comments, and attaching files from their workspace to a card. The attachment path is strictly confined to the employee's own folder, with traversal and symlink escapes rejected and a 10 MB cap, and it was smoke-tested against the usual escape tricks.
The sidebar stops fighting you
Three fixes that together make the chat sidebar behave the way you always expected. Opening the Kanban board no longer freezes the rest of the interface (a modal flag was attached to the wrong component, leaving an invisible overlay that blocked every click). Every sidebar item now highlights when its panel is open, not just a lucky few. And opening one panel automatically closes the others, so panels no longer stack on top of each other with no visual hint about what is open.
Picking it up
Hard refresh (Ctrl+Shift+R) to load the new frontend bundle; the sidebar should read 2.3.3. Some of the session-lifecycle changes apply to employee containers, so existing employees pick them up on their next respawn.
Want to test the most advanced AI employees? Try it here: https://Geta.Team