@highflame/policy 2.2.29 → 2.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_schemas/agent_ops/context.json +1272 -439
- package/_schemas/agent_ops/schema.cedarschema +24 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_a2a_cross_origin.cedar +92 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_a2a_escalation.cedar +99 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_a2a_identity_enforcement.cedar +101 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_a2a_inter_agent_injection.cedar +120 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_claude_block_injection.cedar +30 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_defaults.cedar +122 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_multi_agent_safety.cedar +164 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_identity_multi_agent_trust.cedar +143 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_security_data_pipeline.cedar +45 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_security_defaults.cedar +164 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_security_malicious_package.cedar +59 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_security_param_validation.cedar +119 -0
- package/_schemas/agent_ops/templates/ported/agent-security/agent_security_tool_risk.cedar +66 -0
- package/_schemas/agent_ops/templates/ported/code-security/agent_identity_a2a_supply_chain.cedar +101 -0
- package/_schemas/agent_ops/templates/ported/code-security/agent_security_code_agent.cedar +130 -0
- package/_schemas/agent_ops/templates/ported/code-security/agent_security_code_agent_supply_chain.cedar +116 -0
- package/_schemas/agent_ops/templates/ported/code-security/security_code_agent_encoding.cedar +51 -0
- package/_schemas/agent_ops/templates/ported/code-security/security_code_agent_path_security.cedar +149 -0
- package/_schemas/agent_ops/templates/ported/content-safety/trust_safety_chat_assistant.cedar +58 -0
- package/_schemas/agent_ops/templates/ported/content-safety/trust_safety_defaults.cedar +111 -0
- package/_schemas/agent_ops/templates/ported/content-safety/trust_safety_semantic.cedar +78 -0
- package/_schemas/agent_ops/templates/ported/content-safety/trust_safety_toxicity.cedar +71 -0
- package/_schemas/agent_ops/templates/ported/data-protection/data_protection_advanced_secrets.cedar +74 -0
- package/_schemas/agent_ops/templates/ported/data-protection/data_protection_code_block_write_secrets.cedar +26 -0
- package/_schemas/agent_ops/templates/ported/data-protection/data_protection_data_pipeline.cedar +52 -0
- package/_schemas/agent_ops/templates/ported/data-protection/data_protection_defaults.cedar +57 -0
- package/_schemas/agent_ops/templates/ported/data-protection/privacy_advanced_pii.cedar +465 -0
- package/_schemas/agent_ops/templates/ported/data-protection/privacy_defaults.cedar +164 -0
- package/_schemas/agent_ops/templates/ported/data-protection/privacy_pii_model.cedar +90 -0
- package/_schemas/agent_ops/templates/ported/organization/organization_deny_baseline.cedar +22 -0
- package/_schemas/agent_ops/templates/ported/organization/organization_team_permissions.cedar +38 -0
- package/_schemas/agent_ops/templates/ported/threat-detection/security_advanced_block_critical_severity.cedar +30 -0
- package/_schemas/agent_ops/templates/ported/threat-detection/security_chat_assistant.cedar +47 -0
- package/_schemas/agent_ops/templates/ported/threat-detection/security_data_pipeline_block_injection.cedar +31 -0
- package/_schemas/agent_ops/templates/ported/threat-detection/security_injection.cedar +82 -0
- package/_schemas/agent_ops/templates/ported/threat-detection/security_patterns.cedar +72 -0
- package/_schemas/agent_ops/templates/ported/threat-detection/semantic_defaults.cedar +155 -0
- package/_schemas/agent_ops/templates/ported/tool-permissioning/tools_bash_operation_classes.cedar +142 -0
- package/_schemas/agent_ops/templates/ported/tool-permissioning/tools_block_shell.cedar +40 -0
- package/_schemas/agent_ops/templates/ported/tool-permissioning/tools_defaults.cedar +76 -0
- package/_schemas/agent_ops/templates/ported/tool-permissioning/tools_mcp_server_allowlist.cedar +41 -0
- package/_schemas/agent_ops/templates/ported/tool-permissioning/tools_mcp_tool_permissions.cedar +103 -0
- package/_schemas/agent_ops/templates/templates.json +752 -8
- package/_schemas/ai_gateway/context.json +2 -2
- package/_schemas/guardrails/context.json +2 -2
- package/_schemas/guardrails/templates/templates.json +6 -1
- package/_schemas/overwatch/context.json +3 -3
- package/dist/aarm-annotations.gen.js +1 -1
- package/dist/agent_ops-context.gen.d.ts +5 -1
- package/dist/agent_ops-context.gen.js +8 -0
- package/dist/agent_ops-defaults.gen.js +5168 -8
- package/dist/guardrails-defaults.gen.js +6 -1
- package/dist/overwatch-defaults.gen.js +109 -0
- package/dist/service-schemas.gen.d.ts +1 -1
- package/dist/service-schemas.gen.js +48 -12
- package/package.json +1 -1
|
@@ -2,213 +2,6 @@
|
|
|
2
2
|
"service": "agent_ops",
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"description": "AgentOps unified agent guardrail policy enforcement — superset of Guardrails, Overwatch, and AI Gateway",
|
|
5
|
-
"shared": {
|
|
6
|
-
"session_keys": [
|
|
7
|
-
{
|
|
8
|
-
"key": "session_pii_detected",
|
|
9
|
-
"type": "boolean",
|
|
10
|
-
"required": false,
|
|
11
|
-
"description": "Whether PII was detected in any previous turn of the session"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"key": "session_pii_types",
|
|
15
|
-
"type": "array",
|
|
16
|
-
"required": false,
|
|
17
|
-
"description": "PII types detected across the session (accumulated)"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"key": "session_secrets_detected",
|
|
21
|
-
"type": "boolean",
|
|
22
|
-
"required": false,
|
|
23
|
-
"description": "Whether secrets were detected in any previous turn of the session"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"key": "session_secret_types",
|
|
27
|
-
"type": "array",
|
|
28
|
-
"required": false,
|
|
29
|
-
"description": "Secret types detected across the session (accumulated)"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"key": "session_injection_detected",
|
|
33
|
-
"type": "boolean",
|
|
34
|
-
"required": false,
|
|
35
|
-
"description": "Whether prompt injection was detected in any previous turn of the session"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"key": "session_command_injection",
|
|
39
|
-
"type": "boolean",
|
|
40
|
-
"required": false,
|
|
41
|
-
"description": "Whether command injection was detected in any previous turn of the session"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"key": "session_threat_turns",
|
|
45
|
-
"type": "number",
|
|
46
|
-
"required": false,
|
|
47
|
-
"description": "Number of turns in the session where threats were detected"
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
"key": "session_max_injection_score",
|
|
51
|
-
"type": "number",
|
|
52
|
-
"required": false,
|
|
53
|
-
"description": "Highest prompt injection score seen in any turn of the session (0-100). Use for tiered responses: >75 hard block, >50 restrict permissions",
|
|
54
|
-
"range": "0-100"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"key": "session_max_jailbreak_score",
|
|
58
|
-
"type": "number",
|
|
59
|
-
"required": false,
|
|
60
|
-
"description": "Highest jailbreak detection score seen in any turn of the session (0-100)",
|
|
61
|
-
"range": "0-100"
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"key": "session_max_command_injection_score",
|
|
65
|
-
"type": "number",
|
|
66
|
-
"required": false,
|
|
67
|
-
"description": "Highest command injection score seen in any turn of the session (0-100)",
|
|
68
|
-
"range": "0-100"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"key": "session_max_pii_score",
|
|
72
|
-
"type": "number",
|
|
73
|
-
"required": false,
|
|
74
|
-
"description": "Highest PII risk score seen in any turn of the session (0-100)",
|
|
75
|
-
"range": "0-100"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"key": "session_max_secret_score",
|
|
79
|
-
"type": "number",
|
|
80
|
-
"required": false,
|
|
81
|
-
"description": "Highest secret detection score seen in any turn of the session (0-100)",
|
|
82
|
-
"range": "0-100"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"key": "session_cumulative_risk_score",
|
|
86
|
-
"type": "number",
|
|
87
|
-
"required": false,
|
|
88
|
-
"description": "Sum of per-turn risk scores across the session. Catches death-by-a-thousand-cuts where no single turn is high but cumulative risk is significant"
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"key": "session_max_sensitivity",
|
|
92
|
-
"type": "string",
|
|
93
|
-
"required": false,
|
|
94
|
-
"description": "Highest data-sensitivity tier observed across the session (e.g. 'public', 'internal', 'confidential', 'restricted')"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"key": "session_original_request",
|
|
98
|
-
"type": "string",
|
|
99
|
-
"required": false,
|
|
100
|
-
"description": "The session's first user request, retained for drift / goal-hijack policies that compare later turns against the original intent"
|
|
101
|
-
}
|
|
102
|
-
],
|
|
103
|
-
"agent_identity_keys": [
|
|
104
|
-
{
|
|
105
|
-
"key": "agent_id",
|
|
106
|
-
"type": "string",
|
|
107
|
-
"required": false,
|
|
108
|
-
"description": "Unique identifier of the authenticated AI agent making this request. Empty string for human user requests."
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
"key": "agent_type",
|
|
112
|
-
"type": "string",
|
|
113
|
-
"required": false,
|
|
114
|
-
"description": "Type of the authenticated agent: 'orchestrator', 'autonomous', 'tool_agent', or 'human_proxy'. Empty string for human users."
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"key": "agent_trust_level",
|
|
118
|
-
"type": "string",
|
|
119
|
-
"required": false,
|
|
120
|
-
"description": "Trust level of the authenticated agent: 'first_party', 'verified_third_party', or 'unverified'."
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"key": "agent_framework",
|
|
124
|
-
"type": "string",
|
|
125
|
-
"required": false,
|
|
126
|
-
"description": "Framework or SDK the agent is built with (e.g., 'claude-code', 'langchain', 'crewai', 'autogen')."
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"key": "agent_publisher",
|
|
130
|
-
"type": "string",
|
|
131
|
-
"required": false,
|
|
132
|
-
"description": "Organization that published the agent (e.g., 'anthropic', 'internal', 'acme-corp')."
|
|
133
|
-
}
|
|
134
|
-
],
|
|
135
|
-
"flow_label_keys": [
|
|
136
|
-
{
|
|
137
|
-
"key": "flow_confidentiality",
|
|
138
|
-
"type": "string",
|
|
139
|
-
"required": false,
|
|
140
|
-
"description": "Confidentiality tier of the data this action carries or targets (ADR 0020): 'public', 'internal', 'confidential', 'restricted', or 'unknown'. Shares the ladder with session_max_sensitivity but is a per-value fact, not a session scalar. 'unknown' MUST NOT be treated as 'public' — guard with has and let policy DENY/STEP_UP/DEFER per flow_resolution_status."
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
"key": "flow_integrity",
|
|
144
|
-
"type": "string",
|
|
145
|
-
"required": false,
|
|
146
|
-
"description": "Integrity/influence tier of the data this action carries (ADR 0020): 'trusted', 'untrusted', 'mixed', or 'unknown'. Orthogonal to confidentiality: untrusted content may inform a pure analysis but MUST NOT authorize a side-effecting sink. Least-trusted contributor wins on join."
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"key": "flow_data_types",
|
|
150
|
-
"type": "array",
|
|
151
|
-
"required": false,
|
|
152
|
-
"description": "Sensitive data categories present in the value (ADR 0020), e.g. 'pii', 'secrets', 'source_code', 'financial', 'health'. Union of all contributing inputs. Set<String>."
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
"key": "flow_compartments",
|
|
156
|
-
"type": "array",
|
|
157
|
-
"required": false,
|
|
158
|
-
"description": "Compartments the value belongs to (ADR 0020), e.g. 'tenant:acme', 'customer:123', 'project:x'. Union of all contributing inputs — cross-compartment composition is expressible by cardinality. Set<String>."
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"key": "flow_resolution_status",
|
|
162
|
-
"type": "string",
|
|
163
|
-
"required": false,
|
|
164
|
-
"description": "How the flow label was resolved (ADR 0020): 'known', 'inferred', 'unknown', or 'conflicted'. Policy authors choose the posture for 'unknown' per sink (DENY external, STEP_UP, DEFER while a classifier runs, or allow-and-record). Never silently resolves to public."
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
"key": "flow_origins",
|
|
168
|
-
"type": "array",
|
|
169
|
-
"required": false,
|
|
170
|
-
"description": "Origin kinds that produced or influenced the value (ADR 0020): 'mcp_tool_result', 'model', 'file', 'database', 'user'. Provenance fact for lineage-aware policy. Set<String>."
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
"key": "flow_sink",
|
|
174
|
-
"type": "string",
|
|
175
|
-
"required": false,
|
|
176
|
-
"description": "Logical destination this action releases the value to (ADR 0020), e.g. 'external_model', 'local_model', 'external_mcp', 'trusted_mcp', 'user_secure_output', 'public_network', 'file'. The 'where' half of a flow decision — pair with flow_confidentiality/flow_integrity."
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
"key": "flow_sink_is_external",
|
|
180
|
-
"type": "boolean",
|
|
181
|
-
"required": false,
|
|
182
|
-
"description": "Whether the destination is outside the tenant trust boundary (ADR 0020). Lets a single policy express 'confidential data MUST NOT leave to any external sink' without enumerating sink ids."
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
"key": "flow_sink_effects",
|
|
186
|
-
"type": "array",
|
|
187
|
-
"required": false,
|
|
188
|
-
"description": "Side effects the destination can exercise (ADR 0020), e.g. 'network.send', 'financial.transfer', 'filesystem.write'. Enables 'untrusted content MUST NOT reach a financial.transfer sink'. Set<String>."
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
"key": "principal_clearances",
|
|
192
|
-
"type": "array",
|
|
193
|
-
"required": false,
|
|
194
|
-
"description": "Clearances AuthN/ZeroID mints for the principal (ADR 0020 D8), e.g. 'restricted', 'pii'. Coarse scopes gate the capability; clearances gate which protected data that capability may touch. Set<String>."
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
"key": "principal_compartments",
|
|
198
|
-
"type": "array",
|
|
199
|
-
"required": false,
|
|
200
|
-
"description": "Compartments the principal is admitted to (ADR 0020 D8), e.g. 'tenant:acme', 'customer:123'. A flow into a compartment the principal lacks is deniable independent of confidentiality tier. Set<String>."
|
|
201
|
-
}
|
|
202
|
-
],
|
|
203
|
-
"surface_keys": [
|
|
204
|
-
{
|
|
205
|
-
"key": "surface",
|
|
206
|
-
"type": "string",
|
|
207
|
-
"required": true,
|
|
208
|
-
"description": "Origin surface of the request (ADR 0012 D14.2) — REQUIRED; projected by Shield from the ingress product, never user-supplied. Values are the product identifiers: 'guardrails', 'overwatch', 'ai_gateway' ('sentry' joins at D17 phase 2). The 'Applies to' narrowing target: test with an ordinary condition (context.surface == 'ai_gateway'); no 'has' guard needed because it is required. A policy with no surface condition applies to every surface, including ones added later."
|
|
209
|
-
}
|
|
210
|
-
]
|
|
211
|
-
},
|
|
212
5
|
"actions": [
|
|
213
6
|
{
|
|
214
7
|
"name": "process_prompt",
|
|
@@ -778,10 +571,228 @@
|
|
|
778
571
|
"required": false,
|
|
779
572
|
"description": "Whether the TPM limit has been exceeded"
|
|
780
573
|
},
|
|
781
|
-
{
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
574
|
+
{
|
|
575
|
+
"key": "session_pii_detected",
|
|
576
|
+
"type": "boolean",
|
|
577
|
+
"required": false,
|
|
578
|
+
"description": "Whether PII was detected in any previous turn of the session"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"key": "session_pii_types",
|
|
582
|
+
"type": "array",
|
|
583
|
+
"required": false,
|
|
584
|
+
"description": "PII types detected across the session (accumulated)"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"key": "session_secrets_detected",
|
|
588
|
+
"type": "boolean",
|
|
589
|
+
"required": false,
|
|
590
|
+
"description": "Whether secrets were detected in any previous turn of the session"
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
"key": "session_secret_types",
|
|
594
|
+
"type": "array",
|
|
595
|
+
"required": false,
|
|
596
|
+
"description": "Secret types detected across the session (accumulated)"
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
"key": "session_injection_detected",
|
|
600
|
+
"type": "boolean",
|
|
601
|
+
"required": false,
|
|
602
|
+
"description": "Whether prompt injection was detected in any previous turn of the session"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"key": "session_command_injection",
|
|
606
|
+
"type": "boolean",
|
|
607
|
+
"required": false,
|
|
608
|
+
"description": "Whether command injection was detected in any previous turn of the session"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"key": "session_threat_turns",
|
|
612
|
+
"type": "number",
|
|
613
|
+
"required": false,
|
|
614
|
+
"description": "Number of turns in the session where threats were detected"
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"key": "session_max_injection_score",
|
|
618
|
+
"type": "number",
|
|
619
|
+
"required": false,
|
|
620
|
+
"description": "Highest prompt injection score seen in any turn of the session (0-100). Use for tiered responses: >75 hard block, >50 restrict permissions",
|
|
621
|
+
"range": "0-100"
|
|
622
|
+
},
|
|
623
|
+
{
|
|
624
|
+
"key": "session_max_jailbreak_score",
|
|
625
|
+
"type": "number",
|
|
626
|
+
"required": false,
|
|
627
|
+
"description": "Highest jailbreak detection score seen in any turn of the session (0-100)",
|
|
628
|
+
"range": "0-100"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"key": "session_max_command_injection_score",
|
|
632
|
+
"type": "number",
|
|
633
|
+
"required": false,
|
|
634
|
+
"description": "Highest command injection score seen in any turn of the session (0-100)",
|
|
635
|
+
"range": "0-100"
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
"key": "session_max_pii_score",
|
|
639
|
+
"type": "number",
|
|
640
|
+
"required": false,
|
|
641
|
+
"description": "Highest PII risk score seen in any turn of the session (0-100)",
|
|
642
|
+
"range": "0-100"
|
|
643
|
+
},
|
|
644
|
+
{
|
|
645
|
+
"key": "session_max_secret_score",
|
|
646
|
+
"type": "number",
|
|
647
|
+
"required": false,
|
|
648
|
+
"description": "Highest secret detection score seen in any turn of the session (0-100)",
|
|
649
|
+
"range": "0-100"
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
"key": "session_cumulative_risk_score",
|
|
653
|
+
"type": "number",
|
|
654
|
+
"required": false,
|
|
655
|
+
"description": "Sum of per-turn risk scores across the session. Catches death-by-a-thousand-cuts where no single turn is high but cumulative risk is significant"
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
"key": "session_max_sensitivity",
|
|
659
|
+
"type": "string",
|
|
660
|
+
"required": false,
|
|
661
|
+
"description": "Highest data-sensitivity tier observed across the session (e.g. 'public', 'internal', 'confidential', 'restricted')"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"key": "session_original_request",
|
|
665
|
+
"type": "string",
|
|
666
|
+
"required": false,
|
|
667
|
+
"description": "The session's first user request, retained for drift / goal-hijack policies that compare later turns against the original intent"
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"key": "agent_id",
|
|
671
|
+
"type": "string",
|
|
672
|
+
"required": false,
|
|
673
|
+
"description": "Unique identifier of the authenticated AI agent making this request. Empty string for human user requests."
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"key": "agent_type",
|
|
677
|
+
"type": "string",
|
|
678
|
+
"required": false,
|
|
679
|
+
"description": "Type of the authenticated agent: 'orchestrator', 'autonomous', 'tool_agent', or 'human_proxy'. Empty string for human users."
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
"key": "agent_trust_level",
|
|
683
|
+
"type": "string",
|
|
684
|
+
"required": false,
|
|
685
|
+
"description": "Trust level of the authenticated agent: 'first_party', 'verified_third_party', or 'unverified'."
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
"key": "agent_framework",
|
|
689
|
+
"type": "string",
|
|
690
|
+
"required": false,
|
|
691
|
+
"description": "Framework or SDK the agent is built with (e.g., 'claude-code', 'langchain', 'crewai', 'autogen')."
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"key": "agent_publisher",
|
|
695
|
+
"type": "string",
|
|
696
|
+
"required": false,
|
|
697
|
+
"description": "Organization that published the agent (e.g., 'anthropic', 'internal', 'acme-corp')."
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"key": "flow_confidentiality",
|
|
701
|
+
"type": "string",
|
|
702
|
+
"required": false,
|
|
703
|
+
"description": "Confidentiality tier of the data this action carries or targets (ADR 0020): 'public', 'internal', 'confidential', 'restricted', or 'unknown'. Shares the ladder with session_max_sensitivity but is a per-value fact, not a session scalar. 'unknown' MUST NOT be treated as 'public' — guard with has and let policy DENY/STEP_UP/DEFER per flow_resolution_status."
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"key": "flow_integrity",
|
|
707
|
+
"type": "string",
|
|
708
|
+
"required": false,
|
|
709
|
+
"description": "Integrity/influence tier of the data this action carries (ADR 0020): 'trusted', 'untrusted', 'mixed', or 'unknown'. Orthogonal to confidentiality: untrusted content may inform a pure analysis but MUST NOT authorize a side-effecting sink. Least-trusted contributor wins on join."
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"key": "flow_data_types",
|
|
713
|
+
"type": "array",
|
|
714
|
+
"required": false,
|
|
715
|
+
"description": "Sensitive data categories present in the value (ADR 0020), e.g. 'pii', 'secrets', 'source_code', 'financial', 'health'. Union of all contributing inputs. Set<String>."
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
"key": "flow_compartments",
|
|
719
|
+
"type": "array",
|
|
720
|
+
"required": false,
|
|
721
|
+
"description": "Compartments the value belongs to (ADR 0020), e.g. 'tenant:acme', 'customer:123', 'project:x'. Union of all contributing inputs — cross-compartment composition is expressible by cardinality. Set<String>."
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
"key": "flow_resolution_status",
|
|
725
|
+
"type": "string",
|
|
726
|
+
"required": false,
|
|
727
|
+
"description": "How the flow label was resolved (ADR 0020): 'known', 'inferred', 'unknown', or 'conflicted'. Policy authors choose the posture for 'unknown' per sink (DENY external, STEP_UP, DEFER while a classifier runs, or allow-and-record). Never silently resolves to public."
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"key": "flow_origins",
|
|
731
|
+
"type": "array",
|
|
732
|
+
"required": false,
|
|
733
|
+
"description": "Origin kinds that produced or influenced the value (ADR 0020): 'mcp_tool_result', 'model', 'file', 'database', 'user'. Provenance fact for lineage-aware policy. Set<String>."
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"key": "flow_sink",
|
|
737
|
+
"type": "string",
|
|
738
|
+
"required": false,
|
|
739
|
+
"description": "Logical destination this action releases the value to (ADR 0020), e.g. 'external_model', 'local_model', 'external_mcp', 'trusted_mcp', 'user_secure_output', 'public_network', 'file'. The 'where' half of a flow decision — pair with flow_confidentiality/flow_integrity."
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"key": "flow_sink_is_external",
|
|
743
|
+
"type": "boolean",
|
|
744
|
+
"required": false,
|
|
745
|
+
"description": "Whether the destination is outside the tenant trust boundary (ADR 0020). Lets a single policy express 'confidential data MUST NOT leave to any external sink' without enumerating sink ids."
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"key": "flow_sink_effects",
|
|
749
|
+
"type": "array",
|
|
750
|
+
"required": false,
|
|
751
|
+
"description": "Side effects the destination can exercise (ADR 0020), e.g. 'network.send', 'financial.transfer', 'filesystem.write'. Enables 'untrusted content MUST NOT reach a financial.transfer sink'. Set<String>."
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
"key": "principal_clearances",
|
|
755
|
+
"type": "array",
|
|
756
|
+
"required": false,
|
|
757
|
+
"description": "Clearances AuthN/ZeroID mints for the principal (ADR 0020 D8), e.g. 'restricted', 'pii'. Coarse scopes gate the capability; clearances gate which protected data that capability may touch. Set<String>."
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
"key": "principal_compartments",
|
|
761
|
+
"type": "array",
|
|
762
|
+
"required": false,
|
|
763
|
+
"description": "Compartments the principal is admitted to (ADR 0020 D8), e.g. 'tenant:acme', 'customer:123'. A flow into a compartment the principal lacks is deniable independent of confidentiality tier. Set<String>."
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
"key": "surface",
|
|
767
|
+
"type": "string",
|
|
768
|
+
"required": true,
|
|
769
|
+
"description": "Origin surface of the request (ADR 0012 D14.2) — REQUIRED; projected by Shield from the ingress product, never user-supplied. Values are the product identifiers: 'guardrails', 'overwatch', 'ai_gateway' ('sentry' joins at D17 phase 2). The 'Applies to' narrowing target: test with an ordinary condition (context.surface == 'ai_gateway'); no 'has' guard needed because it is required. A policy with no surface condition applies to every surface, including ones added later."
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"key": "malicious_package_detected",
|
|
773
|
+
"type": "boolean",
|
|
774
|
+
"required": false,
|
|
775
|
+
"description": "Whether a referenced package carries a known-malicious osv.dev (MAL-) advisory."
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
"key": "package_install_detected",
|
|
779
|
+
"type": "boolean",
|
|
780
|
+
"required": false,
|
|
781
|
+
"description": "Whether the request installs or downloads a package (pip/npm/cargo/etc.)."
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
"key": "package_check_status",
|
|
785
|
+
"type": "string",
|
|
786
|
+
"required": false,
|
|
787
|
+
"description": "Malicious-package lookup status: empty (ok) or degraded (OSV unavailable, fail-open)."
|
|
788
|
+
},
|
|
789
|
+
{
|
|
790
|
+
"key": "max_threat_severity",
|
|
791
|
+
"type": "number",
|
|
792
|
+
"required": false,
|
|
793
|
+
"description": "Aggregate max threat severity across detectors (0=none,1=low,2=medium,3=high,4=critical).",
|
|
794
|
+
"range": "0-4"
|
|
795
|
+
}
|
|
785
796
|
]
|
|
786
797
|
},
|
|
787
798
|
{
|
|
@@ -1293,202 +1304,233 @@
|
|
|
1293
1304
|
"required": false,
|
|
1294
1305
|
"description": "Array of specific threat names detected"
|
|
1295
1306
|
},
|
|
1296
|
-
{ "$ref": "session_keys" },
|
|
1297
|
-
{ "$ref": "agent_identity_keys" },
|
|
1298
|
-
{ "$ref": "flow_label_keys" },
|
|
1299
|
-
{ "$ref": "surface_keys" }
|
|
1300
|
-
]
|
|
1301
|
-
},
|
|
1302
|
-
{
|
|
1303
|
-
"name": "read_file",
|
|
1304
|
-
"description": "Read file operations for analyzing file content before allowing access",
|
|
1305
|
-
"context_attributes": [
|
|
1306
1307
|
{
|
|
1307
|
-
"key": "
|
|
1308
|
-
"type": "
|
|
1308
|
+
"key": "session_pii_detected",
|
|
1309
|
+
"type": "boolean",
|
|
1309
1310
|
"required": false,
|
|
1310
|
-
"description": "
|
|
1311
|
+
"description": "Whether PII was detected in any previous turn of the session"
|
|
1311
1312
|
},
|
|
1312
1313
|
{
|
|
1313
|
-
"key": "
|
|
1314
|
+
"key": "session_pii_types",
|
|
1314
1315
|
"type": "array",
|
|
1315
1316
|
"required": false,
|
|
1316
|
-
"description": "
|
|
1317
|
+
"description": "PII types detected across the session (accumulated)"
|
|
1317
1318
|
},
|
|
1318
1319
|
{
|
|
1319
|
-
"key": "
|
|
1320
|
-
"type": "
|
|
1320
|
+
"key": "session_secrets_detected",
|
|
1321
|
+
"type": "boolean",
|
|
1321
1322
|
"required": false,
|
|
1322
|
-
"description": "
|
|
1323
|
+
"description": "Whether secrets were detected in any previous turn of the session"
|
|
1323
1324
|
},
|
|
1324
1325
|
{
|
|
1325
|
-
"key": "
|
|
1326
|
-
"type": "
|
|
1326
|
+
"key": "session_secret_types",
|
|
1327
|
+
"type": "array",
|
|
1327
1328
|
"required": false,
|
|
1328
|
-
"description": "
|
|
1329
|
+
"description": "Secret types detected across the session (accumulated)"
|
|
1329
1330
|
},
|
|
1330
1331
|
{
|
|
1331
|
-
"key": "
|
|
1332
|
-
"type": "
|
|
1333
|
-
"required":
|
|
1334
|
-
"description": "
|
|
1332
|
+
"key": "session_injection_detected",
|
|
1333
|
+
"type": "boolean",
|
|
1334
|
+
"required": false,
|
|
1335
|
+
"description": "Whether prompt injection was detected in any previous turn of the session"
|
|
1335
1336
|
},
|
|
1336
1337
|
{
|
|
1337
|
-
"key": "
|
|
1338
|
-
"type": "
|
|
1339
|
-
"required":
|
|
1340
|
-
"description": "
|
|
1338
|
+
"key": "session_command_injection",
|
|
1339
|
+
"type": "boolean",
|
|
1340
|
+
"required": false,
|
|
1341
|
+
"description": "Whether command injection was detected in any previous turn of the session"
|
|
1341
1342
|
},
|
|
1342
1343
|
{
|
|
1343
|
-
"key": "
|
|
1344
|
-
"type": "
|
|
1344
|
+
"key": "session_threat_turns",
|
|
1345
|
+
"type": "number",
|
|
1345
1346
|
"required": false,
|
|
1346
|
-
"description": "
|
|
1347
|
+
"description": "Number of turns in the session where threats were detected"
|
|
1347
1348
|
},
|
|
1348
1349
|
{
|
|
1349
|
-
"key": "
|
|
1350
|
-
"type": "
|
|
1350
|
+
"key": "session_max_injection_score",
|
|
1351
|
+
"type": "number",
|
|
1351
1352
|
"required": false,
|
|
1352
|
-
"description": "
|
|
1353
|
+
"description": "Highest prompt injection score seen in any turn of the session (0-100). Use for tiered responses: >75 hard block, >50 restrict permissions",
|
|
1354
|
+
"range": "0-100"
|
|
1353
1355
|
},
|
|
1354
1356
|
{
|
|
1355
|
-
"key": "
|
|
1356
|
-
"type": "
|
|
1357
|
+
"key": "session_max_jailbreak_score",
|
|
1358
|
+
"type": "number",
|
|
1357
1359
|
"required": false,
|
|
1358
|
-
"description": "
|
|
1360
|
+
"description": "Highest jailbreak detection score seen in any turn of the session (0-100)",
|
|
1361
|
+
"range": "0-100"
|
|
1359
1362
|
},
|
|
1360
1363
|
{
|
|
1361
|
-
"key": "
|
|
1362
|
-
"type": "
|
|
1364
|
+
"key": "session_max_command_injection_score",
|
|
1365
|
+
"type": "number",
|
|
1363
1366
|
"required": false,
|
|
1364
|
-
"description": "
|
|
1367
|
+
"description": "Highest command injection score seen in any turn of the session (0-100)",
|
|
1368
|
+
"range": "0-100"
|
|
1365
1369
|
},
|
|
1366
1370
|
{
|
|
1367
|
-
"key": "
|
|
1368
|
-
"type": "
|
|
1371
|
+
"key": "session_max_pii_score",
|
|
1372
|
+
"type": "number",
|
|
1369
1373
|
"required": false,
|
|
1370
|
-
"description": "
|
|
1374
|
+
"description": "Highest PII risk score seen in any turn of the session (0-100)",
|
|
1375
|
+
"range": "0-100"
|
|
1371
1376
|
},
|
|
1372
1377
|
{
|
|
1373
|
-
"key": "
|
|
1374
|
-
"type": "
|
|
1378
|
+
"key": "session_max_secret_score",
|
|
1379
|
+
"type": "number",
|
|
1375
1380
|
"required": false,
|
|
1376
|
-
"description": "
|
|
1381
|
+
"description": "Highest secret detection score seen in any turn of the session (0-100)",
|
|
1382
|
+
"range": "0-100"
|
|
1377
1383
|
},
|
|
1378
1384
|
{
|
|
1379
|
-
"key": "
|
|
1380
|
-
"type": "
|
|
1385
|
+
"key": "session_cumulative_risk_score",
|
|
1386
|
+
"type": "number",
|
|
1381
1387
|
"required": false,
|
|
1382
|
-
"description": "
|
|
1388
|
+
"description": "Sum of per-turn risk scores across the session. Catches death-by-a-thousand-cuts where no single turn is high but cumulative risk is significant"
|
|
1383
1389
|
},
|
|
1384
1390
|
{
|
|
1385
|
-
"key": "
|
|
1386
|
-
"type": "
|
|
1391
|
+
"key": "session_max_sensitivity",
|
|
1392
|
+
"type": "string",
|
|
1387
1393
|
"required": false,
|
|
1388
|
-
"description": "
|
|
1394
|
+
"description": "Highest data-sensitivity tier observed across the session (e.g. 'public', 'internal', 'confidential', 'restricted')"
|
|
1389
1395
|
},
|
|
1390
1396
|
{
|
|
1391
|
-
"key": "
|
|
1392
|
-
"type": "
|
|
1397
|
+
"key": "session_original_request",
|
|
1398
|
+
"type": "string",
|
|
1393
1399
|
"required": false,
|
|
1394
|
-
"description": "
|
|
1400
|
+
"description": "The session's first user request, retained for drift / goal-hijack policies that compare later turns against the original intent"
|
|
1395
1401
|
},
|
|
1396
1402
|
{
|
|
1397
|
-
"key": "
|
|
1398
|
-
"type": "
|
|
1403
|
+
"key": "agent_id",
|
|
1404
|
+
"type": "string",
|
|
1399
1405
|
"required": false,
|
|
1400
|
-
"description": "
|
|
1406
|
+
"description": "Unique identifier of the authenticated AI agent making this request. Empty string for human user requests."
|
|
1401
1407
|
},
|
|
1402
1408
|
{
|
|
1403
|
-
"key": "
|
|
1404
|
-
"type": "
|
|
1409
|
+
"key": "agent_type",
|
|
1410
|
+
"type": "string",
|
|
1405
1411
|
"required": false,
|
|
1406
|
-
"description": "
|
|
1412
|
+
"description": "Type of the authenticated agent: 'orchestrator', 'autonomous', 'tool_agent', or 'human_proxy'. Empty string for human users."
|
|
1407
1413
|
},
|
|
1408
1414
|
{
|
|
1409
|
-
"key": "
|
|
1410
|
-
"type": "
|
|
1415
|
+
"key": "agent_trust_level",
|
|
1416
|
+
"type": "string",
|
|
1411
1417
|
"required": false,
|
|
1412
|
-
"description": "
|
|
1418
|
+
"description": "Trust level of the authenticated agent: 'first_party', 'verified_third_party', or 'unverified'."
|
|
1413
1419
|
},
|
|
1414
1420
|
{
|
|
1415
|
-
"key": "
|
|
1421
|
+
"key": "agent_framework",
|
|
1416
1422
|
"type": "string",
|
|
1417
1423
|
"required": false,
|
|
1418
|
-
"description": "
|
|
1424
|
+
"description": "Framework or SDK the agent is built with (e.g., 'claude-code', 'langchain', 'crewai', 'autogen')."
|
|
1419
1425
|
},
|
|
1420
1426
|
{
|
|
1421
|
-
"key": "
|
|
1427
|
+
"key": "agent_publisher",
|
|
1422
1428
|
"type": "string",
|
|
1423
1429
|
"required": false,
|
|
1424
|
-
"description": "
|
|
1430
|
+
"description": "Organization that published the agent (e.g., 'anthropic', 'internal', 'acme-corp')."
|
|
1425
1431
|
},
|
|
1426
1432
|
{
|
|
1427
|
-
"key": "
|
|
1433
|
+
"key": "flow_confidentiality",
|
|
1428
1434
|
"type": "string",
|
|
1429
1435
|
"required": false,
|
|
1430
|
-
"description": "
|
|
1436
|
+
"description": "Confidentiality tier of the data this action carries or targets (ADR 0020): 'public', 'internal', 'confidential', 'restricted', or 'unknown'. Shares the ladder with session_max_sensitivity but is a per-value fact, not a session scalar. 'unknown' MUST NOT be treated as 'public' — guard with has and let policy DENY/STEP_UP/DEFER per flow_resolution_status."
|
|
1431
1437
|
},
|
|
1432
1438
|
{
|
|
1433
|
-
"key": "
|
|
1434
|
-
"type": "
|
|
1439
|
+
"key": "flow_integrity",
|
|
1440
|
+
"type": "string",
|
|
1435
1441
|
"required": false,
|
|
1436
|
-
"description": "
|
|
1442
|
+
"description": "Integrity/influence tier of the data this action carries (ADR 0020): 'trusted', 'untrusted', 'mixed', or 'unknown'. Orthogonal to confidentiality: untrusted content may inform a pure analysis but MUST NOT authorize a side-effecting sink. Least-trusted contributor wins on join."
|
|
1437
1443
|
},
|
|
1438
1444
|
{
|
|
1439
|
-
"key": "
|
|
1445
|
+
"key": "flow_data_types",
|
|
1440
1446
|
"type": "array",
|
|
1441
1447
|
"required": false,
|
|
1442
|
-
"description": "
|
|
1448
|
+
"description": "Sensitive data categories present in the value (ADR 0020), e.g. 'pii', 'secrets', 'source_code', 'financial', 'health'. Union of all contributing inputs. Set<String>."
|
|
1443
1449
|
},
|
|
1444
1450
|
{
|
|
1445
|
-
"key": "
|
|
1446
|
-
"type": "
|
|
1451
|
+
"key": "flow_compartments",
|
|
1452
|
+
"type": "array",
|
|
1447
1453
|
"required": false,
|
|
1448
|
-
"description": "
|
|
1449
|
-
"range": "0-100"
|
|
1454
|
+
"description": "Compartments the value belongs to (ADR 0020), e.g. 'tenant:acme', 'customer:123', 'project:x'. Union of all contributing inputs — cross-compartment composition is expressible by cardinality. Set<String>."
|
|
1450
1455
|
},
|
|
1451
1456
|
{
|
|
1452
|
-
"key": "
|
|
1453
|
-
"type": "
|
|
1457
|
+
"key": "flow_resolution_status",
|
|
1458
|
+
"type": "string",
|
|
1454
1459
|
"required": false,
|
|
1455
|
-
"description": "
|
|
1460
|
+
"description": "How the flow label was resolved (ADR 0020): 'known', 'inferred', 'unknown', or 'conflicted'. Policy authors choose the posture for 'unknown' per sink (DENY external, STEP_UP, DEFER while a classifier runs, or allow-and-record). Never silently resolves to public."
|
|
1456
1461
|
},
|
|
1457
1462
|
{
|
|
1458
|
-
"key": "
|
|
1459
|
-
"type": "
|
|
1463
|
+
"key": "flow_origins",
|
|
1464
|
+
"type": "array",
|
|
1460
1465
|
"required": false,
|
|
1461
|
-
"description": "
|
|
1462
|
-
"range": "0-100"
|
|
1466
|
+
"description": "Origin kinds that produced or influenced the value (ADR 0020): 'mcp_tool_result', 'model', 'file', 'database', 'user'. Provenance fact for lineage-aware policy. Set<String>."
|
|
1463
1467
|
},
|
|
1464
1468
|
{
|
|
1465
|
-
"key": "
|
|
1469
|
+
"key": "flow_sink",
|
|
1470
|
+
"type": "string",
|
|
1471
|
+
"required": false,
|
|
1472
|
+
"description": "Logical destination this action releases the value to (ADR 0020), e.g. 'external_model', 'local_model', 'external_mcp', 'trusted_mcp', 'user_secure_output', 'public_network', 'file'. The 'where' half of a flow decision — pair with flow_confidentiality/flow_integrity."
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
"key": "flow_sink_is_external",
|
|
1466
1476
|
"type": "boolean",
|
|
1467
1477
|
"required": false,
|
|
1468
|
-
"description": "Whether the
|
|
1478
|
+
"description": "Whether the destination is outside the tenant trust boundary (ADR 0020). Lets a single policy express 'confidential data MUST NOT leave to any external sink' without enumerating sink ids."
|
|
1469
1479
|
},
|
|
1470
1480
|
{
|
|
1471
|
-
"key": "
|
|
1472
|
-
"type": "
|
|
1481
|
+
"key": "flow_sink_effects",
|
|
1482
|
+
"type": "array",
|
|
1473
1483
|
"required": false,
|
|
1474
|
-
"description": "
|
|
1475
|
-
"range": "0-100"
|
|
1484
|
+
"description": "Side effects the destination can exercise (ADR 0020), e.g. 'network.send', 'financial.transfer', 'filesystem.write'. Enables 'untrusted content MUST NOT reach a financial.transfer sink'. Set<String>."
|
|
1476
1485
|
},
|
|
1477
1486
|
{
|
|
1478
|
-
"key": "
|
|
1487
|
+
"key": "principal_clearances",
|
|
1488
|
+
"type": "array",
|
|
1489
|
+
"required": false,
|
|
1490
|
+
"description": "Clearances AuthN/ZeroID mints for the principal (ADR 0020 D8), e.g. 'restricted', 'pii'. Coarse scopes gate the capability; clearances gate which protected data that capability may touch. Set<String>."
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"key": "principal_compartments",
|
|
1494
|
+
"type": "array",
|
|
1495
|
+
"required": false,
|
|
1496
|
+
"description": "Compartments the principal is admitted to (ADR 0020 D8), e.g. 'tenant:acme', 'customer:123'. A flow into a compartment the principal lacks is deniable independent of confidentiality tier. Set<String>."
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"key": "surface",
|
|
1500
|
+
"type": "string",
|
|
1501
|
+
"required": true,
|
|
1502
|
+
"description": "Origin surface of the request (ADR 0012 D14.2) — REQUIRED; projected by Shield from the ingress product, never user-supplied. Values are the product identifiers: 'guardrails', 'overwatch', 'ai_gateway' ('sentry' joins at D17 phase 2). The 'Applies to' narrowing target: test with an ordinary condition (context.surface == 'ai_gateway'); no 'has' guard needed because it is required. A policy with no surface condition applies to every surface, including ones added later."
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
"key": "malicious_package_detected",
|
|
1479
1506
|
"type": "boolean",
|
|
1480
1507
|
"required": false,
|
|
1481
|
-
"description": "Whether
|
|
1508
|
+
"description": "Whether a referenced package carries a known-malicious osv.dev (MAL-) advisory."
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
"key": "package_install_detected",
|
|
1512
|
+
"type": "boolean",
|
|
1513
|
+
"required": false,
|
|
1514
|
+
"description": "Whether the request installs or downloads a package (pip/npm/cargo/etc.)."
|
|
1515
|
+
},
|
|
1516
|
+
{
|
|
1517
|
+
"key": "package_check_status",
|
|
1518
|
+
"type": "string",
|
|
1519
|
+
"required": false,
|
|
1520
|
+
"description": "Malicious-package lookup status: empty (ok) or degraded (OSV unavailable, fail-open)."
|
|
1482
1521
|
},
|
|
1483
|
-
{
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1522
|
+
{
|
|
1523
|
+
"key": "max_threat_severity",
|
|
1524
|
+
"type": "number",
|
|
1525
|
+
"required": false,
|
|
1526
|
+
"description": "Aggregate max threat severity across detectors (0=none,1=low,2=medium,3=high,4=critical).",
|
|
1527
|
+
"range": "0-4"
|
|
1528
|
+
}
|
|
1487
1529
|
]
|
|
1488
1530
|
},
|
|
1489
1531
|
{
|
|
1490
|
-
"name": "
|
|
1491
|
-
"description": "
|
|
1532
|
+
"name": "read_file",
|
|
1533
|
+
"description": "Read file operations for analyzing file content before allowing access",
|
|
1492
1534
|
"context_attributes": [
|
|
1493
1535
|
{
|
|
1494
1536
|
"key": "role",
|
|
@@ -1536,7 +1578,7 @@
|
|
|
1536
1578
|
"key": "event",
|
|
1537
1579
|
"type": "string",
|
|
1538
1580
|
"required": false,
|
|
1539
|
-
"description": "Event type: '
|
|
1581
|
+
"description": "Event type: 'file_read'"
|
|
1540
1582
|
},
|
|
1541
1583
|
{
|
|
1542
1584
|
"key": "user_email",
|
|
@@ -1560,50 +1602,37 @@
|
|
|
1560
1602
|
"key": "path",
|
|
1561
1603
|
"type": "string",
|
|
1562
1604
|
"required": false,
|
|
1563
|
-
"description": "File path being
|
|
1564
|
-
},
|
|
1565
|
-
{
|
|
1566
|
-
"key": "invisible_chars_detected",
|
|
1567
|
-
"type": "boolean",
|
|
1568
|
-
"required": false,
|
|
1569
|
-
"description": "Whether invisible Unicode characters were detected in the content being written"
|
|
1570
|
-
},
|
|
1571
|
-
{
|
|
1572
|
-
"key": "invisible_chars_score",
|
|
1573
|
-
"type": "number",
|
|
1574
|
-
"required": false,
|
|
1575
|
-
"description": "Invisible character attack severity score in write content (0-100).",
|
|
1576
|
-
"range": "0-100"
|
|
1605
|
+
"description": "File path being read. Use for path-based access control policies."
|
|
1577
1606
|
},
|
|
1578
1607
|
{
|
|
1579
1608
|
"key": "secrets_detected",
|
|
1580
1609
|
"type": "boolean",
|
|
1581
1610
|
"required": false,
|
|
1582
|
-
"description": "Whether secrets were detected in the content being
|
|
1611
|
+
"description": "Whether secrets were detected in the file content being read"
|
|
1583
1612
|
},
|
|
1584
1613
|
{
|
|
1585
1614
|
"key": "secret_count",
|
|
1586
1615
|
"type": "number",
|
|
1587
1616
|
"required": false,
|
|
1588
|
-
"description": "Total number of secret matches found in
|
|
1617
|
+
"description": "Total number of secret matches found in file content"
|
|
1589
1618
|
},
|
|
1590
1619
|
{
|
|
1591
1620
|
"key": "secret_types",
|
|
1592
1621
|
"type": "array",
|
|
1593
1622
|
"required": false,
|
|
1594
|
-
"description": "Array of secret types found in
|
|
1623
|
+
"description": "Array of secret types found in file content"
|
|
1595
1624
|
},
|
|
1596
1625
|
{
|
|
1597
1626
|
"key": "pii_detected",
|
|
1598
1627
|
"type": "boolean",
|
|
1599
1628
|
"required": false,
|
|
1600
|
-
"description": "Whether PII was detected in the content
|
|
1629
|
+
"description": "Whether PII was detected in the file content"
|
|
1601
1630
|
},
|
|
1602
1631
|
{
|
|
1603
1632
|
"key": "pii_types",
|
|
1604
1633
|
"type": "array",
|
|
1605
1634
|
"required": false,
|
|
1606
|
-
"description": "Array of PII types found in
|
|
1635
|
+
"description": "Array of PII types found in file content"
|
|
1607
1636
|
},
|
|
1608
1637
|
{
|
|
1609
1638
|
"key": "path_traversal_detected",
|
|
@@ -1615,7 +1644,7 @@
|
|
|
1615
1644
|
"key": "path_traversal_severity",
|
|
1616
1645
|
"type": "string",
|
|
1617
1646
|
"required": false,
|
|
1618
|
-
"description": "Severity of path traversal in the file
|
|
1647
|
+
"description": "Severity of path traversal in the file path"
|
|
1619
1648
|
},
|
|
1620
1649
|
{
|
|
1621
1650
|
"key": "path_traversal_type",
|
|
@@ -1680,212 +1709,1016 @@
|
|
|
1680
1709
|
"required": false,
|
|
1681
1710
|
"description": "Whether the TPM limit has been exceeded"
|
|
1682
1711
|
},
|
|
1683
|
-
{ "$ref": "session_keys" },
|
|
1684
|
-
{ "$ref": "agent_identity_keys" },
|
|
1685
|
-
{ "$ref": "flow_label_keys" },
|
|
1686
|
-
{ "$ref": "surface_keys" }
|
|
1687
|
-
]
|
|
1688
|
-
},
|
|
1689
|
-
{
|
|
1690
|
-
"name": "connect_server",
|
|
1691
|
-
"description": "Connect to an MCP server, used to control which MCP servers are allowed",
|
|
1692
|
-
"context_attributes": [
|
|
1693
1712
|
{
|
|
1694
|
-
"key": "
|
|
1695
|
-
"type": "
|
|
1713
|
+
"key": "session_pii_detected",
|
|
1714
|
+
"type": "boolean",
|
|
1696
1715
|
"required": false,
|
|
1697
|
-
"description": "
|
|
1716
|
+
"description": "Whether PII was detected in any previous turn of the session"
|
|
1698
1717
|
},
|
|
1699
1718
|
{
|
|
1700
|
-
"key": "
|
|
1719
|
+
"key": "session_pii_types",
|
|
1701
1720
|
"type": "array",
|
|
1702
1721
|
"required": false,
|
|
1703
|
-
"description": "
|
|
1722
|
+
"description": "PII types detected across the session (accumulated)"
|
|
1704
1723
|
},
|
|
1705
1724
|
{
|
|
1706
|
-
"key": "
|
|
1707
|
-
"type": "
|
|
1725
|
+
"key": "session_secrets_detected",
|
|
1726
|
+
"type": "boolean",
|
|
1708
1727
|
"required": false,
|
|
1709
|
-
"description": "
|
|
1728
|
+
"description": "Whether secrets were detected in any previous turn of the session"
|
|
1710
1729
|
},
|
|
1711
1730
|
{
|
|
1712
|
-
"key": "
|
|
1713
|
-
"type": "
|
|
1731
|
+
"key": "session_secret_types",
|
|
1732
|
+
"type": "array",
|
|
1714
1733
|
"required": false,
|
|
1715
|
-
"description": "
|
|
1734
|
+
"description": "Secret types detected across the session (accumulated)"
|
|
1716
1735
|
},
|
|
1717
1736
|
{
|
|
1718
|
-
"key": "
|
|
1719
|
-
"type": "
|
|
1720
|
-
"required":
|
|
1721
|
-
"description": "
|
|
1737
|
+
"key": "session_injection_detected",
|
|
1738
|
+
"type": "boolean",
|
|
1739
|
+
"required": false,
|
|
1740
|
+
"description": "Whether prompt injection was detected in any previous turn of the session"
|
|
1722
1741
|
},
|
|
1723
1742
|
{
|
|
1724
|
-
"key": "
|
|
1743
|
+
"key": "session_command_injection",
|
|
1744
|
+
"type": "boolean",
|
|
1745
|
+
"required": false,
|
|
1746
|
+
"description": "Whether command injection was detected in any previous turn of the session"
|
|
1747
|
+
},
|
|
1748
|
+
{
|
|
1749
|
+
"key": "session_threat_turns",
|
|
1725
1750
|
"type": "number",
|
|
1726
|
-
"required":
|
|
1727
|
-
"description": "
|
|
1751
|
+
"required": false,
|
|
1752
|
+
"description": "Number of turns in the session where threats were detected"
|
|
1728
1753
|
},
|
|
1729
1754
|
{
|
|
1730
|
-
"key": "
|
|
1731
|
-
"type": "
|
|
1755
|
+
"key": "session_max_injection_score",
|
|
1756
|
+
"type": "number",
|
|
1732
1757
|
"required": false,
|
|
1733
|
-
"description": "
|
|
1758
|
+
"description": "Highest prompt injection score seen in any turn of the session (0-100). Use for tiered responses: >75 hard block, >50 restrict permissions",
|
|
1759
|
+
"range": "0-100"
|
|
1734
1760
|
},
|
|
1735
1761
|
{
|
|
1736
|
-
"key": "
|
|
1737
|
-
"type": "
|
|
1762
|
+
"key": "session_max_jailbreak_score",
|
|
1763
|
+
"type": "number",
|
|
1738
1764
|
"required": false,
|
|
1739
|
-
"description": "
|
|
1765
|
+
"description": "Highest jailbreak detection score seen in any turn of the session (0-100)",
|
|
1766
|
+
"range": "0-100"
|
|
1740
1767
|
},
|
|
1741
1768
|
{
|
|
1742
|
-
"key": "
|
|
1743
|
-
"type": "
|
|
1769
|
+
"key": "session_max_command_injection_score",
|
|
1770
|
+
"type": "number",
|
|
1744
1771
|
"required": false,
|
|
1745
|
-
"description": "
|
|
1772
|
+
"description": "Highest command injection score seen in any turn of the session (0-100)",
|
|
1773
|
+
"range": "0-100"
|
|
1746
1774
|
},
|
|
1747
1775
|
{
|
|
1748
|
-
"key": "
|
|
1776
|
+
"key": "session_max_pii_score",
|
|
1777
|
+
"type": "number",
|
|
1778
|
+
"required": false,
|
|
1779
|
+
"description": "Highest PII risk score seen in any turn of the session (0-100)",
|
|
1780
|
+
"range": "0-100"
|
|
1781
|
+
},
|
|
1782
|
+
{
|
|
1783
|
+
"key": "session_max_secret_score",
|
|
1784
|
+
"type": "number",
|
|
1785
|
+
"required": false,
|
|
1786
|
+
"description": "Highest secret detection score seen in any turn of the session (0-100)",
|
|
1787
|
+
"range": "0-100"
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
"key": "session_cumulative_risk_score",
|
|
1791
|
+
"type": "number",
|
|
1792
|
+
"required": false,
|
|
1793
|
+
"description": "Sum of per-turn risk scores across the session. Catches death-by-a-thousand-cuts where no single turn is high but cumulative risk is significant"
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
"key": "session_max_sensitivity",
|
|
1749
1797
|
"type": "string",
|
|
1750
1798
|
"required": false,
|
|
1751
|
-
"description": "
|
|
1799
|
+
"description": "Highest data-sensitivity tier observed across the session (e.g. 'public', 'internal', 'confidential', 'restricted')"
|
|
1752
1800
|
},
|
|
1753
1801
|
{
|
|
1754
|
-
"key": "
|
|
1802
|
+
"key": "session_original_request",
|
|
1755
1803
|
"type": "string",
|
|
1756
1804
|
"required": false,
|
|
1757
|
-
"description": "
|
|
1805
|
+
"description": "The session's first user request, retained for drift / goal-hijack policies that compare later turns against the original intent"
|
|
1758
1806
|
},
|
|
1759
1807
|
{
|
|
1760
|
-
"key": "
|
|
1808
|
+
"key": "agent_id",
|
|
1761
1809
|
"type": "string",
|
|
1762
1810
|
"required": false,
|
|
1763
|
-
"description": "
|
|
1811
|
+
"description": "Unique identifier of the authenticated AI agent making this request. Empty string for human user requests."
|
|
1764
1812
|
},
|
|
1765
1813
|
{
|
|
1766
|
-
"key": "
|
|
1767
|
-
"type": "
|
|
1814
|
+
"key": "agent_type",
|
|
1815
|
+
"type": "string",
|
|
1768
1816
|
"required": false,
|
|
1769
|
-
"description": "
|
|
1817
|
+
"description": "Type of the authenticated agent: 'orchestrator', 'autonomous', 'tool_agent', or 'human_proxy'. Empty string for human users."
|
|
1770
1818
|
},
|
|
1771
1819
|
{
|
|
1772
|
-
"key": "
|
|
1773
|
-
"type": "
|
|
1820
|
+
"key": "agent_trust_level",
|
|
1821
|
+
"type": "string",
|
|
1774
1822
|
"required": false,
|
|
1775
|
-
"description": "
|
|
1823
|
+
"description": "Trust level of the authenticated agent: 'first_party', 'verified_third_party', or 'unverified'."
|
|
1776
1824
|
},
|
|
1777
1825
|
{
|
|
1778
|
-
"key": "
|
|
1779
|
-
"type": "
|
|
1826
|
+
"key": "agent_framework",
|
|
1827
|
+
"type": "string",
|
|
1780
1828
|
"required": false,
|
|
1781
|
-
"description": "
|
|
1782
|
-
"range": "0-100"
|
|
1829
|
+
"description": "Framework or SDK the agent is built with (e.g., 'claude-code', 'langchain', 'crewai', 'autogen')."
|
|
1783
1830
|
},
|
|
1784
1831
|
{
|
|
1785
|
-
"key": "
|
|
1832
|
+
"key": "agent_publisher",
|
|
1786
1833
|
"type": "string",
|
|
1787
1834
|
"required": false,
|
|
1788
|
-
"description": "
|
|
1835
|
+
"description": "Organization that published the agent (e.g., 'anthropic', 'internal', 'acme-corp')."
|
|
1789
1836
|
},
|
|
1790
1837
|
{
|
|
1791
|
-
"key": "
|
|
1792
|
-
"type": "
|
|
1838
|
+
"key": "flow_confidentiality",
|
|
1839
|
+
"type": "string",
|
|
1793
1840
|
"required": false,
|
|
1794
|
-
"description": "
|
|
1841
|
+
"description": "Confidentiality tier of the data this action carries or targets (ADR 0020): 'public', 'internal', 'confidential', 'restricted', or 'unknown'. Shares the ladder with session_max_sensitivity but is a per-value fact, not a session scalar. 'unknown' MUST NOT be treated as 'public' — guard with has and let policy DENY/STEP_UP/DEFER per flow_resolution_status."
|
|
1795
1842
|
},
|
|
1796
1843
|
{
|
|
1797
|
-
"key": "
|
|
1844
|
+
"key": "flow_integrity",
|
|
1798
1845
|
"type": "string",
|
|
1799
1846
|
"required": false,
|
|
1800
|
-
"description": "
|
|
1847
|
+
"description": "Integrity/influence tier of the data this action carries (ADR 0020): 'trusted', 'untrusted', 'mixed', or 'unknown'. Orthogonal to confidentiality: untrusted content may inform a pure analysis but MUST NOT authorize a side-effecting sink. Least-trusted contributor wins on join."
|
|
1801
1848
|
},
|
|
1802
1849
|
{
|
|
1803
|
-
"key": "
|
|
1804
|
-
"type": "
|
|
1850
|
+
"key": "flow_data_types",
|
|
1851
|
+
"type": "array",
|
|
1805
1852
|
"required": false,
|
|
1806
|
-
"description": "
|
|
1807
|
-
"range": "0-100"
|
|
1853
|
+
"description": "Sensitive data categories present in the value (ADR 0020), e.g. 'pii', 'secrets', 'source_code', 'financial', 'health'. Union of all contributing inputs. Set<String>."
|
|
1808
1854
|
},
|
|
1809
1855
|
{
|
|
1810
|
-
"key": "
|
|
1811
|
-
"type": "
|
|
1856
|
+
"key": "flow_compartments",
|
|
1857
|
+
"type": "array",
|
|
1812
1858
|
"required": false,
|
|
1813
|
-
"description": "
|
|
1859
|
+
"description": "Compartments the value belongs to (ADR 0020), e.g. 'tenant:acme', 'customer:123', 'project:x'. Union of all contributing inputs — cross-compartment composition is expressible by cardinality. Set<String>."
|
|
1814
1860
|
},
|
|
1815
1861
|
{
|
|
1816
|
-
"key": "
|
|
1862
|
+
"key": "flow_resolution_status",
|
|
1817
1863
|
"type": "string",
|
|
1818
1864
|
"required": false,
|
|
1819
|
-
"description": "
|
|
1865
|
+
"description": "How the flow label was resolved (ADR 0020): 'known', 'inferred', 'unknown', or 'conflicted'. Policy authors choose the posture for 'unknown' per sink (DENY external, STEP_UP, DEFER while a classifier runs, or allow-and-record). Never silently resolves to public."
|
|
1820
1866
|
},
|
|
1821
1867
|
{
|
|
1822
|
-
"key": "
|
|
1823
|
-
"type": "
|
|
1868
|
+
"key": "flow_origins",
|
|
1869
|
+
"type": "array",
|
|
1824
1870
|
"required": false,
|
|
1825
|
-
"description": "
|
|
1826
|
-
"range": "0-100"
|
|
1871
|
+
"description": "Origin kinds that produced or influenced the value (ADR 0020): 'mcp_tool_result', 'model', 'file', 'database', 'user'. Provenance fact for lineage-aware policy. Set<String>."
|
|
1827
1872
|
},
|
|
1828
1873
|
{
|
|
1829
|
-
"key": "
|
|
1874
|
+
"key": "flow_sink",
|
|
1830
1875
|
"type": "string",
|
|
1831
1876
|
"required": false,
|
|
1832
|
-
"description": "
|
|
1877
|
+
"description": "Logical destination this action releases the value to (ADR 0020), e.g. 'external_model', 'local_model', 'external_mcp', 'trusted_mcp', 'user_secure_output', 'public_network', 'file'. The 'where' half of a flow decision — pair with flow_confidentiality/flow_integrity."
|
|
1833
1878
|
},
|
|
1834
1879
|
{
|
|
1835
|
-
"key": "
|
|
1836
|
-
"type": "
|
|
1880
|
+
"key": "flow_sink_is_external",
|
|
1881
|
+
"type": "boolean",
|
|
1837
1882
|
"required": false,
|
|
1838
|
-
"description": "
|
|
1883
|
+
"description": "Whether the destination is outside the tenant trust boundary (ADR 0020). Lets a single policy express 'confidential data MUST NOT leave to any external sink' without enumerating sink ids."
|
|
1839
1884
|
},
|
|
1840
1885
|
{
|
|
1841
|
-
"key": "
|
|
1886
|
+
"key": "flow_sink_effects",
|
|
1842
1887
|
"type": "array",
|
|
1843
1888
|
"required": false,
|
|
1844
|
-
"description": "
|
|
1889
|
+
"description": "Side effects the destination can exercise (ADR 0020), e.g. 'network.send', 'financial.transfer', 'filesystem.write'. Enables 'untrusted content MUST NOT reach a financial.transfer sink'. Set<String>."
|
|
1845
1890
|
},
|
|
1846
1891
|
{
|
|
1847
|
-
"key": "
|
|
1848
|
-
"type": "
|
|
1892
|
+
"key": "principal_clearances",
|
|
1893
|
+
"type": "array",
|
|
1849
1894
|
"required": false,
|
|
1850
|
-
"description": "
|
|
1851
|
-
"range": "0-100"
|
|
1895
|
+
"description": "Clearances AuthN/ZeroID mints for the principal (ADR 0020 D8), e.g. 'restricted', 'pii'. Coarse scopes gate the capability; clearances gate which protected data that capability may touch. Set<String>."
|
|
1852
1896
|
},
|
|
1853
1897
|
{
|
|
1854
|
-
"key": "
|
|
1855
|
-
"type": "
|
|
1898
|
+
"key": "principal_compartments",
|
|
1899
|
+
"type": "array",
|
|
1856
1900
|
"required": false,
|
|
1857
|
-
"description": "
|
|
1901
|
+
"description": "Compartments the principal is admitted to (ADR 0020 D8), e.g. 'tenant:acme', 'customer:123'. A flow into a compartment the principal lacks is deniable independent of confidentiality tier. Set<String>."
|
|
1858
1902
|
},
|
|
1859
1903
|
{
|
|
1860
|
-
"key": "
|
|
1861
|
-
"type": "
|
|
1904
|
+
"key": "surface",
|
|
1905
|
+
"type": "string",
|
|
1906
|
+
"required": true,
|
|
1907
|
+
"description": "Origin surface of the request (ADR 0012 D14.2) — REQUIRED; projected by Shield from the ingress product, never user-supplied. Values are the product identifiers: 'guardrails', 'overwatch', 'ai_gateway' ('sentry' joins at D17 phase 2). The 'Applies to' narrowing target: test with an ordinary condition (context.surface == 'ai_gateway'); no 'has' guard needed because it is required. A policy with no surface condition applies to every surface, including ones added later."
|
|
1908
|
+
}
|
|
1909
|
+
]
|
|
1910
|
+
},
|
|
1911
|
+
{
|
|
1912
|
+
"name": "write_file",
|
|
1913
|
+
"description": "Write file operations for preventing writes of sensitive content",
|
|
1914
|
+
"context_attributes": [
|
|
1915
|
+
{
|
|
1916
|
+
"key": "role",
|
|
1917
|
+
"type": "string",
|
|
1862
1918
|
"required": false,
|
|
1863
|
-
"description": "
|
|
1864
|
-
"range": "0-100"
|
|
1919
|
+
"description": "Caller's RBAC role projected from the principal's token"
|
|
1865
1920
|
},
|
|
1866
1921
|
{
|
|
1867
|
-
"key": "
|
|
1868
|
-
"type": "
|
|
1922
|
+
"key": "privilege_scope",
|
|
1923
|
+
"type": "array",
|
|
1869
1924
|
"required": false,
|
|
1870
|
-
"description": "
|
|
1925
|
+
"description": "Privilege-scope strings granted to the caller"
|
|
1871
1926
|
},
|
|
1872
1927
|
{
|
|
1873
|
-
"key": "
|
|
1874
|
-
"type": "
|
|
1928
|
+
"key": "identity_type",
|
|
1929
|
+
"type": "string",
|
|
1875
1930
|
"required": false,
|
|
1876
|
-
"description": "
|
|
1877
|
-
"range": "0-100"
|
|
1931
|
+
"description": "Principal identity class: 'human', 'agent', 'service', or 'mcp_server'"
|
|
1878
1932
|
},
|
|
1879
1933
|
{
|
|
1880
|
-
"key": "
|
|
1881
|
-
"type": "
|
|
1934
|
+
"key": "principal",
|
|
1935
|
+
"type": "string",
|
|
1882
1936
|
"required": false,
|
|
1883
|
-
"description": "
|
|
1937
|
+
"description": "Stable principal identifier"
|
|
1938
|
+
},
|
|
1939
|
+
{
|
|
1940
|
+
"key": "request_id",
|
|
1941
|
+
"type": "string",
|
|
1942
|
+
"required": true,
|
|
1943
|
+
"description": "Unique identifier for this request"
|
|
1944
|
+
},
|
|
1945
|
+
{
|
|
1946
|
+
"key": "timestamp",
|
|
1947
|
+
"type": "number",
|
|
1948
|
+
"required": true,
|
|
1949
|
+
"description": "Unix timestamp in milliseconds"
|
|
1884
1950
|
},
|
|
1885
|
-
{
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1951
|
+
{
|
|
1952
|
+
"key": "source",
|
|
1953
|
+
"type": "string",
|
|
1954
|
+
"required": false,
|
|
1955
|
+
"description": "Traffic origin: 'ide' | 'cli' | 'api' | 'browser'"
|
|
1956
|
+
},
|
|
1957
|
+
{
|
|
1958
|
+
"key": "event",
|
|
1959
|
+
"type": "string",
|
|
1960
|
+
"required": false,
|
|
1961
|
+
"description": "Event type: 'file_write'"
|
|
1962
|
+
},
|
|
1963
|
+
{
|
|
1964
|
+
"key": "user_email",
|
|
1965
|
+
"type": "string",
|
|
1966
|
+
"required": false,
|
|
1967
|
+
"description": "Human operator email (IDE sessions)"
|
|
1968
|
+
},
|
|
1969
|
+
{
|
|
1970
|
+
"key": "cwd",
|
|
1971
|
+
"type": "string",
|
|
1972
|
+
"required": false,
|
|
1973
|
+
"description": "Current working directory"
|
|
1974
|
+
},
|
|
1975
|
+
{
|
|
1976
|
+
"key": "workspace_root",
|
|
1977
|
+
"type": "string",
|
|
1978
|
+
"required": false,
|
|
1979
|
+
"description": "IDE workspace root path"
|
|
1980
|
+
},
|
|
1981
|
+
{
|
|
1982
|
+
"key": "path",
|
|
1983
|
+
"type": "string",
|
|
1984
|
+
"required": false,
|
|
1985
|
+
"description": "File path being written. Use for path-based blocking policies."
|
|
1986
|
+
},
|
|
1987
|
+
{
|
|
1988
|
+
"key": "invisible_chars_detected",
|
|
1989
|
+
"type": "boolean",
|
|
1990
|
+
"required": false,
|
|
1991
|
+
"description": "Whether invisible Unicode characters were detected in the content being written"
|
|
1992
|
+
},
|
|
1993
|
+
{
|
|
1994
|
+
"key": "invisible_chars_score",
|
|
1995
|
+
"type": "number",
|
|
1996
|
+
"required": false,
|
|
1997
|
+
"description": "Invisible character attack severity score in write content (0-100).",
|
|
1998
|
+
"range": "0-100"
|
|
1999
|
+
},
|
|
2000
|
+
{
|
|
2001
|
+
"key": "secrets_detected",
|
|
2002
|
+
"type": "boolean",
|
|
2003
|
+
"required": false,
|
|
2004
|
+
"description": "Whether secrets were detected in the content being written"
|
|
2005
|
+
},
|
|
2006
|
+
{
|
|
2007
|
+
"key": "secret_count",
|
|
2008
|
+
"type": "number",
|
|
2009
|
+
"required": false,
|
|
2010
|
+
"description": "Total number of secret matches found in write content"
|
|
2011
|
+
},
|
|
2012
|
+
{
|
|
2013
|
+
"key": "secret_types",
|
|
2014
|
+
"type": "array",
|
|
2015
|
+
"required": false,
|
|
2016
|
+
"description": "Array of secret types found in write content"
|
|
2017
|
+
},
|
|
2018
|
+
{
|
|
2019
|
+
"key": "pii_detected",
|
|
2020
|
+
"type": "boolean",
|
|
2021
|
+
"required": false,
|
|
2022
|
+
"description": "Whether PII was detected in the content being written"
|
|
2023
|
+
},
|
|
2024
|
+
{
|
|
2025
|
+
"key": "pii_types",
|
|
2026
|
+
"type": "array",
|
|
2027
|
+
"required": false,
|
|
2028
|
+
"description": "Array of PII types found in write content"
|
|
2029
|
+
},
|
|
2030
|
+
{
|
|
2031
|
+
"key": "path_traversal_detected",
|
|
2032
|
+
"type": "boolean",
|
|
2033
|
+
"required": false,
|
|
2034
|
+
"description": "Whether path traversal patterns were detected in the file path"
|
|
2035
|
+
},
|
|
2036
|
+
{
|
|
2037
|
+
"key": "path_traversal_severity",
|
|
2038
|
+
"type": "string",
|
|
2039
|
+
"required": false,
|
|
2040
|
+
"description": "Severity of path traversal in the file write path"
|
|
2041
|
+
},
|
|
2042
|
+
{
|
|
2043
|
+
"key": "path_traversal_type",
|
|
2044
|
+
"type": "string",
|
|
2045
|
+
"required": false,
|
|
2046
|
+
"description": "Type of path traversal detected"
|
|
2047
|
+
},
|
|
2048
|
+
{
|
|
2049
|
+
"key": "highest_severity",
|
|
2050
|
+
"type": "string",
|
|
2051
|
+
"required": false,
|
|
2052
|
+
"description": "Highest severity level across all detection engines"
|
|
2053
|
+
},
|
|
2054
|
+
{
|
|
2055
|
+
"key": "threat_count",
|
|
2056
|
+
"type": "number",
|
|
2057
|
+
"required": false,
|
|
2058
|
+
"description": "Total number of threats detected"
|
|
2059
|
+
},
|
|
2060
|
+
{
|
|
2061
|
+
"key": "detected_threats",
|
|
2062
|
+
"type": "array",
|
|
2063
|
+
"required": false,
|
|
2064
|
+
"description": "Array of specific threat names detected"
|
|
2065
|
+
},
|
|
2066
|
+
{
|
|
2067
|
+
"key": "budget_remaining_pct",
|
|
2068
|
+
"type": "number",
|
|
2069
|
+
"required": false,
|
|
2070
|
+
"description": "Remaining token budget as percentage (0-100).",
|
|
2071
|
+
"range": "0-100"
|
|
2072
|
+
},
|
|
2073
|
+
{
|
|
2074
|
+
"key": "budget_exceeded",
|
|
2075
|
+
"type": "boolean",
|
|
2076
|
+
"required": false,
|
|
2077
|
+
"description": "Whether the token budget has been exceeded"
|
|
2078
|
+
},
|
|
2079
|
+
{
|
|
2080
|
+
"key": "rpm_remaining_pct",
|
|
2081
|
+
"type": "number",
|
|
2082
|
+
"required": false,
|
|
2083
|
+
"description": "Remaining RPM percentage (0-100). Gateway-metered, Shield-decided (ADR 0014).",
|
|
2084
|
+
"range": "0-100"
|
|
2085
|
+
},
|
|
2086
|
+
{
|
|
2087
|
+
"key": "rpm_exceeded",
|
|
2088
|
+
"type": "boolean",
|
|
2089
|
+
"required": false,
|
|
2090
|
+
"description": "Whether the RPM limit has been exceeded"
|
|
2091
|
+
},
|
|
2092
|
+
{
|
|
2093
|
+
"key": "tpm_remaining_pct",
|
|
2094
|
+
"type": "number",
|
|
2095
|
+
"required": false,
|
|
2096
|
+
"description": "Remaining TPM percentage (0-100). Gateway-metered, Shield-decided (ADR 0014).",
|
|
2097
|
+
"range": "0-100"
|
|
2098
|
+
},
|
|
2099
|
+
{
|
|
2100
|
+
"key": "tpm_exceeded",
|
|
2101
|
+
"type": "boolean",
|
|
2102
|
+
"required": false,
|
|
2103
|
+
"description": "Whether the TPM limit has been exceeded"
|
|
2104
|
+
},
|
|
2105
|
+
{
|
|
2106
|
+
"key": "session_pii_detected",
|
|
2107
|
+
"type": "boolean",
|
|
2108
|
+
"required": false,
|
|
2109
|
+
"description": "Whether PII was detected in any previous turn of the session"
|
|
2110
|
+
},
|
|
2111
|
+
{
|
|
2112
|
+
"key": "session_pii_types",
|
|
2113
|
+
"type": "array",
|
|
2114
|
+
"required": false,
|
|
2115
|
+
"description": "PII types detected across the session (accumulated)"
|
|
2116
|
+
},
|
|
2117
|
+
{
|
|
2118
|
+
"key": "session_secrets_detected",
|
|
2119
|
+
"type": "boolean",
|
|
2120
|
+
"required": false,
|
|
2121
|
+
"description": "Whether secrets were detected in any previous turn of the session"
|
|
2122
|
+
},
|
|
2123
|
+
{
|
|
2124
|
+
"key": "session_secret_types",
|
|
2125
|
+
"type": "array",
|
|
2126
|
+
"required": false,
|
|
2127
|
+
"description": "Secret types detected across the session (accumulated)"
|
|
2128
|
+
},
|
|
2129
|
+
{
|
|
2130
|
+
"key": "session_injection_detected",
|
|
2131
|
+
"type": "boolean",
|
|
2132
|
+
"required": false,
|
|
2133
|
+
"description": "Whether prompt injection was detected in any previous turn of the session"
|
|
2134
|
+
},
|
|
2135
|
+
{
|
|
2136
|
+
"key": "session_command_injection",
|
|
2137
|
+
"type": "boolean",
|
|
2138
|
+
"required": false,
|
|
2139
|
+
"description": "Whether command injection was detected in any previous turn of the session"
|
|
2140
|
+
},
|
|
2141
|
+
{
|
|
2142
|
+
"key": "session_threat_turns",
|
|
2143
|
+
"type": "number",
|
|
2144
|
+
"required": false,
|
|
2145
|
+
"description": "Number of turns in the session where threats were detected"
|
|
2146
|
+
},
|
|
2147
|
+
{
|
|
2148
|
+
"key": "session_max_injection_score",
|
|
2149
|
+
"type": "number",
|
|
2150
|
+
"required": false,
|
|
2151
|
+
"description": "Highest prompt injection score seen in any turn of the session (0-100). Use for tiered responses: >75 hard block, >50 restrict permissions",
|
|
2152
|
+
"range": "0-100"
|
|
2153
|
+
},
|
|
2154
|
+
{
|
|
2155
|
+
"key": "session_max_jailbreak_score",
|
|
2156
|
+
"type": "number",
|
|
2157
|
+
"required": false,
|
|
2158
|
+
"description": "Highest jailbreak detection score seen in any turn of the session (0-100)",
|
|
2159
|
+
"range": "0-100"
|
|
2160
|
+
},
|
|
2161
|
+
{
|
|
2162
|
+
"key": "session_max_command_injection_score",
|
|
2163
|
+
"type": "number",
|
|
2164
|
+
"required": false,
|
|
2165
|
+
"description": "Highest command injection score seen in any turn of the session (0-100)",
|
|
2166
|
+
"range": "0-100"
|
|
2167
|
+
},
|
|
2168
|
+
{
|
|
2169
|
+
"key": "session_max_pii_score",
|
|
2170
|
+
"type": "number",
|
|
2171
|
+
"required": false,
|
|
2172
|
+
"description": "Highest PII risk score seen in any turn of the session (0-100)",
|
|
2173
|
+
"range": "0-100"
|
|
2174
|
+
},
|
|
2175
|
+
{
|
|
2176
|
+
"key": "session_max_secret_score",
|
|
2177
|
+
"type": "number",
|
|
2178
|
+
"required": false,
|
|
2179
|
+
"description": "Highest secret detection score seen in any turn of the session (0-100)",
|
|
2180
|
+
"range": "0-100"
|
|
2181
|
+
},
|
|
2182
|
+
{
|
|
2183
|
+
"key": "session_cumulative_risk_score",
|
|
2184
|
+
"type": "number",
|
|
2185
|
+
"required": false,
|
|
2186
|
+
"description": "Sum of per-turn risk scores across the session. Catches death-by-a-thousand-cuts where no single turn is high but cumulative risk is significant"
|
|
2187
|
+
},
|
|
2188
|
+
{
|
|
2189
|
+
"key": "session_max_sensitivity",
|
|
2190
|
+
"type": "string",
|
|
2191
|
+
"required": false,
|
|
2192
|
+
"description": "Highest data-sensitivity tier observed across the session (e.g. 'public', 'internal', 'confidential', 'restricted')"
|
|
2193
|
+
},
|
|
2194
|
+
{
|
|
2195
|
+
"key": "session_original_request",
|
|
2196
|
+
"type": "string",
|
|
2197
|
+
"required": false,
|
|
2198
|
+
"description": "The session's first user request, retained for drift / goal-hijack policies that compare later turns against the original intent"
|
|
2199
|
+
},
|
|
2200
|
+
{
|
|
2201
|
+
"key": "agent_id",
|
|
2202
|
+
"type": "string",
|
|
2203
|
+
"required": false,
|
|
2204
|
+
"description": "Unique identifier of the authenticated AI agent making this request. Empty string for human user requests."
|
|
2205
|
+
},
|
|
2206
|
+
{
|
|
2207
|
+
"key": "agent_type",
|
|
2208
|
+
"type": "string",
|
|
2209
|
+
"required": false,
|
|
2210
|
+
"description": "Type of the authenticated agent: 'orchestrator', 'autonomous', 'tool_agent', or 'human_proxy'. Empty string for human users."
|
|
2211
|
+
},
|
|
2212
|
+
{
|
|
2213
|
+
"key": "agent_trust_level",
|
|
2214
|
+
"type": "string",
|
|
2215
|
+
"required": false,
|
|
2216
|
+
"description": "Trust level of the authenticated agent: 'first_party', 'verified_third_party', or 'unverified'."
|
|
2217
|
+
},
|
|
2218
|
+
{
|
|
2219
|
+
"key": "agent_framework",
|
|
2220
|
+
"type": "string",
|
|
2221
|
+
"required": false,
|
|
2222
|
+
"description": "Framework or SDK the agent is built with (e.g., 'claude-code', 'langchain', 'crewai', 'autogen')."
|
|
2223
|
+
},
|
|
2224
|
+
{
|
|
2225
|
+
"key": "agent_publisher",
|
|
2226
|
+
"type": "string",
|
|
2227
|
+
"required": false,
|
|
2228
|
+
"description": "Organization that published the agent (e.g., 'anthropic', 'internal', 'acme-corp')."
|
|
2229
|
+
},
|
|
2230
|
+
{
|
|
2231
|
+
"key": "flow_confidentiality",
|
|
2232
|
+
"type": "string",
|
|
2233
|
+
"required": false,
|
|
2234
|
+
"description": "Confidentiality tier of the data this action carries or targets (ADR 0020): 'public', 'internal', 'confidential', 'restricted', or 'unknown'. Shares the ladder with session_max_sensitivity but is a per-value fact, not a session scalar. 'unknown' MUST NOT be treated as 'public' — guard with has and let policy DENY/STEP_UP/DEFER per flow_resolution_status."
|
|
2235
|
+
},
|
|
2236
|
+
{
|
|
2237
|
+
"key": "flow_integrity",
|
|
2238
|
+
"type": "string",
|
|
2239
|
+
"required": false,
|
|
2240
|
+
"description": "Integrity/influence tier of the data this action carries (ADR 0020): 'trusted', 'untrusted', 'mixed', or 'unknown'. Orthogonal to confidentiality: untrusted content may inform a pure analysis but MUST NOT authorize a side-effecting sink. Least-trusted contributor wins on join."
|
|
2241
|
+
},
|
|
2242
|
+
{
|
|
2243
|
+
"key": "flow_data_types",
|
|
2244
|
+
"type": "array",
|
|
2245
|
+
"required": false,
|
|
2246
|
+
"description": "Sensitive data categories present in the value (ADR 0020), e.g. 'pii', 'secrets', 'source_code', 'financial', 'health'. Union of all contributing inputs. Set<String>."
|
|
2247
|
+
},
|
|
2248
|
+
{
|
|
2249
|
+
"key": "flow_compartments",
|
|
2250
|
+
"type": "array",
|
|
2251
|
+
"required": false,
|
|
2252
|
+
"description": "Compartments the value belongs to (ADR 0020), e.g. 'tenant:acme', 'customer:123', 'project:x'. Union of all contributing inputs — cross-compartment composition is expressible by cardinality. Set<String>."
|
|
2253
|
+
},
|
|
2254
|
+
{
|
|
2255
|
+
"key": "flow_resolution_status",
|
|
2256
|
+
"type": "string",
|
|
2257
|
+
"required": false,
|
|
2258
|
+
"description": "How the flow label was resolved (ADR 0020): 'known', 'inferred', 'unknown', or 'conflicted'. Policy authors choose the posture for 'unknown' per sink (DENY external, STEP_UP, DEFER while a classifier runs, or allow-and-record). Never silently resolves to public."
|
|
2259
|
+
},
|
|
2260
|
+
{
|
|
2261
|
+
"key": "flow_origins",
|
|
2262
|
+
"type": "array",
|
|
2263
|
+
"required": false,
|
|
2264
|
+
"description": "Origin kinds that produced or influenced the value (ADR 0020): 'mcp_tool_result', 'model', 'file', 'database', 'user'. Provenance fact for lineage-aware policy. Set<String>."
|
|
2265
|
+
},
|
|
2266
|
+
{
|
|
2267
|
+
"key": "flow_sink",
|
|
2268
|
+
"type": "string",
|
|
2269
|
+
"required": false,
|
|
2270
|
+
"description": "Logical destination this action releases the value to (ADR 0020), e.g. 'external_model', 'local_model', 'external_mcp', 'trusted_mcp', 'user_secure_output', 'public_network', 'file'. The 'where' half of a flow decision — pair with flow_confidentiality/flow_integrity."
|
|
2271
|
+
},
|
|
2272
|
+
{
|
|
2273
|
+
"key": "flow_sink_is_external",
|
|
2274
|
+
"type": "boolean",
|
|
2275
|
+
"required": false,
|
|
2276
|
+
"description": "Whether the destination is outside the tenant trust boundary (ADR 0020). Lets a single policy express 'confidential data MUST NOT leave to any external sink' without enumerating sink ids."
|
|
2277
|
+
},
|
|
2278
|
+
{
|
|
2279
|
+
"key": "flow_sink_effects",
|
|
2280
|
+
"type": "array",
|
|
2281
|
+
"required": false,
|
|
2282
|
+
"description": "Side effects the destination can exercise (ADR 0020), e.g. 'network.send', 'financial.transfer', 'filesystem.write'. Enables 'untrusted content MUST NOT reach a financial.transfer sink'. Set<String>."
|
|
2283
|
+
},
|
|
2284
|
+
{
|
|
2285
|
+
"key": "principal_clearances",
|
|
2286
|
+
"type": "array",
|
|
2287
|
+
"required": false,
|
|
2288
|
+
"description": "Clearances AuthN/ZeroID mints for the principal (ADR 0020 D8), e.g. 'restricted', 'pii'. Coarse scopes gate the capability; clearances gate which protected data that capability may touch. Set<String>."
|
|
2289
|
+
},
|
|
2290
|
+
{
|
|
2291
|
+
"key": "principal_compartments",
|
|
2292
|
+
"type": "array",
|
|
2293
|
+
"required": false,
|
|
2294
|
+
"description": "Compartments the principal is admitted to (ADR 0020 D8), e.g. 'tenant:acme', 'customer:123'. A flow into a compartment the principal lacks is deniable independent of confidentiality tier. Set<String>."
|
|
2295
|
+
},
|
|
2296
|
+
{
|
|
2297
|
+
"key": "surface",
|
|
2298
|
+
"type": "string",
|
|
2299
|
+
"required": true,
|
|
2300
|
+
"description": "Origin surface of the request (ADR 0012 D14.2) — REQUIRED; projected by Shield from the ingress product, never user-supplied. Values are the product identifiers: 'guardrails', 'overwatch', 'ai_gateway' ('sentry' joins at D17 phase 2). The 'Applies to' narrowing target: test with an ordinary condition (context.surface == 'ai_gateway'); no 'has' guard needed because it is required. A policy with no surface condition applies to every surface, including ones added later."
|
|
2301
|
+
}
|
|
2302
|
+
]
|
|
2303
|
+
},
|
|
2304
|
+
{
|
|
2305
|
+
"name": "connect_server",
|
|
2306
|
+
"description": "Connect to an MCP server, used to control which MCP servers are allowed",
|
|
2307
|
+
"context_attributes": [
|
|
2308
|
+
{
|
|
2309
|
+
"key": "role",
|
|
2310
|
+
"type": "string",
|
|
2311
|
+
"required": false,
|
|
2312
|
+
"description": "Caller's RBAC role projected from the principal's token"
|
|
2313
|
+
},
|
|
2314
|
+
{
|
|
2315
|
+
"key": "privilege_scope",
|
|
2316
|
+
"type": "array",
|
|
2317
|
+
"required": false,
|
|
2318
|
+
"description": "Privilege-scope strings granted to the caller"
|
|
2319
|
+
},
|
|
2320
|
+
{
|
|
2321
|
+
"key": "identity_type",
|
|
2322
|
+
"type": "string",
|
|
2323
|
+
"required": false,
|
|
2324
|
+
"description": "Principal identity class: 'human', 'agent', 'service', or 'mcp_server'"
|
|
2325
|
+
},
|
|
2326
|
+
{
|
|
2327
|
+
"key": "principal",
|
|
2328
|
+
"type": "string",
|
|
2329
|
+
"required": false,
|
|
2330
|
+
"description": "Stable principal identifier"
|
|
2331
|
+
},
|
|
2332
|
+
{
|
|
2333
|
+
"key": "request_id",
|
|
2334
|
+
"type": "string",
|
|
2335
|
+
"required": true,
|
|
2336
|
+
"description": "Unique identifier for this request"
|
|
2337
|
+
},
|
|
2338
|
+
{
|
|
2339
|
+
"key": "timestamp",
|
|
2340
|
+
"type": "number",
|
|
2341
|
+
"required": true,
|
|
2342
|
+
"description": "Unix timestamp in milliseconds"
|
|
2343
|
+
},
|
|
2344
|
+
{
|
|
2345
|
+
"key": "source",
|
|
2346
|
+
"type": "string",
|
|
2347
|
+
"required": false,
|
|
2348
|
+
"description": "Traffic origin: 'ide' | 'cli' | 'api' | 'browser'"
|
|
2349
|
+
},
|
|
2350
|
+
{
|
|
2351
|
+
"key": "event",
|
|
2352
|
+
"type": "string",
|
|
2353
|
+
"required": false,
|
|
2354
|
+
"description": "Event type: 'connect_server'"
|
|
2355
|
+
},
|
|
2356
|
+
{
|
|
2357
|
+
"key": "user_email",
|
|
2358
|
+
"type": "string",
|
|
2359
|
+
"required": false,
|
|
2360
|
+
"description": "Human operator email (IDE sessions)"
|
|
2361
|
+
},
|
|
2362
|
+
{
|
|
2363
|
+
"key": "cwd",
|
|
2364
|
+
"type": "string",
|
|
2365
|
+
"required": false,
|
|
2366
|
+
"description": "Current working directory"
|
|
2367
|
+
},
|
|
2368
|
+
{
|
|
2369
|
+
"key": "workspace_root",
|
|
2370
|
+
"type": "string",
|
|
2371
|
+
"required": false,
|
|
2372
|
+
"description": "IDE workspace root path"
|
|
2373
|
+
},
|
|
2374
|
+
{
|
|
2375
|
+
"key": "mcp_server",
|
|
2376
|
+
"type": "string",
|
|
2377
|
+
"required": false,
|
|
2378
|
+
"description": "Name of the MCP server being connected to"
|
|
2379
|
+
},
|
|
2380
|
+
{
|
|
2381
|
+
"key": "mcp_server_verified",
|
|
2382
|
+
"type": "boolean",
|
|
2383
|
+
"required": false,
|
|
2384
|
+
"description": "Whether the MCP server is from a verified/trusted registry"
|
|
2385
|
+
},
|
|
2386
|
+
{
|
|
2387
|
+
"key": "tool_poisoning_detected",
|
|
2388
|
+
"type": "boolean",
|
|
2389
|
+
"required": false,
|
|
2390
|
+
"description": "Whether tool poisoning was detected in the MCP server's tool descriptions"
|
|
2391
|
+
},
|
|
2392
|
+
{
|
|
2393
|
+
"key": "tool_poisoning_score",
|
|
2394
|
+
"type": "number",
|
|
2395
|
+
"required": false,
|
|
2396
|
+
"description": "Confidence score for tool poisoning in MCP server tools (0-100).",
|
|
2397
|
+
"range": "0-100"
|
|
2398
|
+
},
|
|
2399
|
+
{
|
|
2400
|
+
"key": "tool_poisoning_type",
|
|
2401
|
+
"type": "string",
|
|
2402
|
+
"required": false,
|
|
2403
|
+
"description": "Type of tool poisoning detected: 'hidden_instructions', 'system_prompt_injection', or 'authority_hijack'"
|
|
2404
|
+
},
|
|
2405
|
+
{
|
|
2406
|
+
"key": "mcp_config_risk",
|
|
2407
|
+
"type": "boolean",
|
|
2408
|
+
"required": false,
|
|
2409
|
+
"description": "Whether MCP configuration risk was detected"
|
|
2410
|
+
},
|
|
2411
|
+
{
|
|
2412
|
+
"key": "mcp_risk_type",
|
|
2413
|
+
"type": "string",
|
|
2414
|
+
"required": false,
|
|
2415
|
+
"description": "Type of MCP configuration risk: 'inline_execution', 'suspicious_url', or 'cross_origin'"
|
|
2416
|
+
},
|
|
2417
|
+
{
|
|
2418
|
+
"key": "mcp_risk_score",
|
|
2419
|
+
"type": "number",
|
|
2420
|
+
"required": false,
|
|
2421
|
+
"description": "Risk score for MCP configuration issues (0-100).",
|
|
2422
|
+
"range": "0-100"
|
|
2423
|
+
},
|
|
2424
|
+
{
|
|
2425
|
+
"key": "cross_origin_detected",
|
|
2426
|
+
"type": "boolean",
|
|
2427
|
+
"required": false,
|
|
2428
|
+
"description": "Whether cross-origin escalation patterns were detected"
|
|
2429
|
+
},
|
|
2430
|
+
{
|
|
2431
|
+
"key": "cross_origin_type",
|
|
2432
|
+
"type": "string",
|
|
2433
|
+
"required": false,
|
|
2434
|
+
"description": "Type of cross-origin escalation detected"
|
|
2435
|
+
},
|
|
2436
|
+
{
|
|
2437
|
+
"key": "cross_origin_score",
|
|
2438
|
+
"type": "number",
|
|
2439
|
+
"required": false,
|
|
2440
|
+
"description": "Risk score for cross-origin escalation (0-100).",
|
|
2441
|
+
"range": "0-100"
|
|
2442
|
+
},
|
|
2443
|
+
{
|
|
2444
|
+
"key": "highest_severity",
|
|
2445
|
+
"type": "string",
|
|
2446
|
+
"required": false,
|
|
2447
|
+
"description": "Highest severity level across all detection engines"
|
|
2448
|
+
},
|
|
2449
|
+
{
|
|
2450
|
+
"key": "threat_count",
|
|
2451
|
+
"type": "number",
|
|
2452
|
+
"required": false,
|
|
2453
|
+
"description": "Total number of threats detected"
|
|
2454
|
+
},
|
|
2455
|
+
{
|
|
2456
|
+
"key": "detected_threats",
|
|
2457
|
+
"type": "array",
|
|
2458
|
+
"required": false,
|
|
2459
|
+
"description": "Array of specific threat names detected"
|
|
2460
|
+
},
|
|
2461
|
+
{
|
|
2462
|
+
"key": "budget_remaining_pct",
|
|
2463
|
+
"type": "number",
|
|
2464
|
+
"required": false,
|
|
2465
|
+
"description": "Remaining token budget as percentage (0-100).",
|
|
2466
|
+
"range": "0-100"
|
|
2467
|
+
},
|
|
2468
|
+
{
|
|
2469
|
+
"key": "budget_exceeded",
|
|
2470
|
+
"type": "boolean",
|
|
2471
|
+
"required": false,
|
|
2472
|
+
"description": "Whether the token budget has been exceeded"
|
|
2473
|
+
},
|
|
2474
|
+
{
|
|
2475
|
+
"key": "rpm_remaining_pct",
|
|
2476
|
+
"type": "number",
|
|
2477
|
+
"required": false,
|
|
2478
|
+
"description": "Remaining RPM percentage (0-100). Gateway-metered, Shield-decided (ADR 0014).",
|
|
2479
|
+
"range": "0-100"
|
|
2480
|
+
},
|
|
2481
|
+
{
|
|
2482
|
+
"key": "rpm_exceeded",
|
|
2483
|
+
"type": "boolean",
|
|
2484
|
+
"required": false,
|
|
2485
|
+
"description": "Whether the RPM limit has been exceeded"
|
|
2486
|
+
},
|
|
2487
|
+
{
|
|
2488
|
+
"key": "tpm_remaining_pct",
|
|
2489
|
+
"type": "number",
|
|
2490
|
+
"required": false,
|
|
2491
|
+
"description": "Remaining TPM percentage (0-100). Gateway-metered, Shield-decided (ADR 0014).",
|
|
2492
|
+
"range": "0-100"
|
|
2493
|
+
},
|
|
2494
|
+
{
|
|
2495
|
+
"key": "tpm_exceeded",
|
|
2496
|
+
"type": "boolean",
|
|
2497
|
+
"required": false,
|
|
2498
|
+
"description": "Whether the TPM limit has been exceeded"
|
|
2499
|
+
},
|
|
2500
|
+
{
|
|
2501
|
+
"key": "session_pii_detected",
|
|
2502
|
+
"type": "boolean",
|
|
2503
|
+
"required": false,
|
|
2504
|
+
"description": "Whether PII was detected in any previous turn of the session"
|
|
2505
|
+
},
|
|
2506
|
+
{
|
|
2507
|
+
"key": "session_pii_types",
|
|
2508
|
+
"type": "array",
|
|
2509
|
+
"required": false,
|
|
2510
|
+
"description": "PII types detected across the session (accumulated)"
|
|
2511
|
+
},
|
|
2512
|
+
{
|
|
2513
|
+
"key": "session_secrets_detected",
|
|
2514
|
+
"type": "boolean",
|
|
2515
|
+
"required": false,
|
|
2516
|
+
"description": "Whether secrets were detected in any previous turn of the session"
|
|
2517
|
+
},
|
|
2518
|
+
{
|
|
2519
|
+
"key": "session_secret_types",
|
|
2520
|
+
"type": "array",
|
|
2521
|
+
"required": false,
|
|
2522
|
+
"description": "Secret types detected across the session (accumulated)"
|
|
2523
|
+
},
|
|
2524
|
+
{
|
|
2525
|
+
"key": "session_injection_detected",
|
|
2526
|
+
"type": "boolean",
|
|
2527
|
+
"required": false,
|
|
2528
|
+
"description": "Whether prompt injection was detected in any previous turn of the session"
|
|
2529
|
+
},
|
|
2530
|
+
{
|
|
2531
|
+
"key": "session_command_injection",
|
|
2532
|
+
"type": "boolean",
|
|
2533
|
+
"required": false,
|
|
2534
|
+
"description": "Whether command injection was detected in any previous turn of the session"
|
|
2535
|
+
},
|
|
2536
|
+
{
|
|
2537
|
+
"key": "session_threat_turns",
|
|
2538
|
+
"type": "number",
|
|
2539
|
+
"required": false,
|
|
2540
|
+
"description": "Number of turns in the session where threats were detected"
|
|
2541
|
+
},
|
|
2542
|
+
{
|
|
2543
|
+
"key": "session_max_injection_score",
|
|
2544
|
+
"type": "number",
|
|
2545
|
+
"required": false,
|
|
2546
|
+
"description": "Highest prompt injection score seen in any turn of the session (0-100). Use for tiered responses: >75 hard block, >50 restrict permissions",
|
|
2547
|
+
"range": "0-100"
|
|
2548
|
+
},
|
|
2549
|
+
{
|
|
2550
|
+
"key": "session_max_jailbreak_score",
|
|
2551
|
+
"type": "number",
|
|
2552
|
+
"required": false,
|
|
2553
|
+
"description": "Highest jailbreak detection score seen in any turn of the session (0-100)",
|
|
2554
|
+
"range": "0-100"
|
|
2555
|
+
},
|
|
2556
|
+
{
|
|
2557
|
+
"key": "session_max_command_injection_score",
|
|
2558
|
+
"type": "number",
|
|
2559
|
+
"required": false,
|
|
2560
|
+
"description": "Highest command injection score seen in any turn of the session (0-100)",
|
|
2561
|
+
"range": "0-100"
|
|
2562
|
+
},
|
|
2563
|
+
{
|
|
2564
|
+
"key": "session_max_pii_score",
|
|
2565
|
+
"type": "number",
|
|
2566
|
+
"required": false,
|
|
2567
|
+
"description": "Highest PII risk score seen in any turn of the session (0-100)",
|
|
2568
|
+
"range": "0-100"
|
|
2569
|
+
},
|
|
2570
|
+
{
|
|
2571
|
+
"key": "session_max_secret_score",
|
|
2572
|
+
"type": "number",
|
|
2573
|
+
"required": false,
|
|
2574
|
+
"description": "Highest secret detection score seen in any turn of the session (0-100)",
|
|
2575
|
+
"range": "0-100"
|
|
2576
|
+
},
|
|
2577
|
+
{
|
|
2578
|
+
"key": "session_cumulative_risk_score",
|
|
2579
|
+
"type": "number",
|
|
2580
|
+
"required": false,
|
|
2581
|
+
"description": "Sum of per-turn risk scores across the session. Catches death-by-a-thousand-cuts where no single turn is high but cumulative risk is significant"
|
|
2582
|
+
},
|
|
2583
|
+
{
|
|
2584
|
+
"key": "session_max_sensitivity",
|
|
2585
|
+
"type": "string",
|
|
2586
|
+
"required": false,
|
|
2587
|
+
"description": "Highest data-sensitivity tier observed across the session (e.g. 'public', 'internal', 'confidential', 'restricted')"
|
|
2588
|
+
},
|
|
2589
|
+
{
|
|
2590
|
+
"key": "session_original_request",
|
|
2591
|
+
"type": "string",
|
|
2592
|
+
"required": false,
|
|
2593
|
+
"description": "The session's first user request, retained for drift / goal-hijack policies that compare later turns against the original intent"
|
|
2594
|
+
},
|
|
2595
|
+
{
|
|
2596
|
+
"key": "agent_id",
|
|
2597
|
+
"type": "string",
|
|
2598
|
+
"required": false,
|
|
2599
|
+
"description": "Unique identifier of the authenticated AI agent making this request. Empty string for human user requests."
|
|
2600
|
+
},
|
|
2601
|
+
{
|
|
2602
|
+
"key": "agent_type",
|
|
2603
|
+
"type": "string",
|
|
2604
|
+
"required": false,
|
|
2605
|
+
"description": "Type of the authenticated agent: 'orchestrator', 'autonomous', 'tool_agent', or 'human_proxy'. Empty string for human users."
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
"key": "agent_trust_level",
|
|
2609
|
+
"type": "string",
|
|
2610
|
+
"required": false,
|
|
2611
|
+
"description": "Trust level of the authenticated agent: 'first_party', 'verified_third_party', or 'unverified'."
|
|
2612
|
+
},
|
|
2613
|
+
{
|
|
2614
|
+
"key": "agent_framework",
|
|
2615
|
+
"type": "string",
|
|
2616
|
+
"required": false,
|
|
2617
|
+
"description": "Framework or SDK the agent is built with (e.g., 'claude-code', 'langchain', 'crewai', 'autogen')."
|
|
2618
|
+
},
|
|
2619
|
+
{
|
|
2620
|
+
"key": "agent_publisher",
|
|
2621
|
+
"type": "string",
|
|
2622
|
+
"required": false,
|
|
2623
|
+
"description": "Organization that published the agent (e.g., 'anthropic', 'internal', 'acme-corp')."
|
|
2624
|
+
},
|
|
2625
|
+
{
|
|
2626
|
+
"key": "flow_confidentiality",
|
|
2627
|
+
"type": "string",
|
|
2628
|
+
"required": false,
|
|
2629
|
+
"description": "Confidentiality tier of the data this action carries or targets (ADR 0020): 'public', 'internal', 'confidential', 'restricted', or 'unknown'. Shares the ladder with session_max_sensitivity but is a per-value fact, not a session scalar. 'unknown' MUST NOT be treated as 'public' — guard with has and let policy DENY/STEP_UP/DEFER per flow_resolution_status."
|
|
2630
|
+
},
|
|
2631
|
+
{
|
|
2632
|
+
"key": "flow_integrity",
|
|
2633
|
+
"type": "string",
|
|
2634
|
+
"required": false,
|
|
2635
|
+
"description": "Integrity/influence tier of the data this action carries (ADR 0020): 'trusted', 'untrusted', 'mixed', or 'unknown'. Orthogonal to confidentiality: untrusted content may inform a pure analysis but MUST NOT authorize a side-effecting sink. Least-trusted contributor wins on join."
|
|
2636
|
+
},
|
|
2637
|
+
{
|
|
2638
|
+
"key": "flow_data_types",
|
|
2639
|
+
"type": "array",
|
|
2640
|
+
"required": false,
|
|
2641
|
+
"description": "Sensitive data categories present in the value (ADR 0020), e.g. 'pii', 'secrets', 'source_code', 'financial', 'health'. Union of all contributing inputs. Set<String>."
|
|
2642
|
+
},
|
|
2643
|
+
{
|
|
2644
|
+
"key": "flow_compartments",
|
|
2645
|
+
"type": "array",
|
|
2646
|
+
"required": false,
|
|
2647
|
+
"description": "Compartments the value belongs to (ADR 0020), e.g. 'tenant:acme', 'customer:123', 'project:x'. Union of all contributing inputs — cross-compartment composition is expressible by cardinality. Set<String>."
|
|
2648
|
+
},
|
|
2649
|
+
{
|
|
2650
|
+
"key": "flow_resolution_status",
|
|
2651
|
+
"type": "string",
|
|
2652
|
+
"required": false,
|
|
2653
|
+
"description": "How the flow label was resolved (ADR 0020): 'known', 'inferred', 'unknown', or 'conflicted'. Policy authors choose the posture for 'unknown' per sink (DENY external, STEP_UP, DEFER while a classifier runs, or allow-and-record). Never silently resolves to public."
|
|
2654
|
+
},
|
|
2655
|
+
{
|
|
2656
|
+
"key": "flow_origins",
|
|
2657
|
+
"type": "array",
|
|
2658
|
+
"required": false,
|
|
2659
|
+
"description": "Origin kinds that produced or influenced the value (ADR 0020): 'mcp_tool_result', 'model', 'file', 'database', 'user'. Provenance fact for lineage-aware policy. Set<String>."
|
|
2660
|
+
},
|
|
2661
|
+
{
|
|
2662
|
+
"key": "flow_sink",
|
|
2663
|
+
"type": "string",
|
|
2664
|
+
"required": false,
|
|
2665
|
+
"description": "Logical destination this action releases the value to (ADR 0020), e.g. 'external_model', 'local_model', 'external_mcp', 'trusted_mcp', 'user_secure_output', 'public_network', 'file'. The 'where' half of a flow decision — pair with flow_confidentiality/flow_integrity."
|
|
2666
|
+
},
|
|
2667
|
+
{
|
|
2668
|
+
"key": "flow_sink_is_external",
|
|
2669
|
+
"type": "boolean",
|
|
2670
|
+
"required": false,
|
|
2671
|
+
"description": "Whether the destination is outside the tenant trust boundary (ADR 0020). Lets a single policy express 'confidential data MUST NOT leave to any external sink' without enumerating sink ids."
|
|
2672
|
+
},
|
|
2673
|
+
{
|
|
2674
|
+
"key": "flow_sink_effects",
|
|
2675
|
+
"type": "array",
|
|
2676
|
+
"required": false,
|
|
2677
|
+
"description": "Side effects the destination can exercise (ADR 0020), e.g. 'network.send', 'financial.transfer', 'filesystem.write'. Enables 'untrusted content MUST NOT reach a financial.transfer sink'. Set<String>."
|
|
2678
|
+
},
|
|
2679
|
+
{
|
|
2680
|
+
"key": "principal_clearances",
|
|
2681
|
+
"type": "array",
|
|
2682
|
+
"required": false,
|
|
2683
|
+
"description": "Clearances AuthN/ZeroID mints for the principal (ADR 0020 D8), e.g. 'restricted', 'pii'. Coarse scopes gate the capability; clearances gate which protected data that capability may touch. Set<String>."
|
|
2684
|
+
},
|
|
2685
|
+
{
|
|
2686
|
+
"key": "principal_compartments",
|
|
2687
|
+
"type": "array",
|
|
2688
|
+
"required": false,
|
|
2689
|
+
"description": "Compartments the principal is admitted to (ADR 0020 D8), e.g. 'tenant:acme', 'customer:123'. A flow into a compartment the principal lacks is deniable independent of confidentiality tier. Set<String>."
|
|
2690
|
+
},
|
|
2691
|
+
{
|
|
2692
|
+
"key": "surface",
|
|
2693
|
+
"type": "string",
|
|
2694
|
+
"required": true,
|
|
2695
|
+
"description": "Origin surface of the request (ADR 0012 D14.2) — REQUIRED; projected by Shield from the ingress product, never user-supplied. Values are the product identifiers: 'guardrails', 'overwatch', 'ai_gateway' ('sentry' joins at D17 phase 2). The 'Applies to' narrowing target: test with an ordinary condition (context.surface == 'ai_gateway'); no 'has' guard needed because it is required. A policy with no surface condition applies to every surface, including ones added later."
|
|
2696
|
+
},
|
|
2697
|
+
{
|
|
2698
|
+
"key": "malicious_package_detected",
|
|
2699
|
+
"type": "boolean",
|
|
2700
|
+
"required": false,
|
|
2701
|
+
"description": "Whether a referenced package carries a known-malicious osv.dev (MAL-) advisory."
|
|
2702
|
+
},
|
|
2703
|
+
{
|
|
2704
|
+
"key": "package_install_detected",
|
|
2705
|
+
"type": "boolean",
|
|
2706
|
+
"required": false,
|
|
2707
|
+
"description": "Whether the request installs or downloads a package (pip/npm/cargo/etc.)."
|
|
2708
|
+
},
|
|
2709
|
+
{
|
|
2710
|
+
"key": "package_check_status",
|
|
2711
|
+
"type": "string",
|
|
2712
|
+
"required": false,
|
|
2713
|
+
"description": "Malicious-package lookup status: empty (ok) or degraded (OSV unavailable, fail-open)."
|
|
2714
|
+
},
|
|
2715
|
+
{
|
|
2716
|
+
"key": "max_threat_severity",
|
|
2717
|
+
"type": "number",
|
|
2718
|
+
"required": false,
|
|
2719
|
+
"description": "Aggregate max threat severity across detectors (0=none,1=low,2=medium,3=high,4=critical).",
|
|
2720
|
+
"range": "0-4"
|
|
2721
|
+
}
|
|
1889
2722
|
]
|
|
1890
2723
|
},
|
|
1891
2724
|
{
|
|
@@ -1973,4 +2806,4 @@
|
|
|
1973
2806
|
]
|
|
1974
2807
|
}
|
|
1975
2808
|
]
|
|
1976
|
-
}
|
|
2809
|
+
}
|