Read a session's subscription, model and effort
Requires @openlatch/client 0.11.11 or later
Use the Subscription column of an agent’s Economics sessions table to see what each session ran under: the subscription ID and its kind, the provider account and the billing mode, plus the reasoning effort the agent requested beside each model. Every role can read it. Machines on an older client report no subscription, provider account or effort; they still report the model and the billing mode.
Each value is what the agent’s machine reported, shown as sent. OpenLatch does not check a subscription ID or an account against the provider, and it never judges one: a value is an observation, not a verdict.
Read a session
Section titled “Read a session”- Open an agent, then its Economics tab.
- In Sessions, read the Subscription column: the kind label on the first line, the subscription ID on the second, then the provider account and the billing mode.
- Read the effort on the second line of the Models cell, after the word effort.
- Select a session to open its detail: every subscription, provider account, billing mode and effort of the session, and the effort of each model in the cost-by-model table.
When a session has more than one value, the cell shows the first one and a count such as +1. Hover or focus the count to read the full list.
| Value | What it is | When it reads not reported |
|---|---|---|
| Subscription | The subscription the session’s model calls ran under, with its kind, such as an Anthropic organization or a ChatGPT workspace. It names the subscription, not the person | The agent’s configuration names no subscription, for example a session on an API key |
| Provider account | The email address of the model provider account, for Claude Code only, or shared-key when the session runs on a credential that names no person, such as an API key | Every agent other than Claude Code, and every new call once identity signal collection is off |
| Billing mode | Metered for spend billed through an API key, Subscription, or Unknown when the client could not tell or sent nothing | Never: a billing mode the client could not tell reads Unknown |
| Model | The models the session called | Never: the model is always reported |
| Effort | The reasoning effort the agent requested, as it sent it | The agent’s requests carried none |
A value that was not reported shows a dash, read aloud as, for example, “Subscription not reported by this agent”. Each value stands on its own: one value not reported never hides the others.
Subscription kinds
Section titled “Subscription kinds”| Kind label | What the ID is | Where the client reads it |
|---|---|---|
| Anthropic org | A claude.ai organization UUID | Claude Code signed in with a claude.ai login, and Claude Code running inside Claude Desktop |
| ChatGPT workspace | A ChatGPT workspace UUID, or on a personal plan the account’s own ID | Codex CLI signed in with ChatGPT |
| Azure OpenAI resource | The hostname of an Azure OpenAI resource | Claude Code, Codex CLI or Cline configured with an Azure OpenAI base URL |
| Cursor team | A Cursor team ID | Cursor CLI or the Cursor editor signed in to a team. When both name a team, the CLI’s team wins |
| Cline org | A Cline organization ID | Cline signed in to a Cline organization |
| GCP project | A Google Cloud project ID | Claude Code running on Google Vertex AI |
| AWS account | An AWS account ID | Claude Code running on Amazon Bedrock, taken from the inference-profile ARN in its model setting |
| Gateway | The hostname of a model gateway | Claude Code, Codex CLI or Cline configured with a base URL that is not a model provider’s own host |
| GitHub enterprise, GitHub org | A GitHub enterprise, or a GitHub organization pinned by device policy | Reserved for GitHub Copilot, which is not yet supported |
A hostname is carried alone, without scheme, path, port, user name or query. A Gateway value names the gateway, not your company: a shared gateway service shows the same hostname for every customer.
When several sources apply to one agent, the client takes the first that answers, in this order:
- A base URL on an Azure OpenAI host gives Azure OpenAI resource.
- Any other base URL that is not a model provider’s own host gives Gateway, whatever the credential.
- Claude Code running on Vertex AI or Bedrock gives GCP project or AWS account.
- The agent’s sign-in gives its organization, workspace or team.
Why a subscription reads not reported
Section titled “Why a subscription reads not reported”| Situation | What you see |
|---|---|
| Claude Code on an API key, an auth token, an API key helper or an OAuth token | Not reported, even when an earlier claude.ai login is still cached on the machine: the organization behind a key cannot be known without calling the provider |
| Codex CLI on an API key | Not reported |
| Codex CLI with its credentials only in the operating system keyring | Not reported from its sign-in file. Once a model call goes through OpenLatch, the ChatGPT workspace that call names is used for the call and for the agent |
| A base URL set only in a shell profile | Not read: only the agent’s own settings and the client’s environment are read |
| A Codex CLI gateway set only in a profile, or through the top-level OpenAI base URL override | Not read |
| OpenCode or Devin | Always not reported: the client reads no subscription for them |
| Cursor | Never shows Gateway: the client reads no gateway setting for Cursor |
GitHub Copilot is not yet supported; like Cursor, it never shows Gateway. Gemini CLI and OpenClaw are not yet supported, so no subscription, Gateway included, is read for them.
Billing mode
Section titled “Billing mode”| Label | Meaning |
|---|---|
| Metered | Spend billed through an API key |
| Subscription | Spend under a subscription plan, shown as estimated on the Economics tab |
| Unknown | The client could not tell, or sent no billing mode |
A Cursor session always reads Subscription. That is a rule the client applies to every Cursor turn, not something it observed.
Effort
Section titled “Effort”The effort is the reasoning effort the agent asked for, as it sent it. The client reads it from Anthropic Messages and OpenAI Responses requests, such as those of Claude Code and Codex CLI, and from the effort Cursor reports at the end of each turn. It is never read from a model name and never inferred from token counts. OpenLatch records the requested value and changes no request.
Provider account
Section titled “Provider account”The provider account is reported for Claude Code only: the email address of the signed-in account, or shared-key for a credential that names no person. Every other agent reads not reported.
The account follows the switch Collect identity signals from endpoints in Settings › Identity Providers, on by default; see Connect a directory for owner lookup. Shortly after you turn it off, no new model call records an account, whatever a machine still sends. Calls recorded before keep theirs. The subscription, the billing mode, the model and the effort are not identity signals and are recorded either way.
A session takes its account from its first lookup. When that lookup finds no account, the session reads not reported throughout.
When values change
Section titled “When values change”- Each model call records its own values. A session whose subscription, billing mode or effort changed shows each value, in the order it first appeared.
- The lists cover the date window you selected. A value seen only outside that window is not listed.
- The client reads the agent’s configuration when it detects the agent, at each periodic rescan, and at the start of each Claude Code session. A new value appears with the agent’s next model call or configuration event.
- On a machine running Claude Code both inside Claude Desktop and from the command line under different credentials, the most recent session start decides the subscription the agent’s next calls record. Each call keeps the value it recorded.
- Sessions recorded before these values existed read not reported. Nothing is filled in afterwards.
- Past sessions keep what they recorded for as long as their economics data is kept. That retention window is configured, not guaranteed: rows are not certain to be deleted when it ends. See Data handling and security.
Files the client reads
Section titled “Files the client reads”To find a subscription, the client reads named fields from the agents’ own files. Each file is read in memory and only the named field is kept: the file and every other field in it are never stored, logged or sent. The client never opens a credential store, such as Claude Code’s credentials file, the macOS Keychain, Cline’s secrets file, a .env file or your AWS credentials file, never decodes a token, and never calls a provider with the agent’s credential. Your endpoint security tooling may show these reads.
| Agent | Source | What is kept |
|---|---|---|
| Claude Code | .claude.json, in your home folder or the Claude configuration directory | organizationUuid, the organization of the signed-in claude.ai account |
| Claude Code | settings.json and the client’s own environment | ANTHROPIC_MODEL, ANTHROPIC_VERTEX_PROJECT_ID, ANTHROPIC_BASE_URL and the model overrides. Credential settings are checked for presence only |
| Claude Code inside Claude Desktop | CLAUDE_CODE_ORGANIZATION_UUID, in the hook’s environment at session start | That variable alone |
| Codex CLI | config.toml | The active model provider and its base_url |
| Codex CLI | auth.json | The sign-in mode and the account_id of a ChatGPT sign-in |
| Codex CLI | Each model call that goes through OpenLatch | The chatgpt-account-id header |
| Cursor CLI | cli-config.json | activeTeamId, else teamId |
| Cursor editor | state.vscdb, opened read-only and queried by exact key | The cached team ID |
| Cline | globalState.json | lastManagedOrganizationId, the active provider and its base URL |
| Cline | providers.json | The Cline account’s organizationId, the active provider and its base URL |
To read what a session did, see Investigate what an agent did. For the agent’s spend and budget, see Track an agent’s spend.