OpenCode says an unauthorised party accessed an old system being retired and may have exposed customer-supplied API keys stored in its Console. The company reported that 1.4% of Console users were affected, according to Frandroid.

Those credentials let software send requests to OpenAI, Anthropic or Google models while charging the account that owns the key. The demonstrated consequence is therefore not limited to disclosure. Users reported receiving provider consumption alerts, including one account with €355 in unauthorised Anthropic charges and another with about €200 billed by Google before its project was suspended for abusive use, Frandroid reports.

Distillation describes the motive, not the entry point

Model distillation normally uses answers from a larger “teacher” model to train a smaller “student” model to imitate its behaviour. In an illicit version, stolen credentials and fraudulent accounts can fund large volumes of requests to a rival model, whose outputs then become training material, as explained in Frandroid’s account of the incident.

OpenCode associated its incident with that activity but did not publish evidence showing how the intruder entered, how long access lasted or how many keys were obtained. The available account also provides no indication that prompt injection caused the exposure. Based on OpenCode’s disclosure, the supported distinction is narrower: credential theft was the apparent means, while distillation was the stated motive.

That distinction matters operationally. A commercial team does not need to establish what model the attacker intended to train before containing a credential that can incur charges. The purpose of the unauthorised requests may guide the later investigation, but it does not change what an exposed key can authorise.

A legacy system credential compartment sits apart from a model distillation process using collected responses.

Conceptual illustration, not a photograph, separating credential theft from the stated distillation motive.

The exposed credential is the immediate decision point

An affected company has to choose between preserving an existing integration and invalidating a credential that another party may possess. The deciding criterion is not whether the incident carries a novel label. It is whether the key was stored in the affected service or whether unexplained provider usage indicates that it has already been used.

OptionAppropriate conditionDirect trade-off
Revoke and replace the keyOpenCode identified the account as affected, or provider activity is unauthorisedStops the old credential from authorising new calls but requires connected workflows to receive the replacement
Disable the dependent workflow firstThe team cannot immediately identify where a replacement key must be installedInterrupts the automation while preventing it from continuing with uncertain credentials
Wait for more informationThe key was not stored in the affected Console and provider usage remains expectedAvoids unnecessary disruption but does not resolve unexplained consumption

OpenCode said it emailed affected accounts and that users who received no message were not thought to be affected. Some users, however, noticed provider consumption alerts before receiving OpenCode’s notification, according to Frandroid. An inbox check alone therefore provides less direct evidence than the combination of storage history and provider-side usage.

Rotation must include every dependent workflow

Revoking a key contains its future use, but replacement is a separate operational task. A key connected to a coding agent may also be referenced by local developer settings, shared automation environments or deployment configuration. Replacing it in only one location can leave another workflow unavailable after revocation.

For a commercial operations team, the practical sequence is to identify which process uses the exposed credential, create a replacement through the relevant model provider, update that process and then confirm that the retired key no longer authorises requests. Provider billing and usage records are also the evidence needed to separate ordinary automation traffic from activity the team did not initiate.

This is especially important where an agent can switch between multiple model suppliers. OpenCode supports models from several providers, and the incident concerned users who had saved their own provider keys in its online Console, Frandroid explains. Each stored credential therefore needs an individual decision; changing one provider’s key does not invalidate another provider’s credential.

A replacement API key is routed to several dependent workflows while the old key is deactivated.

Conceptual illustration, not a photograph, of replacing a credential across connected workflows.

Waiting depends on evidence OpenCode has not published

Waiting can be defensible when the relevant key was never stored in OpenCode’s Console, the account was not identified as affected and its provider records contain no unexplained activity. It is harder to justify when a provider has already issued an abnormal-consumption alert or when the team cannot establish where the credential was stored.

Important facts remain unavailable. OpenCode has not disclosed the intrusion method, the duration of access or the number of credentials obtained. Its reported percentage is also difficult to translate into an absolute number because the company has not published the Console’s total user population, Frandroid notes.

The immediate decision should therefore follow credential exposure, not the distillation narrative. Teams with a stored key or unauthorised usage have evidence to revoke and replace it now. Teams without either signal can wait, but the next material update to watch is OpenCode’s account of which credentials were accessed and how the old system allowed that access.