Skip to content

Commit c70fb90

Browse files
authored
Merge branch 'NVIDIA:main' into main
2 parents a60ce82 + b4e20c1 commit c70fb90

154 files changed

Lines changed: 27158 additions & 1009 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/debug-openshell-cluster/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ If DNS is broken, all image pulls from the distribution registry will fail, as w
303303
| mTLS secrets missing | Bootstrap couldn't apply secrets (namespace not ready) | Check deploy logs and verify `openshell` namespace exists (Step 6) |
304304
| mTLS mismatch after redeploy | PKI rotated but workload not restarted, or rollout failed | Check that all three TLS secrets exist and that the openshell pod restarted after cert rotation (Step 6) |
305305
| Helm install job failed | Chart values error or dependency issue | `openshell doctor exec -- kubectl -n kube-system logs -l job-name=helm-install-openshell` |
306+
| NFD/GFD DaemonSets present (`node-feature-discovery`, `gpu-feature-discovery`) | Cluster was deployed before NFD/GFD were disabled (pre-simplify-device-plugin change) | These are harmless but add overhead. Clean up: `openshell doctor exec -- kubectl delete daemonset -n nvidia-device-plugin -l app.kubernetes.io/name=node-feature-discovery` and similarly for GFD. The `nvidia.com/gpu.present` node label is no longer applied; device plugin scheduling no longer requires it. |
306307
| Architecture mismatch (remote) | Built on arm64, deploying to amd64 | Cross-build the image for the target architecture |
307308
| Port conflict | Another service on the configured gateway host port (default 8080) | Stop conflicting service or use `--port` on `openshell gateway start` to pick a different host port |
308309
| gRPC connect refused to `127.0.0.1:443` in CI | Docker daemon is remote (`DOCKER_HOST=tcp://...`) but metadata still points to loopback | Verify metadata endpoint host matches `DOCKER_HOST` and includes non-loopback host |

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ python/openshell/_proto/*_pb2.pyi linguist-generated
88

99
# Generated Rust protobuf code (excludes hand-written mod.rs)
1010
crates/openshell-core/src/proto/openshell.*.rs linguist-generated
11+
12+
# Vendored OCSF schemas fetched from schema.ocsf.io
13+
crates/openshell-ocsf/schemas/** linguist-generated

.github/workflows/docker-build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,7 @@ jobs:
9090
env:
9191
DOCKER_BUILDER: openshell
9292
OPENSHELL_CARGO_VERSION: ${{ steps.version.outputs.cargo_version }}
93+
# Enable dev-settings feature for test settings (dummy_bool, dummy_int)
94+
# used by e2e tests.
95+
EXTRA_CARGO_FEATURES: openshell-core/dev-settings
9396
run: mise run --no-prepare docker:build:${{ inputs.component }}

.github/workflows/release-auto-tag.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ name: Release Auto-Tag
66
on:
77
workflow_dispatch: {}
88
schedule:
9-
- cron: "0 14 * * *" # 7 AM PDT
9+
- cron: "0 14 * * 1-5" # 7 AM PDT, weekdays only
1010

1111
permissions:
1212
contents: write

Cargo.lock

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ OpenShell is built agent-first. The project ships with agent skills for everythi
1414
1515
## Quickstart
1616

17-
1817
### Prerequisites
1918

2019
- **Docker** — Docker Desktop (or a Docker daemon) must be running.
@@ -33,10 +32,12 @@ curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh |
3332
uv tool install -U openshell
3433
```
3534

35+
Both methods install the latest stable release by default. To install a specific version, set `OPENSHELL_VERSION` (binary) or pin the version with `uv tool install openshell==<version>`. A [`dev` release](https://github.com/NVIDIA/OpenShell/releases/tag/dev) is also available that tracks the latest commit on `main`.
36+
3637
### Create a sandbox
3738

3839
```bash
39-
openshell sandbox create -- claude # or opencode, codex, ollama
40+
openshell sandbox create -- claude # or opencode, codex, copilot
4041
```
4142

4243
A gateway is created automatically on first use. To deploy on a remote host instead, pass `--remote user@host` to the create command.
@@ -45,7 +46,7 @@ The sandbox container includes the following tools by default:
4546

4647
| Category | Tools |
4748
| ---------- | -------------------------------------------------------- |
48-
| Agent | `claude`, `opencode`, `codex` |
49+
| Agent | `claude`, `opencode`, `codex`, `copilot` |
4950
| Language | `python` (3.13), `node` (22) |
5051
| Developer | `gh`, `git`, `vim`, `nano` |
5152
| Networking | `ping`, `dig`, `nslookup`, `nc`, `traceroute`, `netstat` |
@@ -115,9 +116,11 @@ Policies are declarative YAML files. Static sections (filesystem, process) are l
115116

116117
## Providers
117118

118-
Agents need credentials — API keys, tokens, service accounts. OpenShell manages these as **providers**: named credential bundles that are injected into sandboxes at creation. The CLI auto-discovers credentials for recognized agents (Claude, Codex, OpenCode) from your shell environment, or you can create providers explicitly with `openshell provider create`. Credentials never leak into the sandbox filesystem; they are injected as environment variables at runtime.
119+
Agents need credentials — API keys, tokens, service accounts. OpenShell manages these as **providers**: named credential bundles that are injected into sandboxes at creation. The CLI auto-discovers credentials for recognized agents (Claude, Codex, OpenCode, Copilot) from your shell environment, or you can create providers explicitly with `openshell provider create`. Credentials never leak into the sandbox filesystem; they are injected as environment variables at runtime.
120+
121+
## GPU Support (Experimental)
119122

120-
## GPU Support
123+
> **Experimental**GPU passthrough works on supported hosts but is under active development. Expect rough edges and breaking changes.
121124
122125
OpenShell can pass host GPUs into sandboxes for local inference, fine-tuning, or any GPU workload. Add `--gpu` when creating a sandbox:
123126

@@ -136,8 +139,9 @@ The CLI auto-bootstraps a GPU-enabled gateway on first use. GPU intent is also i
136139
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Works out of the box. Provider uses `ANTHROPIC_API_KEY`. |
137140
| [OpenCode](https://opencode.ai/) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Works out of the box. Provider uses `OPENAI_API_KEY` or `OPENROUTER_API_KEY`. |
138141
| [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`. |
142+
| [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`. |
139143
| [OpenClaw](https://openclaw.ai/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Launch with `openshell sandbox create --from openclaw`. |
140-
| [Ollama](https://ollama.com/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Launch with `openshell sandbox create --from ollama`. |
144+
| [Ollama](https://ollama.com/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Launch with `openshell sandbox create --from ollama`. |
141145

142146
## Key Commands
143147

architecture/README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,17 +224,19 @@ Sandbox behavior is governed by policies written in YAML and evaluated by an emb
224224

225225
Inference routing to `inference.local` is configured separately at the cluster level and does not require network policy entries. The OPA engine evaluates only explicit network policies; `inference.local` connections bypass OPA entirely and are handled by the proxy's dedicated inference interception path.
226226

227-
Policies are not intended to be hand-edited by end users in normal operation. They are associated with sandboxes at creation time and fetched by the sandbox supervisor at startup via gRPC. For development and testing, policies can also be loaded from local files.
227+
Policies are not intended to be hand-edited by end users in normal operation. They are associated with sandboxes at creation time and fetched by the sandbox supervisor at startup via gRPC. For development and testing, policies can also be loaded from local files. A gateway-global policy can override all sandbox policies via `openshell policy set --global`.
228228

229-
For more detail, see [Policy Language](security-policy.md).
229+
In addition to policy, the gateway delivers runtime **settings** -- typed key-value pairs (e.g., `log_level`) that can be configured per-sandbox or globally. Settings and policy are delivered together through the `GetSandboxSettings` RPC and tracked by a single `config_revision` fingerprint. See [Gateway Settings Channel](gateway-settings.md) for details.
230+
231+
For more detail on the policy language, see [Policy Language](security-policy.md).
230232

231233
### Command-Line Interface
232234

233235
The CLI is the primary way users interact with the platform. It provides commands organized into four groups:
234236

235237
- **Gateway management** (`openshell gateway`): Deploy, stop, destroy, and inspect clusters. Supports both local and remote (SSH) targets.
236238
- **Sandbox management** (`openshell sandbox`): Create sandboxes (with optional file upload and provider auto-discovery), connect to sandboxes via SSH, and delete sandboxes.
237-
- **Top-level commands**: `openshell status` (cluster health), `openshell logs` (sandbox logs), `openshell forward` (port forwarding), `openshell policy` (sandbox policy management).
239+
- **Top-level commands**: `openshell status` (cluster health), `openshell logs` (sandbox logs), `openshell forward` (port forwarding), `openshell policy` (sandbox policy management), `openshell settings` (effective sandbox settings and global/sandbox key updates).
238240
- **Provider management** (`openshell provider`): Create, update, list, and delete external service credentials.
239241
- **Inference management** (`openshell cluster inference`): Configure cluster-level inference by specifying a provider and model. The gateway resolves endpoint and credential details from the named provider record.
240242

@@ -297,4 +299,5 @@ This opens an interactive SSH session into the sandbox, with all provider creden
297299
| [Policy Language](security-policy.md) | The YAML/Rego policy system that governs sandbox behavior. |
298300
| [Inference Routing](inference-routing.md) | Transparent interception and sandbox-local routing of AI inference API calls to configured backends. |
299301
| [System Architecture](system-architecture.md) | Top-level system architecture diagram with all deployable components and communication flows. |
302+
| [Gateway Settings Channel](gateway-settings.md) | Runtime settings channel: two-tier key-value configuration, global policy override, settings registry, CLI/TUI commands. |
300303
| [TUI](tui.md) | Terminal user interface for sandbox interaction. |

architecture/gateway-security.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ These are used to build a `tonic::transport::ClientTlsConfig` with:
229229
- `identity()` -- presents the shared client certificate for mTLS.
230230

231231
The sandbox calls two RPCs over this authenticated channel:
232-
- `GetSandboxPolicy` -- fetches the YAML policy that governs the sandbox's behavior.
232+
- `GetSandboxSettings` -- fetches the YAML policy that governs the sandbox's behavior.
233233
- `GetSandboxProviderEnvironment` -- fetches provider credentials as environment variables.
234234

235235
## SSH Tunnel Authentication

0 commit comments

Comments
 (0)