<?xml version="1.0" encoding="utf-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="info"
     docName="draft-kushwaha-scim-agent-governance-00"
     ipr="trust200902"
     submissionType="IETF"
     xml:lang="en"
     tocInclude="true"
     sortRefs="true"
     symRefs="true"
     version="3">

  <front>
    <title abbrev="SCIM Agent Governance">SCIM Agent Governance Extension</title>
    <seriesInfo name="Internet-Draft" value="draft-kushwaha-scim-agent-governance-00"/>

    <author fullname="Saurabh Kushwaha" initials="S." surname="Kushwaha">
      <organization>Oracle Corporation</organization>
      <address>
        <email>saurabhkushwaha123@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="July" day="26"/>

    <workgroup>System for Cross-domain Identity Management</workgroup>
    <keyword>SCIM</keyword>
    <keyword>AI agent</keyword>
    <keyword>agentic identity</keyword>
    <keyword>governance</keyword>
    <keyword>lifecycle</keyword>

    <abstract>
      <t>
        The System for Cross-domain Identity Management (SCIM) Agent resource
        type defined in draft-wzdk-scim-agent-resource provides a minimal,
        platform-neutral schema for representing AI agent identities.
        Enterprise deployments additionally require governance metadata for
        provisioned agents: a lifecycle state model richer than a boolean,
        an autonomy classification, an operational validity window, and a
        reference to credential discovery information.
      </t>
      <t>
        This document defines an optional extension schema for the SCIM
        Agent resource type carrying this governance metadata.  The
        lifecycle state value set is grounded in the identity information
        lifecycle of ISO/IEC 24760-1, with one agent-specific addition.
        Attributes that belong to the authorization, credential-management,
        or real-time signaling layers are explicitly out of scope and are
        enumerated with pointers to the appropriate mechanisms.
      </t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction" numbered="true">
      <name>Introduction</name>
      <t>
        The SCIM protocol <xref target="RFC7644"/> and core schema
        <xref target="RFC7643"/> are widely implemented for provisioning
        user records into services.
        <xref target="I-D.wzdk-scim-agent-resource"/> extends this model
        with a first-class Agent resource type, deliberately minimal so
        that the base schema remains stable while the agentic ecosystem
        evolves.
      </t>
      <t>
        Discussion on the SCIM WG mailing list following the publication of
        <xref target="I-D.wzdk-scim-agent-resource"/> identified a set of
        governance concerns that arise once agents move from a simple
        identity record into operational use in an enterprise:
        distinguishing reversible suspension from terminal decommissioning,
        freezing an agent during a security investigation while preserving
        evidence, recording the degree of human oversight an agent operates
        under, bounding the period during which an agent is intended to
        operate, and locating the agent's credential binding information.
      </t>
      <t>
        This document defines an optional extension schema,
        "urn:ietf:params:scim:schemas:extension:agent:2.0:Governance",
        carrying this metadata.  The design follows three principles that
        emerged from the WG discussion:
      </t>
      <ol spacing="normal">
        <li>
          Provisioning-layer only.  Every attribute in this extension is a
          fact about the agent established at or after provisioning time
          that remains true regardless of which protocol the agent later
          uses to authenticate or act.  Attributes that function as
          authorization decision inputs, credential artifacts, or real-time
          risk signals are excluded (see <xref target="out-of-scope"/>).
        </li>
        <li>
          Normatively grounded value sets.  The lifecycle state values are
          derived from the identity information lifecycle of
          <xref target="ISO24760-1"/>, following the approach demonstrated
          in <xref target="OPCommands"/>, rather than inventing a parallel
          vocabulary.  One agent-specific state is added with explicit
          justification (<xref target="quarantined-just"/>).
        </li>
        <li>
          Cross-protocol legibility.  The semantics of the value sets
          defined here (autonomy levels, lifecycle states) are intended to
          be referenceable by other protocols -- for example as OAuth
          claim values or workload attestation attributes -- and are
          therefore defined independently of SCIM transport details.  A
          future registry could relocate these value sets outside SCIM
          entirely; this document defines the SCIM carrier attributes.
        </li>
      </ol>
      <t>
        Because this is an extension schema, support is inherently optional
        and discoverable: a SCIM service provider advertises support via its
        "/Schemas" endpoint and the "schemaExtensions" element of the Agent
        ResourceType, per Section 6 of <xref target="RFC7643"/>.
      </t>
    </section>

    <section anchor="conventions" numbered="true">
      <name>Conventions and Definitions</name>
      <t>
        The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
        "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>",
        and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described
        in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when,
        and only when, they appear in all capitals, as shown here.
      </t>
      <t>
        The terms "agent", "Agent resource", and "agentic identity" are used
        as defined in <xref target="I-D.wzdk-scim-agent-resource"/>.
        "Service provider" and "provisioning client" are used as defined in
        <xref target="RFC7643"/>.
      </t>
    </section>

    <section anchor="schema" numbered="true">
      <name>Agent Governance Extension Schema</name>
      <t>
        The extension schema is identified by the URI
        "urn:ietf:params:scim:schemas:extension:agent:2.0:Governance".  It
        <bcp14>MAY</bcp14> be applied to resources of type Agent as defined in
        <xref target="I-D.wzdk-scim-agent-resource"/>.  A service provider
        that advertises this extension <bcp14>MUST</bcp14> recognize all attributes defined
        by this schema.  If the extension is present on an Agent resource,
        "lifecycleState" <bcp14>MUST</bcp14> be present.  Unless stated otherwise, all
        other attributes are <bcp14>OPTIONAL</bcp14>.
      </t>

      <section anchor="lifecyclestate" numbered="true">
        <name>lifecycleState</name>
        <t>
          A complex attribute describing the operational lifecycle state of
          the agentic identity, with the following sub-attributes.
        </t>
        <dl newline="true" spacing="normal">
          <dt>state</dt>
          <dd>
            A string whose value is one of the canonical values below.
            <bcp14>REQUIRED</bcp14> within "lifecycleState".  Mutability is "readWrite";
            transitions are subject to the rules in
            <xref target="transitions"/>.
          </dd>
          <dt>reason</dt>
          <dd>
            A string carrying a machine-readable reason code for the current
            state, e.g. "securityInvestigation", "authorityRevoked",
            "endOfLife", "parentDecommissioned", "pendingReview".  <bcp14>OPTIONAL</bcp14>;
            mutability is "readWrite".  Reason codes are not standardized by
            this document; deployments <bcp14>SHOULD</bcp14> document their vocabulary.
          </dd>
          <dt>transitionedAt</dt>
          <dd>
            A dateTime (<xref target="RFC3339"/>) recording when the current
            state was entered.  Mutability is "readOnly"; assigned by the
            service provider.
          </dd>
          <dt>transitionedBy</dt>
          <dd>
            A SCIM reference to the User or Agent resource that initiated
            the transition.  Mutability is "readOnly"; assigned by the
            service provider.
          </dd>
        </dl>

        <section anchor="initial-state" numbered="true">
          <name>Initial State on Resource Creation</name>
          <t>
            On resource creation, "lifecycleState.state" <bcp14>SHOULD</bcp14> default to
            "established" unless service provider policy permits immediate
            activation.  A create request that sets "lifecycleState.state" to
            "active" <bcp14>MUST</bcp14> be accepted only if the same request, or service
            provider policy, satisfies the provider's activation requirements.
            A create request that sets "lifecycleState.state" to "quarantined"
            or "archived" <bcp14>SHOULD</bcp14> be rejected unless local administrative policy
            explicitly permits pre-quarantine or immediate archival.
          </t>
        </section>

        <section anchor="iso-mapping" numbered="true">
          <name>Canonical State Values and ISO/IEC 24760-1 Mapping</name>
          <t>
            <xref target="ISO24760-1"/> defines an identity information
            lifecycle, in Section 7.2 of that standard, comprising the
            stages "unknown", "established", "active", "suspended", and
            "archived".  The canonical values of "state" adopt this
            lifecycle directly, omitting "unknown" (a SCIM resource that
            exists is by definition at least established) and adding a
            single agent-specific value, "quarantined".
          </t>
          <table anchor="tbl-iso-mapping">
            <name>Lifecycle state values and ISO/IEC 24760-1 mapping</name>
            <thead>
              <tr>
                <th>state</th>
                <th>ISO/IEC 24760-1 stage</th>
                <th>Semantics for agents</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>established</td>
                <td>established</td>
                <td>Provisioned but not yet activated. The agent cannot
                    authenticate.</td>
              </tr>
              <tr>
                <td>active</td>
                <td>active</td>
                <td>Fully operational.</td>
              </tr>
              <tr>
                <td>suspended</td>
                <td>suspended</td>
                <td>Temporarily disabled by administrative action;
                    reversible. Outstanding tokens <bcp14>SHOULD</bcp14> be revoked or
                    suspended.</td>
              </tr>
              <tr>
                <td>quarantined</td>
                <td>(no equivalent; see
                    <xref target="quarantined-just"/>)</td>
                <td>Frozen pending security investigation; reversible only
                    by explicit administrative review. All access <bcp14>MUST</bcp14> be
                    blocked; the record and associated evidence <bcp14>MUST</bcp14> be
                    preserved unchanged.</td>
              </tr>
              <tr>
                <td>archived</td>
                <td>archived</td>
                <td>Terminal. The identity's authority is permanently
                    withdrawn. The record is retained for audit; see
                    <xref target="security"/>.</td>
              </tr>
            </tbody>
          </table>
          <t>
            Distinctions that some deployments model as separate terminal
            states -- for example "revoked" (authority withdrawn for cause)
            versus "decommissioned" (planned end of life) -- are carried in
            the "reason" sub-attribute of the transition into "archived"
            rather than as additional state values.  This keeps the value
            set aligned with <xref target="ISO24760-1"/> while preserving
            the audit distinction.
          </t>
          <t>
            Note that <xref target="ISO24760-1"/> permits restoration of
            identity information from the archived stage, and
            <xref target="OPCommands"/> accordingly defines a restore
            command among its lifecycle commands.  This profile
            deliberately diverges: for agents, "archived" is terminal
            (<xref target="transition-graph"/>).  Restoring a previously
            archived agent identity would allow authority withdrawn for
            cause to be silently re-established, and would break the
            association between a continuous agent identity and its audit
            history.  Where an archived agent's function is still required,
            a new Agent resource <bcp14>SHOULD</bcp14> be provisioned, preserving the
            archived record and its audit trail intact.
          </t>
        </section>

        <section anchor="quarantined-just" numbered="true">
          <name>Justification for the "quarantined" State</name>
          <t>
            <xref target="ISO24760-1"/> addresses the lifecycle of identity
            information for principals in general and does not define a
            state for an identity frozen during an active security
            investigation.  For human identities, "suspended" has
            historically absorbed this case.
          </t>
          <t>
            Agents differ in two ways that justify a distinct state.  First,
            a compromised agent can continue to act autonomously at machine
            speed between the detection of an indicator and administrative
            response; the semantics of "quarantined" therefore require that
            all access be blocked immediately and unconditionally, whereas
            "suspended" is an administrative convenience whose enforcement
            details are deployment-defined.  Second, investigation of agent
            compromise depends on preserving the agent record, its
            credential references, and its relationship graph (owners,
            hosted application, children) exactly as they were at detection
            time; "quarantined" therefore additionally prohibits
            modification of the resource other than the lifecycle
            transition itself.
          </t>
          <t>
            To the author's knowledge no ISO/IEC 24760-1 equivalent for
            agent identities exists at the time of writing.  Should ISO/IEC
            JTC 1/SC 42 or another body publish an agent-identity lifecycle
            taxonomy, a future revision of this document should reference
            it.
          </t>
        </section>

        <section anchor="transition-graph" numbered="true">
          <name>Permitted State Transitions</name>
          <t>
            A service provider implementing this extension <bcp14>MUST</bcp14> enforce the
            transition graph below and <bcp14>MUST</bcp14> reject a modification request
            whose resulting transition is not listed, with HTTP status 400
            and SCIM error type "invalidValue".  On every permitted
            transition the service provider <bcp14>MUST</bcp14> update "transitionedAt"
            and "transitionedBy".
          </t>
          <table anchor="tbl-transitions">
            <name>Permitted lifecycle state transitions</name>
            <thead>
              <tr>
                <th>From</th>
                <th>To</th>
                <th>Typical trigger</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>established</td>
                <td>active</td>
                <td>Activation after provisioning checks complete</td>
              </tr>
              <tr>
                <td>active</td>
                <td>suspended</td>
                <td>Administrative pause; reversible</td>
              </tr>
              <tr>
                <td>suspended</td>
                <td>active</td>
                <td>Reinstatement</td>
              </tr>
              <tr>
                <td>active, suspended</td>
                <td>quarantined</td>
                <td>Security indicator or investigation opened</td>
              </tr>
              <tr>
                <td>quarantined</td>
                <td>suspended</td>
                <td>Investigation closed; agent remains disabled pending
                    reinstatement</td>
              </tr>
              <tr>
                <td>quarantined</td>
                <td>active</td>
                <td>Investigation cleared and local policy permits
                    immediate reinstatement; restricted administrative
                    principals only</td>
              </tr>
              <tr>
                <td>established, active, suspended, quarantined</td>
                <td>archived</td>
                <td>Planned decommission, revocation for cause, or
                    abandonment before activation; the distinction is
                    carried in "reason"</td>
              </tr>
              <tr>
                <td>archived</td>
                <td>(none)</td>
                <td>Terminal</td>
              </tr>
            </tbody>
          </table>
          <figure anchor="fig-transitions">
            <name>Lifecycle state transition graph (transitions to archived
                  are permitted from every non-terminal state)</name>
            <artwork type="ascii-art"><![CDATA[
established -> active <-> suspended
      |          |           |
      +----------+-----------+--> archived
                 |           |
                 v           v
              quarantined --> suspended
                  |   |
                  |   +--> active  (policy-restricted)
                  +------> archived

archived is terminal.
]]></artwork>
          </figure>
        </section>

        <section anchor="transitions" numbered="true">
          <name>Interaction with the "active" Attribute</name>
          <t>
            The Agent core schema
            <xref target="I-D.wzdk-scim-agent-resource"/> defines a <bcp14>REQUIRED</bcp14>
            boolean "active".  For resources on which this extension is
            present, "active" is a projection of "lifecycleState.state".
            The value of "active" <bcp14>MUST</bcp14> be true when "lifecycleState.state"
            is "active" and <bcp14>MUST</bcp14> be false when "lifecycleState.state" is
            "established", "suspended", "quarantined", or "archived".
          </t>
          <t>
            A service provider implementing this extension <bcp14>MUST</bcp14> derive
            "active" from "lifecycleState.state".  If a request modifies
            both "active" and "lifecycleState.state" and the resulting
            values are inconsistent, the service provider <bcp14>MUST</bcp14> reject the
            request with HTTP status 400 and SCIM error type
            "invalidValue".  A modification that sets "active" to false on
            a resource whose state is "active" <bcp14>SHOULD</bcp14> be interpreted as a
            transition to "suspended".
          </t>
          <t>
            Transitions into "archived" are terminal: a service provider
            <bcp14>MUST</bcp14> reject any request that would transition a resource out of
            the "archived" state.  Transitions out of "quarantined" <bcp14>SHOULD</bcp14>
            be restricted by local policy to explicitly authorized
            administrative principals.  A direct transition from
            "quarantined" to "active" <bcp14>MAY</bcp14> be permitted only after
            investigation closure and explicit administrative approval;
            otherwise, implementations <bcp14>SHOULD</bcp14> transition from "quarantined"
            to "suspended" before reinstatement.
          </t>
        </section>

        <section anchor="events" numbered="true">
          <name>Relationship to Event-Based Signaling</name>
          <t>
            The lifecycle state defined here is the durable, queryable state
            of record for the agent.  A state <em>transition</em>, by
            contrast, is a security-relevant point-in-time event, and SCIM's
            polling-scale change propagation is not suitable for conveying
            it to relying parties in real time.
          </t>
          <t>
            Deployments that participate in an event-signaling framework
            such as the Shared Signals Framework <xref target="SSF"/> <bcp14>SHOULD</bcp14>
            emit an event when an agent transitions into or out of
            "quarantined" or into "archived", with the event identifying the
            SCIM resource.  Relying parties that require timely reaction to
            lifecycle changes <bcp14>SHOULD</bcp14> subscribe to such events rather than
            poll the SCIM resource.  This division of responsibility --
            state of record in the provisioning layer, change notification
            in the signaling layer -- is deliberate and follows the design
            guidance that shaped this extension
            (<xref target="oos-trust"/>).
          </t>
        </section>

        <section anchor="access-reviews" numbered="true">
          <name>Use in Access Reviews</name>
          <t>
            Because "lifecycleState" is an ordinary SCIM attribute, it
            participates in SCIM filtering
            (<xref target="RFC7644" section="3.4.2.2" sectionFormat="of"/>).
            For example, an access-review process can enumerate all agents
            frozen pending investigation with:
          </t>
          <figure anchor="fig-filter-quarantined">
            <name>Filtering for quarantined agents</name>
            <artwork type="ascii-art"><![CDATA[
GET /Agents?filter=urn:ietf:params:scim:schemas:extension:agent:
    2.0:Governance:lifecycleState.state eq "quarantined"
]]></artwork>
          </figure>
          <t>
            or all agents whose validity window has lapsed but whose state
            has not been reconciled:
          </t>
          <figure anchor="fig-filter-lapsed">
            <name>Filtering for agents past their validity window</name>
            <artwork type="ascii-art"><![CDATA[
GET /Agents?filter=urn:ietf:params:scim:schemas:extension:agent:
    2.0:Governance:validTo lt "2026-07-01T00:00:00Z" and
    urn:ietf:params:scim:schemas:extension:agent:
    2.0:Governance:lifecycleState.state eq "active"
]]></artwork>
          </figure>
          <t>
            Line breaks within the filter values above are for display
            purposes only.
          </t>
          <t>
            Service providers implementing this extension <bcp14>SHOULD</bcp14> support
            filtering on "lifecycleState.state", "validFrom", and
            "validTo".
          </t>
        </section>
      </section>

      <section anchor="autonomylevel" numbered="true">
        <name>autonomyLevel</name>
        <t>
          A string classifying the degree of human oversight under which the
          agent operates.  Canonical values:
        </t>
        <dl newline="true" spacing="normal">
          <dt>autonomous</dt>
          <dd>
            The agent initiates and completes actions without a human in the
            loop.
          </dd>
          <dt>semiAutonomous</dt>
          <dd>
            The agent acts independently within a bounded task but requires
            human initiation or checkpoint approval.
          </dd>
          <dt>supervised</dt>
          <dd>
            A human reviews or approves the agent's individual actions.
          </dd>
        </dl>
        <t>
          This attribute is informational classification metadata recorded
          at provisioning time.  It is NOT an authorization control, <bcp14>MUST</bcp14>
          NOT be treated as authoritative unless validated by local policy
          or another trusted governance process, and <bcp14>MUST NOT</bcp14> be used as the
          sole input to an access decision; see <xref target="security"/>.
          The value set is intentionally protocol-neutral so that the same
          classification can be conveyed in other contexts (for example as a
          claim value or workload attestation attribute).  Regulatory
          frameworks that classify AI systems partly by degree of human
          oversight, such as the EU AI Act, are an anticipated consumer of
          this classification.
        </t>
        <t>
          Mutability is "readWrite".  Changes to "autonomyLevel" <bcp14>SHOULD</bcp14> be
          audited.
        </t>
      </section>

      <section anchor="validity" numbered="true">
        <name>validFrom and validTo</name>
        <t>
          Two dateTime (<xref target="RFC3339"/>) attributes bounding the
          period during which the agentic identity is intended to operate,
          analogous to the notBefore and notAfter fields of an X.509
          certificate.
        </t>
        <dl newline="true" spacing="normal">
          <dt>validFrom</dt>
          <dd>The instant from which the agent may be activated.
              <bcp14>OPTIONAL</bcp14>.</dd>
          <dt>validTo</dt>
          <dd>The instant after which the agent's identity is no longer
              valid.  <bcp14>OPTIONAL</bcp14>.</dd>
        </dl>
        <t>
          A service provider <bcp14>SHOULD</bcp14> treat an agent outside its validity
          window as if its lifecycle state were "suspended", regardless of
          the stored state value, and <bcp14>SHOULD NOT</bcp14> issue new credentials or
          tokens for it.  The stored "lifecycleState.state" value is not
          modified by the passage of time; the validity window is evaluated
          at each authentication or issuance decision.
        </t>
      </section>

      <section anchor="creddiscovery" numbered="true">
        <name>credentialDiscoveryUri</name>
        <t>
          A SCIM reference of type "external" containing a URI at which an
          agent-specific discovery document describing the agent's supported
          credential binding methods can be retrieved.
        </t>
        <t>
          Embedding credential binding metadata (method, certificate
          thumbprint, issuer) directly in the provisioning record is
          brittle: an agent may support multiple binding options and these
          change over time, whereas a provisioning record is comparatively
          static.  A discovery document, analogous in role to OAuth
          authorization server metadata, allows the binding information to
          evolve without SCIM modification traffic and to be verified
          independently of the provisioning channel.
        </t>
        <t>
          The format of the discovery document is out of scope for this
          document.  The URI <bcp14>SHOULD</bcp14> use the "https" scheme, and the document
          <bcp14>SHOULD</bcp14> be served from an authority associated with the agent's
          operator.  A service provider <bcp14>MUST</bcp14> validate that the value refers
          to an authority authorized for the agent or its operator before
          relying on it.  Requirements on changes to this attribute are
          given in <xref target="security"/>.
        </t>
      </section>
    </section>

    <section anchor="example" numbered="true">
      <name>Example</name>
      <t>
        The following is a non-normative example of an Agent resource using
        this extension, in JSON <xref target="RFC8259"/>.
      </t>
      <sourcecode type="json"><![CDATA[
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Agent",
    "urn:ietf:params:scim:schemas:extension:agent:2.0:Governance"
  ],
  "id": "95cfaafb-0827-4c60-8236-523ad04b3cba",
  "displayName": "Invoice review agent",
  "agentUserName": "invoice-review-agent",
  "active": true,
  "owners": [
    {
      "value": "2819c223-7f76-453a-919d-413861904646",
      "$ref": "https://example.com/v2/Users/2819c223-...",
      "displayName": "Finance Platform Team"
    }
  ],
  "urn:ietf:params:scim:schemas:extension:agent:2.0:Governance": {
    "lifecycleState": {
      "state": "active",
      "transitionedAt": "2026-07-01T09:00:00Z",
      "transitionedBy": {
        "value": "2819c223-7f76-453a-919d-413861904646",
        "$ref": "https://example.com/v2/Users/2819c223-..."
      }
    },
    "autonomyLevel": "semiAutonomous",
    "validFrom": "2026-07-01T00:00:00Z",
    "validTo": "2026-12-31T23:59:59Z",
    "credentialDiscoveryUri":
      "https://example.com/.well-known/agent/invoice-review-agent"
  },
  "meta": {
    "resourceType": "Agent"
  }
}
]]></sourcecode>
    </section>

    <section anchor="out-of-scope" numbered="true">
      <name>Out of Scope</name>
      <t>
        The following concerns were considered during the development of
        this extension and deliberately excluded.  They are enumerated here
        so that implementers do not expect this extension to address them
        and so that the rationale is preserved.
      </t>

      <section anchor="oos-trust" numbered="true">
        <name>Trust Posture and Risk Level</name>
        <t>
          An earlier proposal included an "effectiveTrustLevel" attribute
          with values such as high, medium, and low.  It is excluded for two
          reasons identified in WG discussion.  First, risk is relative to
          each participant in a multi-party ecosystem; a categorical level
          has no shared meaning across administrative domains without a
          conformance contract that a schema attribute cannot supply.
          Second, SCIM is a provisioning protocol with polling-scale latency
          and is not suited to conveying risk posture, which changes in real
          time.  Changes in an agent's trust or risk posture are better
          conveyed as security events using the Shared Signals Framework
          <xref target="SSF"/>, to which relying parties can subscribe.
        </t>
      </section>

      <section anchor="oos-tenant" numbered="true">
        <name>Tenant Scope and Delegation Scope</name>
        <t>
          Attributes describing where an agent may operate ("tenantScope")
          and under whose delegated authority ("delegationScope") address
          real enterprise concerns but are not SCIM-local: to be useful they
          must be legible across provisioning, federation, and authorization
          protocols.  Delegation relationships at token time are already
          addressed by the "act" and "may_act" claims of OAuth 2.0 Token
          Exchange <xref target="RFC8693"/>.  Cross-system workload identity
          context is the subject of the IETF WIMSE working group
          <xref target="WIMSECharter"/>.  These concerns should be pursued
          in those venues; a SCIM binding can follow once cross-protocol
          semantics exist.
        </t>
      </section>

      <section anchor="oos-authz" numbered="true">
        <name>Tool Permissions and Action-Level Authorization</name>
        <t>
          Attributes enumerating permitted or denied actions per tool are
          authorization policy, not provisioning metadata.  They duplicate
          OAuth scope semantics and the responsibilities of policy engines,
          and deny-list constructions in particular create false assurance
          through incomplete enumeration.  Fine-grained agent authorization
          belongs in the authorization layer.  The deny-by-default guidance
          retained from this discussion appears in
          <xref target="security"/>.
        </t>
      </section>

      <section anchor="oos-conflict" numbered="true">
        <name>Conflict Resolution Policy</name>
        <t>
          A per-resource attribute directing how conflicts between authority
          sources are resolved would embed policy-engine semantics in an
          identity record and would depend on attribute sets that this
          extension does not define.  Deterministic conflict handling is
          addressed as implementation guidance in
          <xref target="security"/>; a SCIM-wide profile would be the
          appropriate vehicle for anything normative.
        </t>
      </section>
    </section>

    <section anchor="security" numbered="true">
      <name>Security Considerations</name>
      <t>
        The security considerations of <xref target="RFC7644"/> and
        <xref target="I-D.wzdk-scim-agent-resource"/> apply.  In addition:
      </t>
      <dl newline="true" spacing="normal">
        <dt>Client-supplied governance metadata.</dt>
        <dd>
          A service provider <bcp14>MUST NOT</bcp14> treat client-supplied governance
          metadata as authoritative for security decisions without
          validation.  In particular, "autonomyLevel" is descriptive
          classification, <bcp14>MUST NOT</bcp14> be treated as authoritative unless
          validated by local policy or another trusted governance process,
          and <bcp14>MUST NOT</bcp14> be used as the sole input to an authorization
          decision.
        </dd>
        <dt>Trust chain through owners.</dt>
        <dd>
          The Agent core schema permits "owners.$ref" to reference another
          Agent, enabling orchestrator-to-subagent relationships.  Where
          comparable authority or trust metadata is available, a child agent
          <bcp14>SHOULD NOT</bcp14> be provisioned with, or elevated to, broader effective
          authority than the Agent(s) responsible for it, unless local
          policy explicitly permits the elevation and the decision is
          audited.  Without this constraint, a lower-authority orchestrator
          can escalate its own effective authority by provisioning a
          higher-authority child.
        </dd>
        <dt>Lifecycle transitions and outstanding credentials.</dt>
        <dd>
          A specification of lifecycle state is incomplete without defining
          its effect on live access.  On transition to "suspended",
          outstanding tokens and sessions <bcp14>SHOULD</bcp14> be revoked or suspended.
          On transition to "quarantined" or "archived", outstanding tokens
          and sessions <bcp14>MUST</bcp14> be revoked, and for "quarantined" the resource
          <bcp14>MUST NOT</bcp14> be modifiable except by the authorized review process.
        </dd>
        <dt>Terminal state record preservation.</dt>
        <dd>
          When an agent reaches the "archived" state, the service provider
          <bcp14>SHOULD</bcp14> retain the resource in a read-only form rather than
          deleting it, preserving the audit trail linking past actions to
          the agent identity.  Deployments subject to data-minimization
          obligations should reconcile retention duration with those
          obligations rather than defaulting to deletion.
        </dd>
        <dt>Credential discovery changes.</dt>
        <dd>
          Changes to "credentialDiscoveryUri" alter where relying parties
          learn the agent's credential bindings and are therefore
          security-sensitive.  Such changes after activation <bcp14>MUST</bcp14> require
          administrative approval, <bcp14>MUST</bcp14> be policy-controlled and audited,
          and <bcp14>SHOULD</bcp14> trigger revocation of outstanding tokens.
          Implementations <bcp14>SHOULD</bcp14> prevent changes that would have the effect
          of silently downgrading the agent from a stronger binding method
          to a weaker one.  Consumers <bcp14>MUST NOT</bcp14> automatically dereference
          arbitrary "credentialDiscoveryUri" values from privileged network
          locations without scheme validation, server-side request forgery
          protections, and local trust policy.
        </dd>
        <dt>Autonomous agents.</dt>
        <dd>
          Deployments <bcp14>SHOULD</bcp14> apply stricter default controls to agents with
          "autonomyLevel" of "autonomous" than to supervised agents, for
          example shorter credential lifetimes, narrower permitted scopes,
          or additional approval requirements, reflecting the reduced
          opportunity for human interruption of anomalous behavior.
        </dd>
        <dt>Deny by default.</dt>
        <dd>
          Where an agent's effective authority is derived from multiple
          sources (group memberships, lifecycle state, owner status,
          credential validity) and those sources conflict or cannot be
          resolved, implementations <bcp14>SHOULD</bcp14> apply the most restrictive
          interpretation, and the default decision when a conflict cannot
          be resolved <bcp14>SHOULD</bcp14> be to deny.
        </dd>
      </dl>
    </section>

    <section anchor="privacy" numbered="true">
      <name>Privacy Considerations</name>
      <t>
        Governance metadata reveals operational structure.  The combination
        of "autonomyLevel", validity windows, and lifecycle history exposes
        how an organization deploys and supervises its agents; a
        "quarantined" state in particular signals an ongoing security
        investigation.  Service providers <bcp14>SHOULD</bcp14> apply the same access
        controls to this extension's attributes as to other sensitive
        provisioning metadata, and <bcp14>SHOULD</bcp14> consider excluding
        "lifecycleState.reason" from responses to callers without an
        administrative need to know.
      </t>
      <t>
        The "credentialDiscoveryUri" value, and the discovery documents it
        points to, can enumerate an organization's agent fleet if the
        documents are world-readable at predictable locations.  Deployments
        for which agent inventory is sensitive <bcp14>SHOULD</bcp14> authenticate access
        to agent discovery documents.
      </t>
      <t>
        Retention of "archived" records (<xref target="security"/>)
        preserves audit capability but must be reconciled with applicable
        data-minimization obligations; where an agent record embeds personal
        data of its human owners, deployments <bcp14>SHOULD</bcp14> prefer redacting that
        personal data over deleting the agent record.
      </t>
    </section>

    <section anchor="iana" numbered="true">
      <name>IANA Considerations</name>
      <t>
        When published as an RFC, IANA is requested to add the following
        entry to the "SCIM Schema URIs for Data Resources" registry
        established by <xref target="RFC7643"/>:
      </t>
      <dl newline="false" spacing="compact">
        <dt>URN:</dt>
        <dd>urn:ietf:params:scim:schemas:extension:agent:2.0:Governance</dd>
        <dt>Name:</dt>
        <dd>Agent Governance</dd>
        <dt>Reference:</dt>
        <dd>This memo, <xref target="schema"/></dd>
      </dl>
    </section>

  </middle>

  <back>

    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7643.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7644.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.wzdk-scim-agent-resource.xml"/>
      </references>

      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8693.xml"/>

        <reference anchor="ISO24760-1">
          <front>
            <title>IT Security and Privacy -- A framework for identity
                   management -- Part 1: Terminology and concepts</title>
            <author>
              <organization>International Organization for
                            Standardization</organization>
            </author>
            <date month="May" year="2019"/>
          </front>
          <seriesInfo name="ISO/IEC" value="24760-1:2019"/>
        </reference>

        <reference anchor="OPCommands"
                   target="https://openid.net/specs/openid-provider-commands-1_0.html">
          <front>
            <title>OpenID Provider Commands 1.0 (draft 02)</title>
            <author>
              <organization>OpenID Foundation</organization>
            </author>
            <date day="25" month="September" year="2025"/>
          </front>
        </reference>

        <reference anchor="SSF"
                   target="https://openid.net/specs/openid-sharedsignals-framework-1_0.html">
          <front>
            <title>OpenID Shared Signals Framework Specification 1.0</title>
            <author>
              <organization>OpenID Foundation</organization>
            </author>
            <date day="29" month="August" year="2025"/>
          </front>
        </reference>

        <reference anchor="WIMSECharter"
                   target="https://datatracker.ietf.org/wg/wimse/about/">
          <front>
            <title>Workload Identity in Multi System Environments (WIMSE)
                   Charter</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
      </references>
    </references>

    <section anchor="full-schema" numbered="true">
      <name>Full Schema Representation</name>
      <t>
        The following is a non-normative representation of the extension
        schema as returned from the "/Schemas" endpoint.
      </t>
      <sourcecode type="json"><![CDATA[
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Schema"],
  "id":
   "urn:ietf:params:scim:schemas:extension:agent:2.0:Governance",
  "name": "AgentGovernance",
  "description": "Governance metadata for Agent resources.",
  "attributes": [
    {
      "name": "lifecycleState",
      "type": "complex",
      "multiValued": false,
      "description": "Operational lifecycle state of the agent.",
      "required": true,
      "mutability": "readWrite",
      "returned": "default",
      "subAttributes": [
        {
          "name": "state",
          "type": "string",
          "multiValued": false,
          "required": true,
          "caseExact": true,
          "canonicalValues": ["established", "active",
            "suspended", "quarantined", "archived"],
          "mutability": "readWrite",
          "returned": "default",
          "uniqueness": "none"
        },
        {
          "name": "reason",
          "type": "string",
          "multiValued": false,
          "required": false,
          "caseExact": false,
          "mutability": "readWrite",
          "returned": "default",
          "uniqueness": "none"
        },
        {
          "name": "transitionedAt",
          "type": "dateTime",
          "multiValued": false,
          "required": false,
          "mutability": "readOnly",
          "returned": "default",
          "uniqueness": "none"
        },
        {
          "name": "transitionedBy",
          "type": "complex",
          "multiValued": false,
          "required": false,
          "mutability": "readOnly",
          "returned": "default",
          "uniqueness": "none",
          "subAttributes": [
            {
              "name": "value",
              "type": "string",
              "multiValued": false,
              "required": true,
              "caseExact": false,
              "mutability": "readOnly",
              "returned": "default",
              "uniqueness": "none"
            },
            {
              "name": "$ref",
              "type": "reference",
              "referenceTypes": ["User", "Agent"],
              "multiValued": false,
              "required": false,
              "caseExact": true,
              "mutability": "readOnly",
              "returned": "default",
              "uniqueness": "none"
            }
          ]
        }
      ]
    },
    {
      "name": "autonomyLevel",
      "type": "string",
      "multiValued": false,
      "description": "Degree of human oversight.",
      "required": false,
      "caseExact": true,
      "canonicalValues": ["autonomous", "semiAutonomous",
        "supervised"],
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none"
    },
    {
      "name": "validFrom",
      "type": "dateTime",
      "multiValued": false,
      "description": "Start of the operational validity window.",
      "required": false,
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none"
    },
    {
      "name": "validTo",
      "type": "dateTime",
      "multiValued": false,
      "description": "End of the operational validity window.",
      "required": false,
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none"
    },
    {
      "name": "credentialDiscoveryUri",
      "type": "reference",
      "referenceTypes": ["external"],
      "multiValued": false,
      "description": "Agent credential discovery document URI.",
      "required": false,
      "caseExact": true,
      "mutability": "readWrite",
      "returned": "default",
      "uniqueness": "none"
    }
  ],
  "meta": {
    "resourceType": "Schema"
  }
}
]]></sourcecode>
    </section>

    <section anchor="changes" numbered="true">
      <name>Changes From Earlier Versions</name>
      <t>This is the initial version of this draft.</t>
    </section>

    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>
        This document grew out of review discussion of
        <xref target="I-D.wzdk-scim-agent-resource"/> on the SCIM WG mailing
        list.  The author thanks Danny Zollner and Pamela Dingle for
        detailed responses that shaped the scope of this extension, in
        particular the requirement to ground the lifecycle value set in
        ISO/IEC 24760-1, the credential discovery document approach, and the
        identification of concerns better addressed via the Shared Signals
        Framework and the WIMSE working group.
      </t>
    </section>

  </back>
</rfc>
