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