Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3f6aabf
feat(gateway/sandbox): add global and sandbox runtime settings flow
johntmyers Mar 17, 2026
78a7f53
feat(settings): wip sandbox settings channel and typed registry
johntmyers Mar 17, 2026
39e99b6
feat(settings): wip global settings get and full key materialization
johntmyers Mar 18, 2026
001cfdb
fix(settings): use prefixed ID for sandbox settings to avoid object s…
johntmyers Mar 18, 2026
7164d1f
feat(tui): add global settings tab with typed editing and HITL confir…
johntmyers Mar 18, 2026
4233921
feat(settings): support sandbox-scoped setting delete when not global…
johntmyers Mar 18, 2026
c1e45de
feat(tui): add per-sandbox settings tab with scope indicators and edi…
johntmyers Mar 18, 2026
264f23b
refactor(sandbox): improve poll loop logging to diff settings and con…
johntmyers Mar 18, 2026
897c5cb
update arch docs for new settings comms channel
johntmyers Mar 18, 2026
d9c93a6
fix(settings): add mutex to serialize settings mutations and prevent …
johntmyers Mar 18, 2026
a0c042c
fix(settings): prefix global ID, use wrapping_add, add --json output,…
johntmyers Mar 18, 2026
8279803
refactor(proto): rename UpdateSandboxPolicy to UpdateSettings for con…
johntmyers Mar 18, 2026
2b227f3
fix(settings): address remaining review findings (W3-W6, S1)
johntmyers Mar 18, 2026
55a2e6a
feat(settings): add global policy versioning with revision history an…
johntmyers Mar 18, 2026
d6c317f
feat(settings): add global policy versioning, dashboard indicator, an…
johntmyers Mar 19, 2026
8170940
chore: fix rustfmt import ordering
johntmyers Mar 19, 2026
7830189
fix(e2e): update Python tests for UpdateSandboxPolicy -> UpdateSettin…
johntmyers Mar 19, 2026
85fef54
fix(tui): add Left arrow key to sandbox policy/settings tab switching
johntmyers Mar 19, 2026
a491926
chore(settings): gate dev keys behind feature flag, filter stale keys…
johntmyers Mar 19, 2026
2012d12
chore: fix rustfmt import ordering in settings.rs
johntmyers Mar 19, 2026
df84ff4
fix(settings): gate CLI tests referencing dev-settings keys
johntmyers Mar 19, 2026
bc52637
fix(settings): block draft chunk approval when global policy is active
johntmyers Mar 20, 2026
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
3 changes: 3 additions & 0 deletions .github/workflows/docker-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,7 @@ jobs:
env:
DOCKER_BUILDER: openshell
OPENSHELL_CARGO_VERSION: ${{ steps.version.outputs.cargo_version }}
# Enable dev-settings feature for test settings (dummy_bool, dummy_int)
# used by e2e tests.
EXTRA_CARGO_FEATURES: openshell-core/dev-settings
run: mise run --no-prepare docker:build:${{ inputs.component }}
9 changes: 6 additions & 3 deletions architecture/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,17 +224,19 @@ Sandbox behavior is governed by policies written in YAML and evaluated by an emb

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.

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.
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`.

For more detail, see [Policy Language](security-policy.md).
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.

For more detail on the policy language, see [Policy Language](security-policy.md).

### Command-Line Interface

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

- **Gateway management** (`openshell gateway`): Deploy, stop, destroy, and inspect clusters. Supports both local and remote (SSH) targets.
- **Sandbox management** (`openshell sandbox`): Create sandboxes (with optional file upload and provider auto-discovery), connect to sandboxes via SSH, and delete sandboxes.
- **Top-level commands**: `openshell status` (cluster health), `openshell logs` (sandbox logs), `openshell forward` (port forwarding), `openshell policy` (sandbox policy management).
- **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).
- **Provider management** (`openshell provider`): Create, update, list, and delete external service credentials.
- **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.

Expand Down Expand Up @@ -297,4 +299,5 @@ This opens an interactive SSH session into the sandbox, with all provider creden
| [Policy Language](security-policy.md) | The YAML/Rego policy system that governs sandbox behavior. |
| [Inference Routing](inference-routing.md) | Transparent interception and sandbox-local routing of AI inference API calls to configured backends. |
| [System Architecture](system-architecture.md) | Top-level system architecture diagram with all deployable components and communication flows. |
| [Gateway Settings Channel](gateway-settings.md) | Runtime settings channel: two-tier key-value configuration, global policy override, settings registry, CLI/TUI commands. |
| [TUI](tui.md) | Terminal user interface for sandbox interaction. |
2 changes: 1 addition & 1 deletion architecture/gateway-security.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ These are used to build a `tonic::transport::ClientTlsConfig` with:
- `identity()` -- presents the shared client certificate for mTLS.

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

## SSH Tunnel Authentication
Expand Down
Loading
Loading