Repository navigation
Conversation
Replace the opt-in self-service mode with a built-in Default User Role that every signed-in person receives. Sign-in creates the account, every human account holds the binding, and GitHub and Google sign-in require their allowlists because sign-in now creates accounts.
Administrators map provider groups (GitHub organizations or teams, Google hosted domains, OIDC claim values) to OCC Groups. Sign-in creates the account on a match and syncs mapped memberships each time. The built-in Default users Group holds the Default User Role, and Namespace Groups give mapped teams Agent Author in shared Namespaces. Mapping rules replace the GitHub and Google allowlists.
Keep the GitHub and Google allowlists and administrator account flows unchanged; mapping rules only add account creation at sign-in, and administrator-created Namespaces get no owner binding. Connection templates become personal or shared, so a team Namespace can hold an Agent connected to a shared account such as a team mailbox.
# Conflicts: # specs/README.md
… Installation ceiling OCC removes an Agent's operate grant once no Configuration or pending or running revision references the source. Namespace members and owners can edit Agent sandbox network additions within the Installation ceiling; Namespace ceilings wait for the Guardrails work.
…mespace Roles Write the Agent's exact operate grants in the deploy transaction only when the built-in Namespace member or owner Role allows the caller deploy and operate, so existing custom Roles gain nothing. Correct the claim about create: IAM API bindings name one existing resource, so only the bootstrap binding grants it.
# Conflicts: # specs/README.md
RFC-0025 is now taken on main by Inspect accepted Installation Driver values.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: blocked before merge. What this changesThis PR proposes provider-mapped account provisioning, Namespace ownership, automatic Agent credential grants, and personal or shared OAuth connections. Example: An Installation administrator maps GitHub team acme/platform to Default users.
Review scores
ProductKind: Feature · Worth it: Needs a maintainer decision Merge readiness⛔ Blocked before merge - 3 items remain Keep this draft open for maintainer discussion: it addresses a verified capability gap, has two minor documentation defects, and leaves substantive access-model decisions unresolved. Priority: P2 Decision needed
Before merge
Findings
Agent review detailsHow this fits togetherOCC authenticates provider identities, evaluates resource permissions through the selected IAM Driver, and manages Namespaces and Agent deployments; the proposal connects provider membership to account creation, Roles, and credential delegation. flowchart TB
A[Identity provider] --> B[OCC sign-in]
B -. Proposed mappings .-> C[Accounts and Groups]
C -. Proposed Roles .-> D[Namespace ownership]
D -. Proposed deploy grants .-> E[Agent ServicePrincipal]
E --> F[Secrets and credential sources]
Technical reviewBest possible solution: Resolve the onboarding and delegation model with the existing IAM owners, coordinate the overlapping proposals, and retain explicit Proposed status until a decision is recorded. Do we have a high-confidence way to reproduce the issue? This is a feature proposal; current-main source confirms its motivating limitations without establishing a regression or requiring a runtime reproduction. Is this the best way to solve the issue? Building on existing IAM and Namespace owners is coherent, but the broader delegation and OAuth isolation choices require agreement with the overlapping proposals before this can define an accepted contract. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 2b3b206b6352. SecurityNone. EvidenceWhat I checked:
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 30, 2026, 10:40 AM ET / 14:40 UTC. |
…rst slice Seed the built-in Roles by migration, read the Namespace limit from Installation configuration, and let the owner binding create the default Presets.
kevinlin-openai
left a comment
There was a problem hiding this comment.
-
Members of the built-in Default users Group can create Namespaces, and each creator becomes that Namespace's owner
- still conflicted about this. namespace per user provides nice isolation but this does mean that for 100k personal agents, we're creating 100k namespaces + related k8 resources which means we'll need to shard k8 clusters. we want to support this topology but hesitant to make it the default
- the pattern that creators of a resource should have all permissions of said resource should be a general rule and not a one off for namespaces
-
An administrator marks each connection template personal or shared. OCC cannot tell from the provider whether an account belongs to one person, so the template decides how far a connection may reach:
- doesn't make sense to me that we restrict connection templates. this as i understand it how a connection to a provider is setup, not the actual connection itself. connections can be personal vs shared, connection templates should not have that restriction
- we don't need to restrict role bindings without resources from fixed namespace roles - this should be a general capability. if specific resource binding is omitted, then the permission applies to all resources in a given namespace
|
…owners Default users create Agents in the shared default Namespace; Namespace create becomes the opt-in defaultUser.namespaceCreate setting. Every creator gets an Owner binding, bindings without a resource work for any Role, revocation keeps created resources, and sign-in sync with an eight-hour session comes before SCIM. Limits and connection templates move out of scope.
|
@kevinlin-openai thanks for the review. I updated the RFC in 5b76d71, after talking it through. Here is the result for each point:
Quotas and limits, including the Namespace limit from the earlier draft, move to a separate RFC. |
…rked first slice Namespace names stay reserved after deletion, so a deleted default Namespace cannot be recreated. The plan records migration 0066 and that the Owner binding replaces namespaces.created_by.
…ators owners Rework the first RFC-0026 slice after the design review on #4207. Migration 0066 (renumbered after main's 0065) seeds the immutable Agent Creator, Namespace Creator, Owner, and Namespace member Roles and the Default users Group, lets an Installation Group be bound inside a Namespace, and binds Default users to Agent Creator in an existing default Namespace. OCC writes that binding when it creates the Namespace named default. Every create of a Namespace, Agent, Configuration, Secret, credential source, Preset, or ServiceAccount, and each guided provisioning request, binds the creator to the Owner Role in the same unit: Namespace-wide for a Namespace, exact otherwise. Built-in bindings are written only when the Native IAM Driver reads policy from the controller's own State. defaultUser.namespaceCreate replaces defaultUser.namespaceLimit: OCC writes or deletes the Namespace Creator binding at startup and after bootstrap. The Namespace limit, its lock, and namespaces.created_by are removed. Deploy-time grants now follow the Owner or Namespace member Role. The IAM Driver's createNamespaceOwnerBinding becomes createOwnerBinding and setDefaultUsersBinding.
Slice 1 on #4231 now writes deploy-time grants, because a Default user's deploy needs them, and fences each create and deploy against session, membership, and AccessBinding revocation. Slice 3 keeps grant removal and the move to a deploy-only binding ID.
Problem
Every OCE capability starts with an Installation administrator. External sign-in admits only identities attached to accounts an administrator created first, only the bootstrap administrator can create Namespaces, and only an Installation administrator can give an Agent's service account
operateon its Secrets and credential sources (MEMBER_GRANT_REFUSED). IAM already evaluates Group bindings, but nothing writes Groups.Change
Adds RFC-0026: Default users sign in through identity provider mappings and own their Namespaces and its row in
specs/README.md. The RFC proposes:namespace:create) bound to a Default users Group, and built-in Namespace member and Namespace owner Roles. The creator of a Namespace becomes its owner, up to a configured limit.operategrants only when a built-in Namespace Role allows the caller, so existing custom Roles gain nothing. OCC removes those grants when nothing references the source anymore.Existing sign-in flows, allowlists, and administrator-created accounts and Namespaces are unchanged. The built-in Roles, Group writes, and account creation at sign-in change the IAM Driver contract. Template sharing changes the RFC-0023 connection template contract. This draft is opened for early feedback. Implementation will follow in separate PRs.
Verification
Documentation only. Prettier
--checkpasses on the changed files. The repository word counter could not run locally because@sindresorhus/slugifyis missing. An approximate count puts the RFC under the 2,500-word limit.Risks
None at merge time; the RFC changes no code. The proposal widens who can create Namespaces and grant Agent access. The RFC limits this to built-in Roles that only OCC or an Installation administrator can bind, and it lists the open questions for product and security review.