Verboo Code gives free tokens, with no expiration date, to anyone starting out with the CLI. When they run out mid-session, version 0.15.20 changed what happens next: instead of failing with a generic error, the CLI opens an activation flow that only charges your card after you accept.
What happens when free tokens run out mid-session?
The inference call that hit the limit comes back from the server with a specific error code, free_tokens_exhausted. The CLI intercepts that error before showing you anything and opens the activation screen, without dropping anything from the conversation: history, open files and context all stay intact.
This lives in src/services/api/openaiShim.ts, at the point where the HTTP response comes back 402 or 503 with one of three error codes that trigger the flow: free_tokens_exhausted, free_tokens_activation_pending or free_tokens_accounting_pending.
How do I check how many free tokens are left before hitting the limit?
Run /usage. The screen polls the balance endpoint every 10 seconds and shows, literally:
{tokensRemaining} free tokens remaining
{tokensUsed} used out of {tokenLimit}. Input + output, no expiration date.
When tokens run out, the CLI will pause inference and show the activation
options with the amount that will be charged to the card on file.
If there are calls with usage not yet confirmed by the backend, one more line shows up warning how many requests are awaiting accounting and whether that has already paused free usage. More on that below.
What does the activation screen say, word for word?
With tokens at zero, the title is "Plan activation" and the message is direct: "Your free tokens ran out and inference was paused. To keep the conversation going, activate the plan with the card already on file. You will only be charged after you accept."
The CLI then fetches a real quote and shows the exact amount: "{groupName}: {amountCents} now on the card on file. Renews for {renewalAmountCents}/{month|year} until canceled." with two selectable options: Activate plan and pay $X or Not now.
What if Stripe asks for one more confirmation step?
This happens when the card on file needs extra verification. In that case activation comes back with a checkout_required state and a checkout link; the CLI opens the browser on its own and keeps the link visible in the terminal, with the options Open Stripe or Not now.
Once checkout is done, only the blocked inference call is retried. It is not the whole conversation being resent, it is literally that one rejected request. The comment in the source code itself is explicit about this: no prior response or tool call from the conversation is replayed by the activation flow.
I declined activation. What happens now?
The CLI stores the exact time of the decline and does not push again: any call already in flight before that timestamp simply stops, without reopening the screen. A new attempt to use the CLI after declining triggers the question again, because it is a different request.
Confirmation is also shared across concurrent calls: if two calls hit the limit at the same time, the CLI shows the screen once, and both wait on the same answer instead of opening two prompts.
I use Verboo Code in CI or with --print. Does that change anything?
It does, on purpose: in non-interactive mode the CLI never activates payment on its own. A session counts as non-interactive when the command runs with -p/--print, --init-only, --sdk-url, or when stdout is not a terminal and there is no SSH_TTY in the environment.
In those cases the error message changes: instead of "try again to see activation options", it becomes "Open the CLI in interactive mode to confirm activation". There is no flag or environment variable to skip that acceptance. The block is automatic based on the conditions above, not configurable.
My request is stuck "awaiting accounting". Is that a bug?
No. It is the backend confirming usage before releasing more free tokens. As long as the number of pending requests stays within the configured limit, usage keeps flowing. If it hits the ceiling, the message that shows up is: "The limit of requests awaiting accounting has been reached. New free inference is paused until usage is confirmed; paid activation remains available."
In other words: even when free usage is blocked for this reason, activating the paid plan still works, because it does not depend on that accounting step.
What actually changes after activation?
You leave the counted-token model behind. None of the four paid plans has a token cap after activation, only a rate limit tied to model weight.
| Plan | Monthly price | Tokens |
|---|---|---|
| Junior | R$ 99 | Unlimited* |
| Pro | R$ 249 | Unlimited* |
| Max | R$ 499 | Unlimited* |
| Ultra | R$ 1,299 | Unlimited* |
*No token cap on any plan, as Verboo Code's own site states. What varies between them is the rate limit per minute, because a heavier model needs more GPU, not the total volume you can use in a month.
Once free tokens run out, the question stops being "how much is left" and becomes "how much rate limit does my plan allow": no paid Verboo Code plan goes back to counting tokens after that. Activate straight from the CLI or start by signing up at verboo.ai.



