Skip to main content

CrowdyStudioAgentPolicy

Management's Agentic Crowdy Studio policy publication. EFFECTIVE values are the fail-closed platform/app intersection; an app can never widen platform models, tools, modes, risks, budgets, retention, or privacy. Game API runtime enforcement still requires a fresh validated replica.

type CrowdyStudioAgentPolicy {
kind: CrowdyStudioAgentPolicyKind!
appId: BigInt
enabled: Boolean!
killSwitch: Boolean!
operatorKillSwitch: Boolean!
disableReasonCode: String
disableReason: String
allowedModelIds: [String!]!
allowedToolNames: [String!]!
allowedModes: [CrowdyStudioAgentMode!]!
allowedRiskClasses: [CrowdyStudioAgentRiskClass!]!
capabilityGaps: [CrowdyStudioAgentCapabilityGap!]!
turnLimits: CrowdyStudioAgentTurnLimits!
sessionLimits: CrowdyStudioAgentSessionLimits!
playerDayLimits: CrowdyStudioAgentPlayerDayLimits!
retention: CrowdyStudioAgentRetentionPolicy!
privacy: CrowdyStudioAgentPrivacyPolicy!
funding: CrowdyStudioAgentFundingPolicy!
revision: BigInt!
platformRevision: BigInt!
appRevision: BigInt!
effectiveRevision: String!
createdAt: DateTime!
updatedAt: DateTime!
}

Fields

CrowdyStudioAgentPolicy.kind ● CrowdyStudioAgentPolicyKind! non-null enum

PLATFORM, APP, or EFFECTIVE projection.

CrowdyStudioAgentPolicy.appId ● BigInt scalar

App id for APP/EFFECTIVE policy; null for platform policy.

CrowdyStudioAgentPolicy.enabled ● Boolean! non-null scalar

Whether this Management policy layer/publication is enabled. EFFECTIVE is true only when all required layers are enabled and no kill applies; it does not attest that Game API has synchronized.

CrowdyStudioAgentPolicy.killSwitch ● Boolean! non-null scalar

Layer kill state. EFFECTIVE is true when platform, operator-app, or app kill is active.

CrowdyStudioAgentPolicy.operatorKillSwitch ● Boolean! non-null scalar

Operator-only per-app kill state. App policy mutations cannot clear or alter it.

CrowdyStudioAgentPolicy.disableReasonCode ● String scalar

Stable disable/kill reason code (for example AGENT_OPERATOR_KILLED); null when enabled.

CrowdyStudioAgentPolicy.disableReason ● String scalar

Safe operator/app reason text; never includes provider bodies or secrets.

CrowdyStudioAgentPolicy.allowedModelIds ● [String!]! non-null scalar

Exact model ids allowed by this layer/intersection. Empty denies all models.

CrowdyStudioAgentPolicy.allowedToolNames ● [String!]! non-null scalar

Exact crowdy.agent-tools/1 logical tool names allowed by this layer/intersection. Empty means opposite things at the two layers: on PLATFORM it denies every tool, because the platform layer is the ceiling; on APP it expresses no narrowing, so EFFECTIVE inherits the platform list unchanged. An app therefore cannot reach a tool the platform has not published, and an operator who later adds one widens every app that names none.

CrowdyStudioAgentPolicy.allowedModes ● [CrowdyStudioAgentMode!]! non-null enum

Human-selectable modes allowed by this layer/intersection.

CrowdyStudioAgentPolicy.allowedRiskClasses ● [CrowdyStudioAgentRiskClass!]! non-null enum

Allowed tool risk classes. Required approval classes remain approval-gated even when listed. Empty follows the same rule as allowedToolNames: deny-all on PLATFORM, inherit-the-platform on APP. An EFFECTIVE policy can never be enabled with an empty list, because crowdy.studio-agent-policy/1 requires a non-empty risk intersection; that case reports AGENT_SCOPE_DENIED.

CrowdyStudioAgentPolicy.capabilityGaps ● [CrowdyStudioAgentCapabilityGap!]! non-null object

Allowed modes that cannot do what the mode is for, derived from this layer's own tool and risk allowlists. Read this on the EFFECTIVE projection: an empty list is the only thing that entitles a caller to report an unblocked chain, because "enabled with a null disableReasonCode" is true of a dock whose BUILD mode has no tool it may call. On PLATFORM and APP it describes that layer in isolation and is not a claim about the intersection.

CrowdyStudioAgentPolicy.turnLimits ● CrowdyStudioAgentTurnLimits! non-null object

Per-turn hard limits.

CrowdyStudioAgentPolicy.sessionLimits ● CrowdyStudioAgentSessionLimits! non-null object

Per-session hard limits.

CrowdyStudioAgentPolicy.playerDayLimits ● CrowdyStudioAgentPlayerDayLimits! non-null object

Per-player UTC-day and concurrency hard limits.

CrowdyStudioAgentPolicy.retention ● CrowdyStudioAgentRetentionPolicy! non-null object

Redacted-data retention limits.

CrowdyStudioAgentPolicy.privacy ● CrowdyStudioAgentPrivacyPolicy! non-null object

Locked provider privacy and private-source controls.

CrowdyStudioAgentPolicy.funding ● CrowdyStudioAgentFundingPolicy! non-null object

Platform-funded pilot/future billing seam.

CrowdyStudioAgentPolicy.revision ● BigInt! non-null scalar

Revision of this stored layer; zero means no app row exists yet.

CrowdyStudioAgentPolicy.platformRevision ● BigInt! non-null scalar

Platform revision used by an EFFECTIVE projection.

CrowdyStudioAgentPolicy.appRevision ● BigInt! non-null scalar

App revision used by an EFFECTIVE projection; zero means missing app policy.

CrowdyStudioAgentPolicy.effectiveRevision ● String! non-null scalar

Composite Management revision, formatted p<platform revision>:a<app revision>. Game API pins it only after a successful fresh replica pull.

CrowdyStudioAgentPolicy.createdAt ● DateTime! non-null scalar

Policy row creation time or projection time.

CrowdyStudioAgentPolicy.updatedAt ● DateTime! non-null scalar

Last policy change time or projection time.

Returned By

cpCrowdyStudioAgentPlatformPolicy query ● cpSetCrowdyStudioAgentAppKill mutation ● cpSetCrowdyStudioAgentPlatformPolicy mutation ● crowdyStudioAgentEffectivePolicy query ● crowdyStudioAgentPolicy query ● setCrowdyStudioAgentPolicy mutation