Files
coder/docs/admin/users/groups-roles.md
T
Michael Suchacz 6826da9397 feat: restore agents-access as a default organization role (#30004)
Restores `agents-access` (**Coder Agents User**) as a built-in
organization role and adds it to every organization's
`default_org_member_roles`. Members keep Coder Agents by default, and
admins can now restrict it per organization by removing the role from
the defaults and granting it through IdP role sync or direct assignment.

Since #28186, chat permissions lived in the organization-member floor,
so the only way to limit Coder Agents was narrowing per-model access
lists, which did not hide the feature.

- Migration 000602 appends `agents-access` to every organization's
defaults, so upgrading keeps every member's access. New organizations
get it from `rbac.DefaultOrgMemberRoles()`.
- Service accounts do not inherit the role from the defaults
(`GetAuthorizationUserRoles`), so they still need an explicit grant for
chat.
- Owners and Organization Admins keep chat access regardless of
defaults. Chats shared with a user stay readable without the role.
- Role sync is unchanged. It does not store default roles, so after the
default is removed a mapped user gets `agents-access` at their next
sign-in.
- The retired-role mechanism (`IsRetiredRoleName`) is removed.
- `PATCH /api/v2/organizations/{organization}` rejects duplicate
`default_org_member_roles` entries (the CLI already de-duplicated them).
- Custom organization role requests treat built-in role names
case-insensitively, since custom role names are stored lowercase and
`Agents-Access` would otherwise become an undeletable shadow of the
built-in role.
- The Agents permission alert tells restricted members their chats are
kept, and the model selector for users without chat permission no longer
claims that no models are configured.

Docs add "Control who can use Coder Agents" to the Agents
getting-started guide.

**NOTE**: Migration 000602 deletes custom roles named `agents-access`,
which the built-in role would shadow. The down migration does not
restore them. Stored member grants of `agents-access` from the earlier
built-in role or a deleted custom role stay and now grant chat access.

## Validation

- Remote dogfood
[UAT](https://dogfood.cdr.dev/agents/e1c18dc6-f6f0-49a1-b6cd-6ce014b51a86)
passed on fb441dfae5, covering case variants of built-in role names on
create, update, delete, default roles, and member grants. The previous
round, on a6fef66b3f, passed the upgrade from main 5dde49dffb on a
fresh database. 6b7f107e0b only changes wording (docs, comments, UI
copy, CLI help) and did not go through UAT.
- Local: rbac, dbauthz, idpsync, migrations (chain including 000602 down
and up), querier, httpmw, provisionerdserver, coderd and enterprise
chat, role, and organization tests, chatd, toolsdk, CLI; frontend
vitest, story tests, biome, oxlint, tsc.

## Known issues (not changed here)

- Sending from a chat page that was already open when access was removed
shows a generic 404 panel until reload.
- The members page role editor is not locked for OIDC users under org
role sync; the API rejects the change with 400.
- Creating a custom role named after a system role
(`organization-member`, `organization-service-account`) returns 400 with
a raw database unique-constraint error.

<details>
<summary>Review record</summary>

- Remote UAT (UAT Critic sub-agent `6636c855ec`): round 1 on 8bec029d35
passed with issues, fixed in d7ba937a10 and e0f16e1a45f; round 2 on
a6fef66b3f passed; round 3 on fb441dfae5 passed.
- Codex: round 1 on a6fef66b3f found one P2 (case variants of built-in
role names), fixed in fb441dfae5 with a red-green test. Rounds 2 and 3
on fb441dfae5 found no major issues.
- mafredri on fb441dfae5 (PR text only): nine wording suggestions
applied in 6b7f107e0b9; NOTE extended for stored grants; description
trimmed.
- Frontend: FE1 to FE10 and coder-frontend-review checkpoints
self-audited.

</details>

> 🤖 This PR was opened by [Xum](https://mux.coder.com) on behalf of
@ibetitsmike.
2026-09-27 23:34:26 +02:00

7.4 KiB

title
title
Groups and roles (Premium)

Groups and roles can be manually assigned in Coder. For production deployments, these can also be managed and synced by the identity provider.

Groups

Note

Groups require a Premium license. For more details, contact your account team.

Groups are logical segmentations of users in Coder and can be used to control which templates developers can use. For example:

  • Users within the devops group can access the AWS-VM template
  • Users within the data-science group can access the Jupyter-Kubernetes template

Roles

Roles determine which actions users can take within the platform. The roles in the following table apply across the whole deployment. Organizations have their own roles. Refer to Organization roles for more information.

Auditor User Admin Template Admin Owner
Add and remove Users ✅ ✅
Manage groups (premium) ✅ ✅
Change User roles ✅
Manage ALL Templates ✅ ✅
View ALL Workspaces ✅ ✅
Update and delete ALL Workspaces ✅
Run external provisioners ✅ ✅
Execute and use ALL Workspaces ✅
View all user operation Audit Logs ✅ ✅

A user may have one or more roles. Every user also holds an implicit Member role that covers their own account, such as reading their profile and managing their tokens.

The Member role doesn't grant workspace access on its own. The ability to create and use workspaces comes from the organization's default member roles, which include Organization Workspace Access by default. Refer to Default member roles for how to remove workspace operations from the default member set.

The preceding table describes a default deployment. A deployment that sets CODER_DISABLE_OWNER_WORKSPACE_ACCESS removes the Owner role's SSH, application, and terminal access to other users' workspaces. Owners keep that access to workspaces they own. Refer to --disable-owner-workspace-access for the flag, environment variable, and YAML forms.

Organization roles

Organization roles apply inside a single organization rather than across the deployment. A user who belongs to more than one organization can hold different organization roles in each one. Assign organization roles from Admin settings > Organizations > Members, or sync them from your identity provider with IdP sync.

Coder ships the following organization roles:

  • Organization Admin: manages the organization's templates, provisioners, groups, members, and organization role assignments.
  • Organization User Admin: manages the organization's members, groups, and role assignments, including its IdP sync settings.
  • Organization Template Admin: manages the organization's templates and provisioners, and reads its workspaces.
  • Organization Auditor: reads the organization's audit logs and connection logs, along with the resources those logs reference.
  • Organization Workspace Access: creates and operates the user's own workspaces in the organization.
  • Organization Workspace Creation Ban: blocks creating and deleting workspaces in the organization, and overrides any role that would otherwise allow it.
  • Coder Agents User: uses Coder Agents in the organization. Members other than service accounts hold this role through the organization's default member roles unless an administrator removes it.

Organization Admin doesn't include SSH, application, or terminal access to workspaces other members own. A user with that role can read, build, stop, and delete those workspaces. Connecting to one requires access granted through workspace sharing.

Every member of an organization also holds an implicit organization membership role that the dashboard doesn't display. That role carries the smallest permission set a member needs, such as reading the organization and their own membership record. Service accounts hold an equivalent implicit role.

Custom roles

Note

Custom roles are a Premium feature. Learn more.

Starting in v2.16.0, Premium Coder deployments can configure custom roles on the Organization level. You can create and assign custom roles in the dashboard under Organizations -> My Organization -> Roles.

Custom roles

Example roles

  • The Banking Compliance Auditor custom role cannot create workspaces, but can read template source code and view audit logs
  • The Organization Lead role can access user workspaces for troubleshooting purposes, but cannot edit templates
  • The Platform Member role cannot edit or create workspaces as they are created via a third-party system

Custom roles can also be applied to headless user accounts:

  • A Health Check role can view deployment status but cannot create workspaces, manage templates, or view users
  • A CI role can update manage templates but cannot create workspaces or view users

Creating custom roles

Selecting "Create custom role" opens a UI to select the desired permissions for a given persona.

Creating a custom role

From there, you can assign the custom role to any user in the organization under the Users settings in the dashboard.

Assigning a custom role

Note that these permissions only apply to the scope of an organization, not across the deployment.

Security notes

A malicious Template Admin could write a template that executes commands on the host (or coder server container), which potentially escalates their privileges or shuts down the control plane. To avoid this, run external provisioners.

In low-trust environments, we do not recommend giving users direct access to edit templates. Instead, use CI/CD pipelines to update templates with proper security scans and code reviews in place.