You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CWL is building a governed path for external Agent capabilities discovered through sources such as anthropics/claude-plugins-community. Noema #545 owns admission and activation, AppGuardrail #1099 owns static package findings, and quarantine-sandbox-runtime #17 owns credential-free dynamic analysis.
Extensions and MCP integrations can attempt arbitrary network access, fetch mutable code, contact model providers directly, send secrets/product data, or connect to undeclared remote services. A generic network: true flag is not an acceptable boundary. Noema needs an EgressWeave-owned policy decision and receipt tied to exact artifact, activation, destination and operation.
This repository owns outbound HTTP authority and evidence. It does not own extension admission/activation, package scanning, sandbox execution, model routing, local installation, product-domain truth, or formal merge/release decisions.
Required architectural decision
Evaluate and record the smallest canonical integration shape:
Trusted-host library enforcement — the quarantine/runtime host uses the released EgressWeave package before any outbound socket can be opened;
Independent egress gateway service — non-Python runtimes call a released EgressWeave policy/gateway API and have no direct network path;
Network-disabled developer assist — where complete mediation cannot be proven, external plugins remain offline and remote MCP is unavailable;
ADR exclusion — if a specific local client cannot route extension egress through a trustworthy boundary, mark that activation unsupported rather than documenting unenforceable policy.
Do not create a policy-only fiction while the extension can still open direct sockets outside EgressWeave.
Policy profile
Add a versioned external_extension_egress profile that binds at least:
The tool schema is untrusted input and cannot add destinations, secret handles, provider routes or capabilities. Schema drift creates a new observed candidate and suspends activation until rescanned/readmitted.
For stdio MCP, EgressWeave does not pretend to mediate process or filesystem authority; quarantine runtime #17 owns the process boundary. Any network from the stdio child still requires complete egress mediation or stays denied.
Explicit denials
Default external-extension policy rejects:
direct OPENAI_API_KEY, NVIDIA_NIM_API_KEY*, BYTEZ_API_KEY, OPENROUTER_API_KEY, provider endpoints, model discovery or fallback outside contextual-orchestrator;
GitHub API write/review/merge/release/deployment calls unless a separate product-owned least-privilege capability explicitly exists; developer-assist plugins receive none;
package registries, release assets, curl|wget, dynamic installers and executable downloads during normal activation;
cookies, raw tokens, prompts/responses, source files, product records, PII, secrets or unrestricted logs in request bodies/headers/query parameters;
redirects, DNS rebinding, certificate/hostname mismatch, response smuggling, oversized/compressed-bomb bodies and unsupported MIME;
plugin-controlled proxy, CA bundle, socket, resolver, timeout or retry settings.
A product-runtime adapter that legitimately needs an external provider uses its canonical product-owned port and secret handle. It does not inherit a Claude plugin's destination list.
Credential boundary
Raw secret values never enter Noema activation documents, AppGuardrail/quarantine receipts, plugin prompts, logs or caller-visible EgressWeave decisions. The trusted host resolves an approved opaque secret handle only for the exact destination/operation and injects it after model/plugin-visible request construction. Response and error surfaces must not reveal the credential, authorization header, signed URL, cookies or provider body.
Receipts contain no raw URL secrets, headers, cookies, request/response bodies, plugin text, product payload or hidden reasoning. Digests are not authorization by themselves.
TDD acceptance
RED/GREEN tests must cover at least:
exact allowed origin/method/path/media/size succeeds through the real transport boundary;
wildcard/mutable/implicit destination and undeclared port/path/method fail before network I/O;
DNS rebinding, alternate address, private/loopback/link-local/metadata target and TLS mismatch;
redirect to undeclared authority and redirect loops;
direct model-provider and broad GitHub destination denial;
wrong artifact, wrong policy, replayed or forged receipt rejection;
extension/plugin content cannot modify the policy or add a destination;
complete mediation test proving direct socket bypass is impossible in the selected deployment shape;
rollback removes the policy and leaves no residual route/credential/cache.
Use synthetic endpoints and credentials. Production statement/branch coverage and public docstrings remain 100%, with property/fuzz tests on authority/URL/header/MIME/receipt parsing and realistic integration tests.
Documentation and release
Update PRD/TRD/ARCHITECTURE/Context Map/Threat Model/SECURITY/OPERABILITY/TEST_STRATEGY/UML/ADR/CHANGELOG and docs/product-technical-gap-baseline.md alongside executable behavior. Record why the selected mediation shape is enforceable and why rejected alternatives were not.
Release acceptance requires exact protected source, wheel/service/image as applicable, SBOM, provenance, dependency/security evidence, real network isolation canaries, and compatible released Context Graph Contracts #27/Noema #545 references. Open PR heads and self-asserted policy files are not consumer authority.
one explicitly approved synthetic remote MCP endpoint succeeds only through the selected EgressWeave boundary and fails on origin/schema/activation drift.
Non-goals
no generic internet proxy for untrusted plugins;
no direct provider/model routing;
no local-client policy claim without complete mediation;
no plugin installation or package scanning;
no process/filesystem sandbox claim;
no authorization from a policy document alone;
no weakening existing DNS/TLS/response-boundary controls.
Problem
CWL is building a governed path for external Agent capabilities discovered through sources such as
anthropics/claude-plugins-community. Noema #545 owns admission and activation, AppGuardrail #1099 owns static package findings, and quarantine-sandbox-runtime #17 owns credential-free dynamic analysis.Extensions and MCP integrations can attempt arbitrary network access, fetch mutable code, contact model providers directly, send secrets/product data, or connect to undeclared remote services. A generic
network: trueflag is not an acceptable boundary. Noema needs an EgressWeave-owned policy decision and receipt tied to exact artifact, activation, destination and operation.This repository owns outbound HTTP authority and evidence. It does not own extension admission/activation, package scanning, sandbox execution, model routing, local installation, product-domain truth, or formal merge/release decisions.
Required architectural decision
Evaluate and record the smallest canonical integration shape:
Do not create a policy-only fiction while the extension can still open direct sockets outside EgressWeave.
Policy profile
Add a versioned
external_extension_egressprofile that binds at least:allowed_destination_authoritiesuse exact normalized scheme/host/port and explicit DNS/TLS identity. Wildcard domains, implicit default ports, redirects to undeclared authorities, user-info URLs, IP-literal surprises, Unix sockets, proxies, CONNECT tunnels and caller-controlled DNS are rejected unless separately modeled and justified.Remote MCP profile
For HTTP/SSE/streamable remote MCP, require a bounded contract containing:
The tool schema is untrusted input and cannot add destinations, secret handles, provider routes or capabilities. Schema drift creates a new observed candidate and suspends activation until rescanned/readmitted.
For stdio MCP, EgressWeave does not pretend to mediate process or filesystem authority; quarantine runtime #17 owns the process boundary. Any network from the stdio child still requires complete egress mediation or stays denied.
Explicit denials
Default external-extension policy rejects:
OPENAI_API_KEY,NVIDIA_NIM_API_KEY*,BYTEZ_API_KEY,OPENROUTER_API_KEY, provider endpoints, model discovery or fallback outside contextual-orchestrator;curl|wget, dynamic installers and executable downloads during normal activation;A product-runtime adapter that legitimately needs an external provider uses its canonical product-owned port and secret handle. It does not inherit a Claude plugin's destination list.
Credential boundary
Raw secret values never enter Noema activation documents, AppGuardrail/quarantine receipts, plugin prompts, logs or caller-visible EgressWeave decisions. The trusted host resolves an approved opaque secret handle only for the exact destination/operation and injects it after model/plugin-visible request construction. Response and error surfaces must not reveal the credential, authorization header, signed URL, cookies or provider body.
Decision and execution receipts
Emit distinct bounded evidence:
Receipts contain no raw URL secrets, headers, cookies, request/response bodies, plugin text, product payload or hidden reasoning. Digests are not authorization by themselves.
TDD acceptance
RED/GREEN tests must cover at least:
Use synthetic endpoints and credentials. Production statement/branch coverage and public docstrings remain 100%, with property/fuzz tests on authority/URL/header/MIME/receipt parsing and realistic integration tests.
Documentation and release
Update PRD/TRD/ARCHITECTURE/Context Map/Threat Model/SECURITY/OPERABILITY/TEST_STRATEGY/UML/ADR/CHANGELOG and
docs/product-technical-gap-baseline.mdalongside executable behavior. Record why the selected mediation shape is enforceable and why rejected alternatives were not.Release acceptance requires exact protected source, wheel/service/image as applicable, SBOM, provenance, dependency/security evidence, real network isolation canaries, and compatible released Context Graph Contracts #27/Noema #545 references. Open PR heads and self-asserted policy files are not consumer authority.
Provide two canaries:
Non-goals
Related:
ContextualWisdomLab/noema#545,ContextualWisdomLab/context-graph-contracts#27,ContextualWisdomLab/appguardrail#1099,ContextualWisdomLab/quarantine-sandbox-runtime#17,ContextualWisdomLab/macos_utility_packs#5,ContextualWisdomLab/.github#1795,ContextualWisdomLab/enterprise-architecture-core#45.