Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ Docker-backed GPU sandboxes auto-select CDI when available and otherwise fall ba
| [Codex](https://developers.openai.com/codex) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Works out of the box. Provider uses `OPENAI_API_KEY`. |
| [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Works out of the box. Provider uses `GITHUB_TOKEN` or `COPILOT_GITHUB_TOKEN`. |
| [OpenClaw](https://openclaw.ai/) | [NemoClaw](https://github.com/NVIDIA/NemoClaw) | Run OpenClaw more securely inside NVIDIA OpenShell with managed inference using NemoClaw. |
| [Enclawed](https://enclawed.com/) | [enclawed-sandbox](https://github.com/enclawed/openshell-enclawed-sandbox) | Classification-gated AI agent gateway with MCP-attested transport. Credentials bootstrapped via the OS keyring at sandbox provisioning. |
| [Ollama](https://ollama.com/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Launch with `openshell sandbox create --from ollama`. |
| [Pi](https://pi.dev/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Launch with `openshell sandbox create --from pi`. |

Expand Down
1 change: 1 addition & 0 deletions crates/openshell-providers/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ impl ProviderRegistry {
registry.register(providers::claude::SPEC);
registry.register(providers::codex::SPEC);
registry.register(providers::copilot::SPEC);
registry.register(providers::enclawed::EnclawedProvider);
registry.register(providers::opencode::OpencodeProvider);
registry.register(providers::generic::GenericProvider);
registry.register(providers::openai::SPEC);
Expand Down
38 changes: 38 additions & 0 deletions crates/openshell-providers/src/providers/enclawed.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

use crate::{DiscoveredProvider, ProviderError, ProviderPlugin};

/// Enclawed: a classification-gated, MCP-attested AI agent gateway.
///
/// Unlike the env-var-discovered providers (Claude Code, Codex, Copilot, ...),
/// Enclawed bootstraps every credential into the operator's OS keyring at
/// install time and never reads them from the environment. There is therefore
/// nothing for OpenShell to discover at provider-discovery time; the matching
/// sandbox image is responsible for running Enclawed's installer at first
/// boot to populate the keyring. Modeled on [`GenericProvider`] for that
/// reason.
pub struct EnclawedProvider;

impl ProviderPlugin for EnclawedProvider {
fn id(&self) -> &'static str {
"enclawed"
}

fn discover_existing(&self) -> Result<Option<DiscoveredProvider>, ProviderError> {
Ok(None)
}
}

#[cfg(test)]
mod tests {
use super::EnclawedProvider;
use crate::ProviderPlugin;

#[test]
fn enclawed_provider_discovery_is_empty_by_default() {
let provider = EnclawedProvider;
let discovered = provider.discover_existing().expect("discovery");
assert!(discovered.is_none());
}
}
1 change: 1 addition & 0 deletions crates/openshell-providers/src/providers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ pub mod anthropic;
pub mod claude;
pub mod codex;
pub mod copilot;
pub mod enclawed;
pub mod generic;
pub mod github;
pub mod gitlab;
Expand Down
35 changes: 35 additions & 0 deletions providers/enclawed.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

id: enclawed
display_name: Enclawed
description: Classification-gated AI agent gateway with MCP-attested transport (enclawed-oss)
category: agent
inference_capable: true
# Enclawed bootstraps every credential into the operator's OS keyring at
# install time (libsecret on Linux, Keychain on macOS, Credential Manager
# on Windows). Nothing is read from environment variables at sandbox
# entry, so OpenShell performs no env-var discovery for this provider.
# The sandbox image (enclawed/openshell-enclawed-sandbox) is responsible
# for running Enclawed's installer at first boot to populate the keyring.
credentials: []
discovery:
credentials: []
endpoints:
# Default Anthropic backend, used by the bundled coding-agent path
# (pi-coding-agent / codex). Operators whose Enclawed install targets
# a different LLM backend extend this allowlist in their sandbox
# config rather than here.
- host: api.anthropic.com
port: 443
protocol: rest
access: read-write
enforcement: enforce
# Local Ollama, used by the bundled secretary path (default model
# qwen2.5:32b-instruct). Stays on loopback inside the sandbox.
- host: 127.0.0.1
port: 11434
protocol: rest
access: read-write
enforcement: enforce
binaries: [/usr/bin/enclawed, /usr/local/bin/enclawed]
Loading