@highflame/policy 2.2.27 → 2.2.29
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 +305 -5
- package/_schemas/agent_ops/schema.cedarschema +212 -0
- package/_schemas/agent_ops/templates/profiles/data_processing.cedar +114 -0
- package/_schemas/agent_ops/templates/profiles/gpu_training.cedar +117 -0
- package/_schemas/agent_ops/templates/profiles/locked_down.cedar +118 -0
- package/_schemas/agent_ops/templates/profiles/network_dev.cedar +117 -0
- package/_schemas/agent_ops/templates/templates.json +41 -0
- package/dist/actions.gen.d.ts +1 -0
- package/dist/actions.gen.js +1 -0
- package/dist/agent_ops-context.gen.d.ts +19 -1
- package/dist/agent_ops-context.gen.js +36 -0
- package/dist/agent_ops-defaults.gen.d.ts +1 -1
- package/dist/agent_ops-defaults.gen.js +548 -0
- package/dist/agent_ops-entities.gen.js +5 -1
- package/dist/privilege-catalog.gen.d.ts +30 -1
- package/dist/privilege-catalog.gen.js +54 -1
- package/dist/schema.gen.d.ts +1 -1
- package/dist/schema.gen.js +1 -0
- package/dist/service-schemas.gen.d.ts +1 -1
- package/dist/service-schemas.gen.js +266 -5
- package/package.json +1 -1
|
@@ -113,6 +113,19 @@ namespace AgentOps {
|
|
|
113
113
|
context: ConnectServerContext
|
|
114
114
|
};
|
|
115
115
|
|
|
116
|
+
/// Provision a sandbox for the acting identity (Forge OS-layer envelope).
|
|
117
|
+
/// The MANDATORY authorization gate for sandbox creation (ADR 0019 D1):
|
|
118
|
+
/// Forge evaluates this action's AgentOps bundle at create-time; no decision
|
|
119
|
+
/// means no sandbox. Context carries the requested capability envelope
|
|
120
|
+
/// (writable paths, egress, exec allowlist, curated mechanism toggles,
|
|
121
|
+
/// isolation tier). Raw syscalls are NEVER expressed here — the enforcement
|
|
122
|
+
/// generators own the mechanism→syscall translation (ADR 0017 D1).
|
|
123
|
+
action "provision_sandbox" appliesTo {
|
|
124
|
+
principal: [User, Agent],
|
|
125
|
+
resource: [Agent, Session],
|
|
126
|
+
context: ProvisionSandboxContext
|
|
127
|
+
};
|
|
128
|
+
|
|
116
129
|
// =========================================================================
|
|
117
130
|
// Context Types (Action-Specific)
|
|
118
131
|
// =========================================================================
|
|
@@ -251,6 +264,30 @@ namespace AgentOps {
|
|
|
251
264
|
"session_original_request"?: String,
|
|
252
265
|
"session_max_sensitivity"?: String,
|
|
253
266
|
|
|
267
|
+
// Origin Surface — REQUIRED (ADR 0012 D14.2). Projected by Shield from the
|
|
268
|
+
// ingress product; never user-supplied. The "Applies to" narrowing target:
|
|
269
|
+
// policies test it with an ordinary condition (context.surface == "ai_gateway")
|
|
270
|
+
// — no \`has\` guard needed precisely because it is required. Values are the
|
|
271
|
+
// product identifiers: "guardrails" | "overwatch" | "ai_gateway" ("sentry"
|
|
272
|
+
// joins at ADR 0012 D17 phase 2). A policy with no surface condition applies
|
|
273
|
+
// to every surface, including ones added later (inclusive default).
|
|
274
|
+
"surface": String,
|
|
275
|
+
|
|
276
|
+
// Data-Flow Labels — per-value information-flow facts (ADR 0020, optional).
|
|
277
|
+
// All optional: guard every access with \`has\` — an absent-attribute read is
|
|
278
|
+
// a Cedar evaluation error and an errored forbid is silently skipped (fail-open).
|
|
279
|
+
"flow_confidentiality"?: String, // "public" | "internal" | "confidential" | "restricted" | "unknown"
|
|
280
|
+
"flow_integrity"?: String, // "trusted" | "untrusted" | "mixed" | "unknown"
|
|
281
|
+
"flow_data_types"?: Set<String>, // "pii" | "secrets" | "source_code" | "financial" | "health" | ...
|
|
282
|
+
"flow_compartments"?: Set<String>, // "tenant:*" | "customer:*" | "project:*"
|
|
283
|
+
"flow_resolution_status"?: String, // "known" | "inferred" | "unknown" | "conflicted"
|
|
284
|
+
"flow_origins"?: Set<String>, // "mcp_tool_result" | "model" | "file" | "database" | "user"
|
|
285
|
+
"flow_sink"?: String, // "external_model" | "local_model" | "external_mcp" | "trusted_mcp" | "user_secure_output" | "public_network" | "file"
|
|
286
|
+
"flow_sink_is_external"?: Boolean,
|
|
287
|
+
"flow_sink_effects"?: Set<String>, // "network.send" | "financial.transfer" | "filesystem.write" | ...
|
|
288
|
+
"principal_clearances"?: Set<String>, // ADR 0020 D8 — clearances AuthN mints for the principal
|
|
289
|
+
"principal_compartments"?: Set<String>, // ADR 0020 D8 — compartments the principal is admitted to
|
|
290
|
+
|
|
254
291
|
// Usage Budget — multi-window token & cost enforcement (optional)
|
|
255
292
|
"budget_remaining_pct"?: Long,
|
|
256
293
|
"budget_exceeded"?: Boolean,
|
|
@@ -415,6 +452,30 @@ namespace AgentOps {
|
|
|
415
452
|
"session_original_request"?: String,
|
|
416
453
|
"session_max_sensitivity"?: String,
|
|
417
454
|
|
|
455
|
+
// Origin Surface — REQUIRED (ADR 0012 D14.2). Projected by Shield from the
|
|
456
|
+
// ingress product; never user-supplied. The "Applies to" narrowing target:
|
|
457
|
+
// policies test it with an ordinary condition (context.surface == "ai_gateway")
|
|
458
|
+
// — no \`has\` guard needed precisely because it is required. Values are the
|
|
459
|
+
// product identifiers: "guardrails" | "overwatch" | "ai_gateway" ("sentry"
|
|
460
|
+
// joins at ADR 0012 D17 phase 2). A policy with no surface condition applies
|
|
461
|
+
// to every surface, including ones added later (inclusive default).
|
|
462
|
+
"surface": String,
|
|
463
|
+
|
|
464
|
+
// Data-Flow Labels — per-value information-flow facts (ADR 0020, optional).
|
|
465
|
+
// All optional: guard every access with \`has\` — an absent-attribute read is
|
|
466
|
+
// a Cedar evaluation error and an errored forbid is silently skipped (fail-open).
|
|
467
|
+
"flow_confidentiality"?: String, // "public" | "internal" | "confidential" | "restricted" | "unknown"
|
|
468
|
+
"flow_integrity"?: String, // "trusted" | "untrusted" | "mixed" | "unknown"
|
|
469
|
+
"flow_data_types"?: Set<String>, // "pii" | "secrets" | "source_code" | "financial" | "health" | ...
|
|
470
|
+
"flow_compartments"?: Set<String>, // "tenant:*" | "customer:*" | "project:*"
|
|
471
|
+
"flow_resolution_status"?: String, // "known" | "inferred" | "unknown" | "conflicted"
|
|
472
|
+
"flow_origins"?: Set<String>, // "mcp_tool_result" | "model" | "file" | "database" | "user"
|
|
473
|
+
"flow_sink"?: String, // "external_model" | "local_model" | "external_mcp" | "trusted_mcp" | "user_secure_output" | "public_network" | "file"
|
|
474
|
+
"flow_sink_is_external"?: Boolean,
|
|
475
|
+
"flow_sink_effects"?: Set<String>, // "network.send" | "financial.transfer" | "filesystem.write" | ...
|
|
476
|
+
"principal_clearances"?: Set<String>, // ADR 0020 D8 — clearances AuthN mints for the principal
|
|
477
|
+
"principal_compartments"?: Set<String>, // ADR 0020 D8 — compartments the principal is admitted to
|
|
478
|
+
|
|
418
479
|
// Usage Budget (optional)
|
|
419
480
|
"budget_remaining_pct"?: Long,
|
|
420
481
|
"budget_exceeded"?: Boolean,
|
|
@@ -507,6 +568,30 @@ namespace AgentOps {
|
|
|
507
568
|
"session_original_request"?: String,
|
|
508
569
|
"session_max_sensitivity"?: String,
|
|
509
570
|
|
|
571
|
+
// Origin Surface — REQUIRED (ADR 0012 D14.2). Projected by Shield from the
|
|
572
|
+
// ingress product; never user-supplied. The "Applies to" narrowing target:
|
|
573
|
+
// policies test it with an ordinary condition (context.surface == "ai_gateway")
|
|
574
|
+
// — no \`has\` guard needed precisely because it is required. Values are the
|
|
575
|
+
// product identifiers: "guardrails" | "overwatch" | "ai_gateway" ("sentry"
|
|
576
|
+
// joins at ADR 0012 D17 phase 2). A policy with no surface condition applies
|
|
577
|
+
// to every surface, including ones added later (inclusive default).
|
|
578
|
+
"surface": String,
|
|
579
|
+
|
|
580
|
+
// Data-Flow Labels — per-value information-flow facts (ADR 0020, optional).
|
|
581
|
+
// All optional: guard every access with \`has\` — an absent-attribute read is
|
|
582
|
+
// a Cedar evaluation error and an errored forbid is silently skipped (fail-open).
|
|
583
|
+
"flow_confidentiality"?: String, // "public" | "internal" | "confidential" | "restricted" | "unknown"
|
|
584
|
+
"flow_integrity"?: String, // "trusted" | "untrusted" | "mixed" | "unknown"
|
|
585
|
+
"flow_data_types"?: Set<String>, // "pii" | "secrets" | "source_code" | "financial" | "health" | ...
|
|
586
|
+
"flow_compartments"?: Set<String>, // "tenant:*" | "customer:*" | "project:*"
|
|
587
|
+
"flow_resolution_status"?: String, // "known" | "inferred" | "unknown" | "conflicted"
|
|
588
|
+
"flow_origins"?: Set<String>, // "mcp_tool_result" | "model" | "file" | "database" | "user"
|
|
589
|
+
"flow_sink"?: String, // "external_model" | "local_model" | "external_mcp" | "trusted_mcp" | "user_secure_output" | "public_network" | "file"
|
|
590
|
+
"flow_sink_is_external"?: Boolean,
|
|
591
|
+
"flow_sink_effects"?: Set<String>, // "network.send" | "financial.transfer" | "filesystem.write" | ...
|
|
592
|
+
"principal_clearances"?: Set<String>, // ADR 0020 D8 — clearances AuthN mints for the principal
|
|
593
|
+
"principal_compartments"?: Set<String>, // ADR 0020 D8 — compartments the principal is admitted to
|
|
594
|
+
|
|
510
595
|
// Usage Budget (optional)
|
|
511
596
|
"budget_remaining_pct"?: Long,
|
|
512
597
|
"budget_exceeded"?: Boolean,
|
|
@@ -595,6 +680,30 @@ namespace AgentOps {
|
|
|
595
680
|
"session_original_request"?: String,
|
|
596
681
|
"session_max_sensitivity"?: String,
|
|
597
682
|
|
|
683
|
+
// Origin Surface — REQUIRED (ADR 0012 D14.2). Projected by Shield from the
|
|
684
|
+
// ingress product; never user-supplied. The "Applies to" narrowing target:
|
|
685
|
+
// policies test it with an ordinary condition (context.surface == "ai_gateway")
|
|
686
|
+
// — no \`has\` guard needed precisely because it is required. Values are the
|
|
687
|
+
// product identifiers: "guardrails" | "overwatch" | "ai_gateway" ("sentry"
|
|
688
|
+
// joins at ADR 0012 D17 phase 2). A policy with no surface condition applies
|
|
689
|
+
// to every surface, including ones added later (inclusive default).
|
|
690
|
+
"surface": String,
|
|
691
|
+
|
|
692
|
+
// Data-Flow Labels — per-value information-flow facts (ADR 0020, optional).
|
|
693
|
+
// All optional: guard every access with \`has\` — an absent-attribute read is
|
|
694
|
+
// a Cedar evaluation error and an errored forbid is silently skipped (fail-open).
|
|
695
|
+
"flow_confidentiality"?: String, // "public" | "internal" | "confidential" | "restricted" | "unknown"
|
|
696
|
+
"flow_integrity"?: String, // "trusted" | "untrusted" | "mixed" | "unknown"
|
|
697
|
+
"flow_data_types"?: Set<String>, // "pii" | "secrets" | "source_code" | "financial" | "health" | ...
|
|
698
|
+
"flow_compartments"?: Set<String>, // "tenant:*" | "customer:*" | "project:*"
|
|
699
|
+
"flow_resolution_status"?: String, // "known" | "inferred" | "unknown" | "conflicted"
|
|
700
|
+
"flow_origins"?: Set<String>, // "mcp_tool_result" | "model" | "file" | "database" | "user"
|
|
701
|
+
"flow_sink"?: String, // "external_model" | "local_model" | "external_mcp" | "trusted_mcp" | "user_secure_output" | "public_network" | "file"
|
|
702
|
+
"flow_sink_is_external"?: Boolean,
|
|
703
|
+
"flow_sink_effects"?: Set<String>, // "network.send" | "financial.transfer" | "filesystem.write" | ...
|
|
704
|
+
"principal_clearances"?: Set<String>, // ADR 0020 D8 — clearances AuthN mints for the principal
|
|
705
|
+
"principal_compartments"?: Set<String>, // ADR 0020 D8 — compartments the principal is admitted to
|
|
706
|
+
|
|
598
707
|
// Usage Budget (optional)
|
|
599
708
|
"budget_remaining_pct"?: Long,
|
|
600
709
|
"budget_exceeded"?: Boolean,
|
|
@@ -683,6 +792,30 @@ namespace AgentOps {
|
|
|
683
792
|
"session_original_request"?: String,
|
|
684
793
|
"session_max_sensitivity"?: String,
|
|
685
794
|
|
|
795
|
+
// Origin Surface — REQUIRED (ADR 0012 D14.2). Projected by Shield from the
|
|
796
|
+
// ingress product; never user-supplied. The "Applies to" narrowing target:
|
|
797
|
+
// policies test it with an ordinary condition (context.surface == "ai_gateway")
|
|
798
|
+
// — no \`has\` guard needed precisely because it is required. Values are the
|
|
799
|
+
// product identifiers: "guardrails" | "overwatch" | "ai_gateway" ("sentry"
|
|
800
|
+
// joins at ADR 0012 D17 phase 2). A policy with no surface condition applies
|
|
801
|
+
// to every surface, including ones added later (inclusive default).
|
|
802
|
+
"surface": String,
|
|
803
|
+
|
|
804
|
+
// Data-Flow Labels — per-value information-flow facts (ADR 0020, optional).
|
|
805
|
+
// All optional: guard every access with \`has\` — an absent-attribute read is
|
|
806
|
+
// a Cedar evaluation error and an errored forbid is silently skipped (fail-open).
|
|
807
|
+
"flow_confidentiality"?: String, // "public" | "internal" | "confidential" | "restricted" | "unknown"
|
|
808
|
+
"flow_integrity"?: String, // "trusted" | "untrusted" | "mixed" | "unknown"
|
|
809
|
+
"flow_data_types"?: Set<String>, // "pii" | "secrets" | "source_code" | "financial" | "health" | ...
|
|
810
|
+
"flow_compartments"?: Set<String>, // "tenant:*" | "customer:*" | "project:*"
|
|
811
|
+
"flow_resolution_status"?: String, // "known" | "inferred" | "unknown" | "conflicted"
|
|
812
|
+
"flow_origins"?: Set<String>, // "mcp_tool_result" | "model" | "file" | "database" | "user"
|
|
813
|
+
"flow_sink"?: String, // "external_model" | "local_model" | "external_mcp" | "trusted_mcp" | "user_secure_output" | "public_network" | "file"
|
|
814
|
+
"flow_sink_is_external"?: Boolean,
|
|
815
|
+
"flow_sink_effects"?: Set<String>, // "network.send" | "financial.transfer" | "filesystem.write" | ...
|
|
816
|
+
"principal_clearances"?: Set<String>, // ADR 0020 D8 — clearances AuthN mints for the principal
|
|
817
|
+
"principal_compartments"?: Set<String>, // ADR 0020 D8 — compartments the principal is admitted to
|
|
818
|
+
|
|
686
819
|
// Usage Budget (optional)
|
|
687
820
|
"budget_remaining_pct"?: Long,
|
|
688
821
|
"budget_exceeded"?: Boolean,
|
|
@@ -711,6 +844,55 @@ namespace AgentOps {
|
|
|
711
844
|
"agent_publisher"?: String,
|
|
712
845
|
|
|
713
846
|
};
|
|
847
|
+
|
|
848
|
+
/// Context for provision_sandbox action (Forge sandbox-create envelope).
|
|
849
|
+
///
|
|
850
|
+
/// Every capability field below is OPTIONAL and describes the envelope the
|
|
851
|
+
/// sandbox is being asked to provision with — Forge synthesizes it from the
|
|
852
|
+
/// create request attenuated by the token's scope ceiling (ADR 0019 D1),
|
|
853
|
+
/// then asks Cedar whether this identity may provision it. Profile templates
|
|
854
|
+
/// \`permit\` provision_sandbox only when the requested envelope stays within
|
|
855
|
+
/// the profile ceiling, and \`forbid\` any escalation beyond it.
|
|
856
|
+
///
|
|
857
|
+
/// FAIL-OPEN WARNING (ADR 0019 D3): because these attributes are optional,
|
|
858
|
+
/// accessing an absent one is a Cedar *evaluation error*, and an errored
|
|
859
|
+
/// \`forbid\` is silently skipped — which fails OPEN. Every rule touching a
|
|
860
|
+
/// field here MUST guard it first with \`has\` (e.g.
|
|
861
|
+
/// \`context has mechanism_capabilities && context.mechanism_capabilities.contains("sys:ptrace")\`).
|
|
862
|
+
type ProvisionSandboxContext = {
|
|
863
|
+
// Identity (AARM R6 / CAP-IDN-011) — projected from the principal's token; optional.
|
|
864
|
+
"role"?: String,
|
|
865
|
+
"privilege_scope"?: Set<String>,
|
|
866
|
+
"identity_type"?: String, // Principal identity class: "human" | "agent" | "service" | "mcp_server"
|
|
867
|
+
"principal"?: String, // Stable principal identifier (ZeroID / WIMSE URI or user id)
|
|
868
|
+
"agent_trust_level"?: String, // "untrusted" | "low" | "verified" | "trusted"
|
|
869
|
+
|
|
870
|
+
// Core metadata (required)
|
|
871
|
+
"request_id": String,
|
|
872
|
+
"timestamp": Long,
|
|
873
|
+
|
|
874
|
+
// Requested isolation tier (required) — the OS-isolation tier the
|
|
875
|
+
// sandbox will run at, as the lowercased Forge IsolationTier name (ADR
|
|
876
|
+
// 0016 D1). Ordinal, weakest→strongest: "none" (trusted-local) < "os"
|
|
877
|
+
// (bwrap/seatbelt) < "kernel" (gVisor) < "hardware" (micro-VM + TEE).
|
|
878
|
+
// Templates assert a floor via set membership (e.g. a KERNEL floor =
|
|
879
|
+
// {"kernel","hardware"}); Forge owns the ordering.
|
|
880
|
+
"isolation_tier": String,
|
|
881
|
+
|
|
882
|
+
// Requested capability envelope (all optional — has-guard mandatory).
|
|
883
|
+
"writable_paths"?: Set<String>, // Writable path prefixes, e.g. {"/scratch"}
|
|
884
|
+
// Master egress switch. Forge MUST set this true whenever ANY egress is
|
|
885
|
+
// requested (i.e. whenever egress_hosts is non-empty), so a "no network"
|
|
886
|
+
// profile can gate on this single boolean. egress_hosts then narrows the
|
|
887
|
+
// host allowlist for profiles that DO permit egress.
|
|
888
|
+
"network_egress"?: Boolean,
|
|
889
|
+
"egress_hosts"?: Set<String>, // Host allowlist for egress, e.g. {"pypi.org"}
|
|
890
|
+
"exec_allowlist"?: Set<String>, // Executables the sandbox may run, e.g. {"python", "python3"}
|
|
891
|
+
// Curated mechanism toggles (ADR 0017 D1.3) — authorization facts only;
|
|
892
|
+
// NEVER raw syscalls. Allowed members: "sys:ptrace", "sys:bpf",
|
|
893
|
+
// "sys:raw_socket", "dev:gpu", "virt:nested".
|
|
894
|
+
"mechanism_capabilities"?: Set<String>,
|
|
895
|
+
};
|
|
714
896
|
}
|
|
715
897
|
`;
|
|
716
898
|
/**
|
|
@@ -2993,7 +3175,19 @@ export const AGENT_OPS_CONTEXT = {
|
|
|
2993
3175
|
{ "key": "agent_type", "type": "string", "required": false, "description": "Type of the authenticated agent: \'orchestrator\', \'autonomous\', \'tool_agent\', or \'human_proxy\'. Empty string for human users." },
|
|
2994
3176
|
{ "key": "agent_trust_level", "type": "string", "required": false, "description": "Trust level of the authenticated agent: \'first_party\', \'verified_third_party\', or \'unverified\'." },
|
|
2995
3177
|
{ "key": "agent_framework", "type": "string", "required": false, "description": "Framework or SDK the agent is built with (e.g., \'claude-code\', \'langchain\', \'crewai\', \'autogen\')." },
|
|
2996
|
-
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." }
|
|
3178
|
+
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." },
|
|
3179
|
+
{ "key": "flow_confidentiality", "type": "string", "required": false, "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." },
|
|
3180
|
+
{ "key": "flow_integrity", "type": "string", "required": false, "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." },
|
|
3181
|
+
{ "key": "flow_data_types", "type": "array", "required": false, "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>." },
|
|
3182
|
+
{ "key": "flow_compartments", "type": "array", "required": false, "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>." },
|
|
3183
|
+
{ "key": "flow_resolution_status", "type": "string", "required": false, "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." },
|
|
3184
|
+
{ "key": "flow_origins", "type": "array", "required": false, "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>." },
|
|
3185
|
+
{ "key": "flow_sink", "type": "string", "required": false, "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." },
|
|
3186
|
+
{ "key": "flow_sink_is_external", "type": "boolean", "required": false, "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." },
|
|
3187
|
+
{ "key": "flow_sink_effects", "type": "array", "required": false, "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>." },
|
|
3188
|
+
{ "key": "principal_clearances", "type": "array", "required": false, "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>." },
|
|
3189
|
+
{ "key": "principal_compartments", "type": "array", "required": false, "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>." },
|
|
3190
|
+
{ "key": "surface", "type": "string", "required": true, "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." }
|
|
2997
3191
|
]
|
|
2998
3192
|
},
|
|
2999
3193
|
{
|
|
@@ -3100,7 +3294,19 @@ export const AGENT_OPS_CONTEXT = {
|
|
|
3100
3294
|
{ "key": "agent_type", "type": "string", "required": false, "description": "Type of the authenticated agent: \'orchestrator\', \'autonomous\', \'tool_agent\', or \'human_proxy\'. Empty string for human users." },
|
|
3101
3295
|
{ "key": "agent_trust_level", "type": "string", "required": false, "description": "Trust level of the authenticated agent: \'first_party\', \'verified_third_party\', or \'unverified\'." },
|
|
3102
3296
|
{ "key": "agent_framework", "type": "string", "required": false, "description": "Framework or SDK the agent is built with (e.g., \'claude-code\', \'langchain\', \'crewai\', \'autogen\')." },
|
|
3103
|
-
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." }
|
|
3297
|
+
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." },
|
|
3298
|
+
{ "key": "flow_confidentiality", "type": "string", "required": false, "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." },
|
|
3299
|
+
{ "key": "flow_integrity", "type": "string", "required": false, "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." },
|
|
3300
|
+
{ "key": "flow_data_types", "type": "array", "required": false, "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>." },
|
|
3301
|
+
{ "key": "flow_compartments", "type": "array", "required": false, "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>." },
|
|
3302
|
+
{ "key": "flow_resolution_status", "type": "string", "required": false, "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." },
|
|
3303
|
+
{ "key": "flow_origins", "type": "array", "required": false, "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>." },
|
|
3304
|
+
{ "key": "flow_sink", "type": "string", "required": false, "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." },
|
|
3305
|
+
{ "key": "flow_sink_is_external", "type": "boolean", "required": false, "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." },
|
|
3306
|
+
{ "key": "flow_sink_effects", "type": "array", "required": false, "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>." },
|
|
3307
|
+
{ "key": "principal_clearances", "type": "array", "required": false, "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>." },
|
|
3308
|
+
{ "key": "principal_compartments", "type": "array", "required": false, "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>." },
|
|
3309
|
+
{ "key": "surface", "type": "string", "required": true, "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." }
|
|
3104
3310
|
]
|
|
3105
3311
|
},
|
|
3106
3312
|
{
|
|
@@ -3155,7 +3361,19 @@ export const AGENT_OPS_CONTEXT = {
|
|
|
3155
3361
|
{ "key": "agent_type", "type": "string", "required": false, "description": "Type of the authenticated agent: \'orchestrator\', \'autonomous\', \'tool_agent\', or \'human_proxy\'. Empty string for human users." },
|
|
3156
3362
|
{ "key": "agent_trust_level", "type": "string", "required": false, "description": "Trust level of the authenticated agent: \'first_party\', \'verified_third_party\', or \'unverified\'." },
|
|
3157
3363
|
{ "key": "agent_framework", "type": "string", "required": false, "description": "Framework or SDK the agent is built with (e.g., \'claude-code\', \'langchain\', \'crewai\', \'autogen\')." },
|
|
3158
|
-
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." }
|
|
3364
|
+
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." },
|
|
3365
|
+
{ "key": "flow_confidentiality", "type": "string", "required": false, "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." },
|
|
3366
|
+
{ "key": "flow_integrity", "type": "string", "required": false, "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." },
|
|
3367
|
+
{ "key": "flow_data_types", "type": "array", "required": false, "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>." },
|
|
3368
|
+
{ "key": "flow_compartments", "type": "array", "required": false, "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>." },
|
|
3369
|
+
{ "key": "flow_resolution_status", "type": "string", "required": false, "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." },
|
|
3370
|
+
{ "key": "flow_origins", "type": "array", "required": false, "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>." },
|
|
3371
|
+
{ "key": "flow_sink", "type": "string", "required": false, "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." },
|
|
3372
|
+
{ "key": "flow_sink_is_external", "type": "boolean", "required": false, "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." },
|
|
3373
|
+
{ "key": "flow_sink_effects", "type": "array", "required": false, "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>." },
|
|
3374
|
+
{ "key": "principal_clearances", "type": "array", "required": false, "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>." },
|
|
3375
|
+
{ "key": "principal_compartments", "type": "array", "required": false, "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>." },
|
|
3376
|
+
{ "key": "surface", "type": "string", "required": true, "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." }
|
|
3159
3377
|
]
|
|
3160
3378
|
},
|
|
3161
3379
|
{
|
|
@@ -3212,7 +3430,19 @@ export const AGENT_OPS_CONTEXT = {
|
|
|
3212
3430
|
{ "key": "agent_type", "type": "string", "required": false, "description": "Type of the authenticated agent: \'orchestrator\', \'autonomous\', \'tool_agent\', or \'human_proxy\'. Empty string for human users." },
|
|
3213
3431
|
{ "key": "agent_trust_level", "type": "string", "required": false, "description": "Trust level of the authenticated agent: \'first_party\', \'verified_third_party\', or \'unverified\'." },
|
|
3214
3432
|
{ "key": "agent_framework", "type": "string", "required": false, "description": "Framework or SDK the agent is built with (e.g., \'claude-code\', \'langchain\', \'crewai\', \'autogen\')." },
|
|
3215
|
-
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." }
|
|
3433
|
+
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." },
|
|
3434
|
+
{ "key": "flow_confidentiality", "type": "string", "required": false, "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." },
|
|
3435
|
+
{ "key": "flow_integrity", "type": "string", "required": false, "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." },
|
|
3436
|
+
{ "key": "flow_data_types", "type": "array", "required": false, "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>." },
|
|
3437
|
+
{ "key": "flow_compartments", "type": "array", "required": false, "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>." },
|
|
3438
|
+
{ "key": "flow_resolution_status", "type": "string", "required": false, "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." },
|
|
3439
|
+
{ "key": "flow_origins", "type": "array", "required": false, "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>." },
|
|
3440
|
+
{ "key": "flow_sink", "type": "string", "required": false, "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." },
|
|
3441
|
+
{ "key": "flow_sink_is_external", "type": "boolean", "required": false, "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." },
|
|
3442
|
+
{ "key": "flow_sink_effects", "type": "array", "required": false, "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>." },
|
|
3443
|
+
{ "key": "principal_clearances", "type": "array", "required": false, "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>." },
|
|
3444
|
+
{ "key": "principal_compartments", "type": "array", "required": false, "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>." },
|
|
3445
|
+
{ "key": "surface", "type": "string", "required": true, "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." }
|
|
3216
3446
|
]
|
|
3217
3447
|
},
|
|
3218
3448
|
{
|
|
@@ -3269,7 +3499,38 @@ export const AGENT_OPS_CONTEXT = {
|
|
|
3269
3499
|
{ "key": "agent_type", "type": "string", "required": false, "description": "Type of the authenticated agent: \'orchestrator\', \'autonomous\', \'tool_agent\', or \'human_proxy\'. Empty string for human users." },
|
|
3270
3500
|
{ "key": "agent_trust_level", "type": "string", "required": false, "description": "Trust level of the authenticated agent: \'first_party\', \'verified_third_party\', or \'unverified\'." },
|
|
3271
3501
|
{ "key": "agent_framework", "type": "string", "required": false, "description": "Framework or SDK the agent is built with (e.g., \'claude-code\', \'langchain\', \'crewai\', \'autogen\')." },
|
|
3272
|
-
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." }
|
|
3502
|
+
{ "key": "agent_publisher", "type": "string", "required": false, "description": "Organization that published the agent (e.g., \'anthropic\', \'internal\', \'acme-corp\')." },
|
|
3503
|
+
{ "key": "flow_confidentiality", "type": "string", "required": false, "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." },
|
|
3504
|
+
{ "key": "flow_integrity", "type": "string", "required": false, "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." },
|
|
3505
|
+
{ "key": "flow_data_types", "type": "array", "required": false, "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>." },
|
|
3506
|
+
{ "key": "flow_compartments", "type": "array", "required": false, "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>." },
|
|
3507
|
+
{ "key": "flow_resolution_status", "type": "string", "required": false, "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." },
|
|
3508
|
+
{ "key": "flow_origins", "type": "array", "required": false, "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>." },
|
|
3509
|
+
{ "key": "flow_sink", "type": "string", "required": false, "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." },
|
|
3510
|
+
{ "key": "flow_sink_is_external", "type": "boolean", "required": false, "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." },
|
|
3511
|
+
{ "key": "flow_sink_effects", "type": "array", "required": false, "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>." },
|
|
3512
|
+
{ "key": "principal_clearances", "type": "array", "required": false, "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>." },
|
|
3513
|
+
{ "key": "principal_compartments", "type": "array", "required": false, "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>." },
|
|
3514
|
+
{ "key": "surface", "type": "string", "required": true, "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." }
|
|
3515
|
+
]
|
|
3516
|
+
},
|
|
3517
|
+
{
|
|
3518
|
+
"name": "provision_sandbox",
|
|
3519
|
+
"description": "Provision a sandbox for the acting identity (Forge OS-layer envelope). Mandatory authorization gate for sandbox creation (ADR 0019). Every capability attribute is optional and describes the requested envelope; rules MUST guard each with `has` before access (an absent-attribute access errors, silently voiding a forbid — fail-open).",
|
|
3520
|
+
"context_attributes": [
|
|
3521
|
+
{ "key": "role", "type": "string", "required": false, "description": "Caller\'s RBAC role projected from the principal\'s token" },
|
|
3522
|
+
{ "key": "privilege_scope", "type": "array", "required": false, "description": "Privilege-scope strings granted to the caller" },
|
|
3523
|
+
{ "key": "identity_type", "type": "string", "required": false, "description": "Principal identity class: \'human\', \'agent\', \'service\', or \'mcp_server\'" },
|
|
3524
|
+
{ "key": "principal", "type": "string", "required": false, "description": "Stable principal identifier (ZeroID / WIMSE URI or user id)" },
|
|
3525
|
+
{ "key": "agent_trust_level", "type": "string", "required": false, "description": "Agent trust tier: \'untrusted\' | \'low\' | \'verified\' | \'trusted\'" },
|
|
3526
|
+
{ "key": "request_id", "type": "string", "required": true, "description": "Unique identifier for this request" },
|
|
3527
|
+
{ "key": "timestamp", "type": "number", "required": true, "description": "Unix timestamp in milliseconds" },
|
|
3528
|
+
{ "key": "isolation_tier", "type": "string", "required": true, "description": "Requested OS-isolation tier as the lowercased Forge IsolationTier name (ADR 0016 D1). Ordinal, weakest→strongest: \'none\' < \'os\' < \'kernel\' (gVisor) < \'hardware\' (micro-VM + TEE). Templates assert a floor via set membership; Forge owns the ordering." },
|
|
3529
|
+
{ "key": "writable_paths", "type": "array", "required": false, "description": "Writable path prefixes the sandbox is requesting, e.g. [\'/scratch\']" },
|
|
3530
|
+
{ "key": "network_egress", "type": "boolean", "required": false, "description": "Whether any outbound network egress is requested" },
|
|
3531
|
+
{ "key": "egress_hosts", "type": "array", "required": false, "description": "Host allowlist for egress, e.g. [\'pypi.org\', \'files.pythonhosted.org\']" },
|
|
3532
|
+
{ "key": "exec_allowlist", "type": "array", "required": false, "description": "Executables the sandbox may run, e.g. [\'python\', \'python3\']" },
|
|
3533
|
+
{ "key": "mechanism_capabilities", "type": "array", "required": false, "description": "Curated mechanism toggles (ADR 0017 D1.3) — authorization facts only, never raw syscalls. Allowed members: \'sys:ptrace\', \'sys:bpf\', \'sys:raw_socket\', \'dev:gpu\', \'virt:nested\'." }
|
|
3273
3534
|
]
|
|
3274
3535
|
}
|
|
3275
3536
|
]
|