Skip to content

Agents > Oz Cloud Agents & Orchestration

Agent identities

Open in ChatGPT ↗
Ask ChatGPT about this page
Open in Claude ↗
Ask Claude about this page
Copied!

Agent identities are team-scoped bot accounts that own and execute cloud agent runs. Use them to separate workflows, scope credentials, and attribute automated work.

An agent identity is a team-scoped identity that can own and execute cloud agent runs. Every Warp team starts with a single default agent identity. Creating additional agent identities lets you separate workflows, scope credentials, and attribute automated runs to a specific bot account instead of a person.

Agent identities are useful when you want to:

  • Separate workflows - Give the deploy bot, the dependency-update bot, and the code-review bot distinct identities so runs are easier to filter and audit.
  • Scope credentials - Attach a specific set of managed secrets and skills to one identity so its runs receive only the configuration that workflow needs.
  • Attribute automated work - Bind an API key to an agent identity so CI pipelines and webhooks show up as that bot in run history rather than as a teammate.

Each team has one default agent identity. Headless runs (such as team API key runs that don’t specify an identity) execute under this default. User-triggered runs default to running as the calling user — surfaced as Quick run in the web app — unless you pick a specific agent identity. You can create additional agent identities on top of the default and run as any of them. Identities are team-scoped, so every member of a team can see and use the same set of agent identities.

You can attach the following configuration to an agent identity:

  • Description - A short, human-readable summary teammates see when picking the identity.
  • Managed secrets - References (by name) to team-managed secrets the identity should have access to.
  • Skills - Skill specs (for example, org/repo:path/to/SKILL.md) the identity comes preloaded with. Shorthand specs like repo:skill_name are accepted when they resolve unambiguously against the team’s cloud environments.

Skill specs are stored in their normalized fully-qualified form, and managed secret references are validated against the team’s secret scope at attach time. If a secret is missing or a skill repo is not accessible to the team’s GitHub App installation, the request is rejected before anything is saved.

“Agent identity” is the user-facing name for what Warp’s CLI and REST API internally model as a service account. The two terms refer to the same underlying record:

  • When oz whoami reports a principal of service_account:<uid>, that principal is an agent identity on your team.
  • When oz federate issue-token emits a subject component like service_account:my-sa-id, the value identifies the agent identity the run is executing as.

You don’t need to distinguish the two terms in day-to-day use — pick the agent identity in the UI or pass its UID to the API, and the CLI surfaces the corresponding service_account: principal.

Most teams start with the default agent identity and add more as their automation matures. Creating additional agent identities is worth it when distinct workflows have meaningfully different scopes — for example, a ci-runner identity that only needs read-only repo access, an on-call identity that holds production deploy credentials and is restricted to incident playbooks, and a nightly-jobs identity used by scheduled cleanups. Scoping each identity to a single workflow gives every run the minimum credentials it needs, keeps audit trails attributable to the right bot, and lets you revoke or rotate one workflow’s access without touching the rest.

Every team starts with a default agent identity. Additional identities are subject to plan-based limits — see warp.dev/pricing for current limits per plan.

When a team is over its plan limit (for example, after downgrading), the extra identities remain visible in the list but are marked as unavailable. Unavailable identities cannot be used to start runs, cannot have new API keys generated for them, and cannot be edited.

You can create, list, update, and delete agent identities through the public API. The full request and response shapes — including error codes — live on the API Reference page; the operations to look for are createAgent, listAgents, updateAgent, and deleteAgent under the agent tag.

The endpoints behave as follows:

  • Create - POST /agent/identities with a name and optional description, secrets, and skills. Returns 201 with the new identity’s uid, name, and available flag.
  • List - GET /agent/identities returns every agent identity on the team, including the default. Each entry includes an available flag indicating whether it is within the plan limit.
  • Update - PUT /agent/identities/{uid} replaces individual fields. Omitting a field preserves the current value; passing an empty string or empty array clears it.
  • Delete - DELETE /agent/identities/{uid} soft-deletes the identity and atomically deletes every API key bound to it. The default agent identity cannot be deleted.

A few constraints apply across every endpoint:

  • Team-scoped - Agent identities belong to a team. The caller must be a member of exactly one team. If the caller is on zero teams or multiple teams, the request is rejected.
  • Human callers only - Only human users can create, update, or delete an agent identity. A request authenticated as an agent identity itself is rejected.
  • Availability is enforced on use - Over-plan-limit identities are returned by the list endpoint but cannot be used to update fields, generate new keys, or start new runs.

A team API key can be bound to a specific agent identity at creation time. Calls authenticated with that key run as the chosen identity. The team is resolved automatically from the identity — you don’t need to specify a team when generating the key.

To create a key bound to an agent identity, choose the identity when creating the team API key. See API Keys for the full key creation flow and for the difference between user-scoped and team-scoped keys.

Once the key exists, the CLI and SDK authenticate as that agent identity for every call. There is no extra flag to set; the binding is on the key itself.

There are two ways to run a cloud agent as a specific agent identity:

  • Authenticate with a key bound to the identity - Every run started with that key executes as the bound agent identity. This is the typical path for CI pipelines and scheduled work.
  • Pass agent_identity_uid on POST /agent/runs - For one-off runs, send the agent identity’s uid in the request body. The field is only valid for team-owned runs.

When neither path is used, headless runs (team API key runs without an identity) execute under the team’s default agent identity. User-triggered runs (Warp app, personal API key, Slack, Linear) execute as the calling user — surfaced as Quick run in the web app.

Where agent identities appear in the product

Section titled “Where agent identities appear in the product”

Agent identities surface across several Oz surfaces:

  • Agents page - The Agents page in the Oz web app is where teams view, create, edit, and delete agent identities. The same page lists the skills available to your team.
  • Agent picker - Forms that start a new run or schedule include an Agent dropdown. Quick run is the default option (runs execute as the calling user); selecting an agent identity runs as that identity instead.
  • Run filters and detail - The Runs view lets you filter by agent identity, and individual run detail pages show which identity executed the run.
  • Admin Panel - Billing usage in the Admin Panel attributes credits consumed by agent identity runs to the team rather than to a person.
  • Cloud agent secrets - Manage the team-managed secrets you can attach to an agent identity.
  • Deployment patterns - When to use an agent identity for automation versus a personal identity.
  • Oz API & SDK - Programmatic access to the agent identity endpoints.
  • API Keys - Create keys bound to a specific agent identity.
  • Federated identity tokens - Issue OIDC tokens from inside a run, including ones executing as an agent identity.
  • Oz web app - The web surface where you manage agent identities and inspect their runs.
  • Admin Panel - Team-level billing and access controls.