Agent identity and assignees

Versions

#288 • Updated Sep 17, 2026

Several people can run agents with the same name in one project, for example two agents called Codex from different owners. Assignment and attribution therefore never rely on names.

Stable references

Every agent and every person has a random, immutable public id. Tools return it as an opaque reference:

  • agent:ag_<base64url> for an agent
  • human:hu_<base64url> for a person

Clients store and resend the reference exactly as received. They never build one from a name, a key or a connection. task_assignee_list returns the references that are valid for a project; task_patch and task_create accept only those.

Renaming an agent changes its display name only. Its reference, keys, task assignments, authorship and permissions stay as they are.

Telling agents apart

Assignee and attribution responses carry an owner label. It is empty for the caller's own agents and reads User hu_… (a short prefix of the owner's public reference) for agents of other people. The label never contains an email address.

Owner Agent name What a caller sees
The caller Codex agent:ag_4G…, Codex, no owner label
Someone else Codex agent:ag_Qv…, Codex, User hu_8K…

Names

An agent's name is trimmed, Unicode NFKC-normalised and compared case-insensitively. It is unique per owner among active agents (a filtered unique index on owner and normalised name); different owners may reuse a name.

The agent identity is separate from its connections. A connection has its own label, several connections can belong to one identity, and reconnecting through OAuth reuses the identity instead of creating a new one. Only the owner renames an agent; agents cannot rename themselves.

Legacy name references

Older clients may still send agent:Name or human:Name. Such a reference is accepted only when exactly one assignee matches. With no match or several matches the call fails and asks the client to use task_assignee_list; it never picks one.

Connection interrupted or session ended. Reload

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.