Skip to Content
Platform
Identity and AccessHow agents act

How agents act

An agent acts as an agent member, for one owner, and reaches only what that owner and its grants allow.

Every task has an owner (whose work it is) and may have an actor (the agent member that did it). This page decides who owns your tasks and how far a partner should trust the end user.

You need: an API key or application (Credentials).

const runner = await client.runtimes("support-agent").run({ identity: { user_id: user.id }, });

Choose the agent member a credential acts as

Agent memberReachesWho can bind a credential to it
Member Agent (default)Only the work it owns or acts on, plus sharesAnyone who can create the credential
Admin AgentEvery conversation, task, and file in the project, only when no end user is namedOwners and admins

API keys and applications pick one at creation or with update (--member-id, --agent-member-id). Connectors always act as the Member Agent. Which credential can steer whose task: When someone else approves.

Create an Admin Agent key

An owner or admin finds the Admin Agent’s ID, then creates the key:

introspection members list --query "[?name=='Admin Agent'] | [0].id" -o table introspection api-keys create --member-id <admin-agent-id> --name approvals \ -e production --capabilities runtimes --secret-file ./approvals-key.txt

The key reads and steers every task in the project. Keep it server side, use one key per job, and revoke it when the job ends (introspection api-keys revoke --key <id>).

Run a task for an end user

Name the end user when you start the task; their work and memory are then theirs. A credential that proves a person always wins over a named identity.

Started byTask ownerMemory
API key or service account + user_idcustomer member user:<id>Yes
API key or service account + anonymous_idcustomer member anon:<id>Yes
An end user signed in through an applicationThat end userYes
Slack channel or DMOne customer member per channel or DMYes
API key or service account + conversation_id only (backend jobs)The agent memberPer conversation
API key or service account, no identityThe agent member, visible to every identity-less callerNone
Dashboard or CLI login (even with --subject)The teammateNone

Memory lives per owner and environment (Files and memory).

Per-user connections and self-scheduling, by starter

  • user_id / anonymous_id: per-user connections (Pipedream only), authorized with --user-id or --anonymous-id.
  • Signed-in end user: per-user connections from your app. The task can schedule its own follow-ups if the application’s allowed scopes include automations:read and automations:write; no other starter can.
  • CLI login: the teammate’s own connections (--subject user), else shared.
  • No identity, conversation_id only, or Slack: shared connection only.
  • conversation_id only: never use it for browser visitors; every caller without a user identity can see the task.

Decide how much a partner trusts the end user

Trust levelJWT typeHow the end user was establishedPartner should
Attributionidentity_attributionAn API key or service account named themAccept only if it trusts your backend to pick end users
Assertionidentity_assertionIntrospection verified them (federation, hosted login, native app)Accept when it needs a proven end user

How to send the JWT is in Tell a partner who the end user is.

What an agent can reach

Only its owner’s work plus shares, the hosts the sandbox allows, and the repositories its runtime.github grant names (Repositories). It never holds a secret (Secrets).

Next

Last updated on