Skip to content
Merged
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
Binary file added docs/assets/cncf-donation/hero-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/cncf-donation/hero.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions docs/dev-notes/authors.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,10 @@
"name": "Kirit Thadaka",
"github": "kirit93",
"description": "OpenShell Team @ NVIDIA"
},
"openshell-team": {
"name": "OpenShell Team",
"github": "ai-openshell",
"avatar": "assets/brand/openshell-mark.svg"
}
}
44 changes: 34 additions & 10 deletions docs/dev-notes/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ hide:
<option value="zredlined">Alex Watson</option>
<option value="johnnygreco">Johnny Greco</option>
<option value="kirit93">Kirit Thadaka</option>
<option value="openshell-team">OpenShell Team</option>
<option value="vishwa-raman">Vishwanath Raman</option>
</select>
</label>
Expand All @@ -51,11 +52,41 @@ hide:
<div class="journal-section__head">
<h2 id="featured-note-title" aria-live="polite" aria-atomic="true">Featured note</h2>
</div>
<article class="dev-note-card dev-note-card--featured dev-note-card--research dev-note-card--has-image" data-category="research" data-authors="[&quot;vishwa-raman&quot;]">
<article class="dev-note-card dev-note-card--featured dev-note-card--announcements dev-note-card--has-image" data-category="announcements" data-authors="[&quot;openshell-team&quot;]">
<a class="dev-note-card__link" href="posts/2026-11-09-donated-openshell-to-cncf/">
<div class="dev-note-card__visual dev-note-card__visual--announcements dev-note-card__visual--image" aria-hidden="true">
<img class="dev-note-card__visual-image dev-note-image--light" src="../assets/cncf-donation/hero.png" alt="" loading="eager" fetchpriority="high">
<img class="dev-note-card__visual-image dev-note-image--dark" src="../assets/cncf-donation/hero-dark.png" alt="" loading="eager" fetchpriority="high">
</div>
<div class="dev-note-card__copy">
<div class="dev-note-card__meta">
<time datetime="2026-11-09">November 9, 2026</time>
<span>Announcements</span>
</div>
<h3>OpenShell is now a CNCF Sandbox project</h3>
<p class="dev-note-card__summary">OpenShell is joining the CNCF as a Sandbox project: what moves, what stays the same, and how to contribute.</p>
<div class="dev-note-card__footer">
<span class="dev-note-card__authors" aria-label="Author: OpenShell Team">
<img src="../assets/brand/openshell-mark.svg" alt="" loading="lazy">
<span class="dev-note-card__author-names">OpenShell Team</span>
</span>
<span class="dev-note-card__read">Read note</span>
</div>
</div>
</a>
</article>
<p class="dev-notes-filter-empty" hidden></p>
</section>
<section class="journal-section dev-notes-recent" aria-labelledby="recent-notes-title">
<div class="journal-section__head">
<h2 id="recent-notes-title">Recent notes</h2>
</div>
<div class="dev-notes-recent-list">
<article class="dev-note-card dev-note-card--recent dev-note-card--research dev-note-card--has-image" data-category="research" data-authors="[&quot;vishwa-raman&quot;]">
<a class="dev-note-card__link" href="posts/2026-11-09-cedar-policy-language/">
<div class="dev-note-card__visual dev-note-card__visual--research dev-note-card__visual--image" aria-hidden="true">
<img class="dev-note-card__visual-image dev-note-image--light" src="../assets/cedar-policy/hero.png" alt="" loading="eager" fetchpriority="high">
<img class="dev-note-card__visual-image dev-note-image--dark" src="../assets/cedar-policy/hero-dark.png" alt="" loading="eager" fetchpriority="high">
<img class="dev-note-card__visual-image dev-note-image--light" src="../assets/cedar-policy/hero.png" alt="" loading="lazy">
<img class="dev-note-card__visual-image dev-note-image--dark" src="../assets/cedar-policy/hero-dark.png" alt="" loading="lazy">
</div>
<div class="dev-note-card__copy">
<div class="dev-note-card__meta">
Expand All @@ -74,13 +105,6 @@ hide:
</div>
</a>
</article>
<p class="dev-notes-filter-empty" hidden></p>
</section>
<section class="journal-section dev-notes-recent" aria-labelledby="recent-notes-title">
<div class="journal-section__head">
<h2 id="recent-notes-title">Recent notes</h2>
</div>
<div class="dev-notes-recent-list">
<article class="dev-note-card dev-note-card--recent dev-note-card--research dev-note-card--has-image" data-category="research" data-authors="[&quot;zredlined&quot;]">
<a class="dev-note-card__link" href="posts/2026-11-06-protecting-frontier-agent-workloads/">
<div class="dev-note-card__visual dev-note-card__visual--research dev-note-card__visual--image" aria-hidden="true">
Expand Down
144 changes: 144 additions & 0 deletions docs/dev-notes/posts/2026-11-09-donated-openshell-to-cncf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
---
title: "OpenShell is now a CNCF Sandbox project"
date: 2026-11-09
description: "OpenShell is joining the CNCF as a Sandbox project: what moves, what stays the same, and how to contribute."
author: "OpenShell Team"
agent_markdown: true
social_image: "assets/cncf-donation/hero.png"
hero_image: "../../assets/cncf-donation/hero.png"
hero_image_dark: "../../assets/cncf-donation/hero-dark.png"
hero_image_alt: "A large green terminal prompt symbol above a long row of diverse people silhouetted along a baseline, including a person in a wheelchair."
authors:
- openshell-team
categories:
- Announcements
tags:
- cncf
- agent-security
---

<!-- dev-note:header:start -->

<!-- Generated by scripts/render-dev-notes.py; edit front matter and authors.json. -->

<div class="dev-note-header" markdown="1">

# OpenShell is now a CNCF Sandbox project

<figure class="dev-note-figure dev-note-figure--hero">
<a class="dev-note-image--light" href="../../assets/cncf-donation/hero.png" aria-label="View full-size image: A large green terminal prompt symbol above a long row of diverse people silhouetted along a baseline, including a person in a wheelchair."><img src="../../assets/cncf-donation/hero.png" alt="A large green terminal prompt symbol above a long row of diverse people silhouetted along a baseline, including a person in a wheelchair." loading="eager" fetchpriority="high"></a>
<a class="dev-note-image--dark" href="../../assets/cncf-donation/hero-dark.png" aria-label="View full-size image: A large green terminal prompt symbol above a long row of diverse people silhouetted along a baseline, including a person in a wheelchair."><img src="../../assets/cncf-donation/hero-dark.png" alt="A large green terminal prompt symbol above a long row of diverse people silhouetted along a baseline, including a person in a wheelchair." loading="eager" fetchpriority="high"></a>
</figure>

</div>

<!-- dev-note:byline:start -->
<!-- Generated by scripts/render-dev-notes.py; edit front matter and authors.json. -->
<div class="dev-note-byline">
<div class="dev-note-byline__authors" aria-label="Author: OpenShell Team">
<a class="dev-note-byline__author" href="../index.md?author=openshell-team">
<img src="../../assets/brand/openshell-mark.svg" alt="" loading="lazy">
<span class="dev-note-byline__copy">
<strong>OpenShell Team</strong>
</span>
</a>
</div>
<p class="dev-note-byline__label">
<span>Dev Note</span>
<time datetime="2026-11-09">November 9, 2026</time>
<a href="../index.md?category=announcements">Announcements</a>
</p>
</div>
<!-- dev-note:byline:end -->

<!-- dev-note:header:end -->

Today, NVIDIA is contributing OpenShell, the open source runtime to secure and govern autonomous AI agents, to the Cloud Native Computing Foundation (CNCF) as a Sandbox project. OpenShell gives agents real capability in problem solving, without giving them unrestricted access to data, secrets, or networks.

NVIDIA built OpenShell with the understanding that policies and enforcement cannot meaningfully occur in agent prompts and harnesses as those are probabilistic and do not provide a secure deterministic safety perimeter. OpenShell provides that deterministic enforcement layer to secure and govern fleets of autonomous agents. It provides a Gateway to manage agent lifecycles, a Supervisor to enforce policies and secure communication to sandboxes that isolate agent workloads, credential brokering to ensure agents never see credentials, and OCSF event streams to observe and audit agent behaviors. OpenShell is adopting Cedar, a CNCF project, as its policy language, giving teams a proven, auditable framework with a formal verification model rather than natural language instructions that agents can misinterpret or circumvent.

Engineers from Red Hat, Docker, and Canonical joined as maintainers from early on, as an affirmation of the OpenShell thesis, and a demonstration of the value of deterministic controls for agent safety and governance. Moving OpenShell to CNCF puts that capability under neutral, community-led governance, similar to other industry-changing CNCF projects such as Kubernetes, Envoy, Prometheus, OpenTelemetry, gRPC, Helm, and others.

## Extensibility by design

OpenShell is built on the principle that no two agent deployments are alike. Compute infrastructure, secret stores, inference providers, and governance models vary across organizations and evolve over time. Rather than prescribe a stack, OpenShell defines clean interfaces at every layer so teams can bring what they already operate.

- **Providers** to connect your APIs and inference endpoints
- **Drivers** to bring your compute, from VMs to Kubernetes
- **Gateway interceptors** to plug in your governance and approval flows
- **Middleware** to extend policy enforcement at the Supervisor layer
- **Isolation backends** to bring your preferred sandbox or workload isolation primitive
- **Credential drivers** to integrate your secret storage and management

Each interface is designed to be independently extensible, so you can adopt OpenShell incrementally and swap components as your infrastructure matures.

## Why CNCF

The OpenShell maintainers are the community that includes engineers from NVIDIA, Red Hat, Docker, and Canonical, who have worked on OpenShell across the runtime, SDKs, and documentation. The project adopted the CNCF Code of Conduct, has a public RFC process, and a governance model with explicit vendor-neutrality commitments.

Agents are becoming cloud native infrastructure and belong in the cloud native ecosystem. The infrastructure that secures and governs these agents should therefore be part of CNCF and remain a community-driven asset without affinity to any specific vendor. Hosting OpenShell under the aegis of CNCF guarantees that no single organization controls the project’s direction or release decisions.

## What changes, what doesn’t

OpenShell is moving from NVIDIA’s GitHub repository to a neutral GitHub organization, ai-openshell. Components such as SDKs, drivers, and installation tooling may move into dedicated repositories under the same organization, each with its own maintainer team. We’ll form working groups and special interest groups for deeply integrated components like drivers, and for cross-cutting concerns like observability.

NVIDIA’s engineering and research investment doesn’t change. The core maintainer team stays on as core developers and keeps adapting OpenShell to the changing AI landscape.

## Where we’re headed

We’re migrating repositories and expanding the maintainer ecosystem. As a CNCF Sandbox project, we’re organizing community teams and building a public roadmap.

Sandbox is a stage, not a destination. Our near-term goal is CNCF Incubation, which requires:

- Maintainers from more organizations.
- Documented and practiced governance.
- Release and security discipline suited to critical workloads.

Several of these are already in motion. We invite the community to be stewards of OpenShell, jointly maintaining and contributing to make it into a robust ecosystem.

## How to contribute

If your organization already uses OpenShell, contributing is the fastest way to shape where it goes. Here are concrete ways to start.

1. **Build or harden an extension implementation.**

Pick the extension point closest to your stack and contribute a reference implementation, or improve an existing one. Examples include compute drivers for your scheduler or preferred cloud, credential drivers for secrets management, providers for inference, and logging exporters for your preferred observability pipelines.

Each interface should ship with documentation and a conformance test suite so third-party implementations behave consistently. Contributing to those suites is a high-leverage way into the OpenShell ecosystem.

2. **Write policy and enforcement logic.**

Build middleware or Gateway interceptors that encode real governance requirements, such as egress allowlists, tool-call approval flows, and per-tenant policy. Share them as examples or as a policy library. Gaps you find in the interface while doing this are valuable feedback, so file them as issues or design proposals.

We would welcome your feedback on the Cedar policy framework and proposals for extensions that make authoring policies easier. Cedar also provides the foundation for temporal policy extensions on our roadmap.

3. **Extend isolation backends and platform coverage.**

Help with Linux, macOS, and Kubernetes parity, including new isolation primitives, hardened defaults, and the security review that comes with them. Threat modeling and adversarial testing of sandbox escapes are especially welcome.

OpenShell is extending deeper into infrastructure components, including confidential computing capabilities that are vendor-agnostic. Building or extending existing drivers to take advantage of confidential computing for agent workloads will be a great starting point. We are concurrently working on enabling running of OpenShell services within confidential computing environments to assure integrity of the OpenShell Gateway and Supervisor. We welcome your contributions to these hardening capabilities.

4. **Improve observability.**

Help define consistent metrics, traces, and structured audit events across the Gateway, drivers, and sandboxes, aligned with OpenTelemetry. Real-time security monitoring depends on a schema everyone can rely on.

5. **Own packaging and release engineering.**

Maintain packages for common package managers, reproducible builds, SBOMs, signing, and CI. This directly supports the release and security discipline Incubation requires.

6. **Take on enterprise requirements.**

Contribute to multi-tenancy, authN/authZ integration (OIDC, RBAC), and policy-management workflows, using the use cases you see in your own deployments.

## Get involved

- Join the [mailing list](https://groups.google.com/a/ai-openshell.org/g/openshell-community/about) for community notes and call invites.
- Find us in the [CNCF Slack channel #openshell-dev](https://slack.cncf.io/).
- Watch the [ai-openshell GitHub organization](https://github.com/ai-openshell) for new repositories, “good first issue” labels, and design proposals.
- Watch for working groups and SIGs, which will form around drivers, security, observability, and other areas. Join the one that matches your use case.

We welcome contributors, end users, and people who are both.

## Attribution

Thanks to Alex Sandu, Principal Product Marketing Manager, Agentic AI at NVIDIA, and the entire OpenShell team for their contributions to this dev note.
21 changes: 16 additions & 5 deletions scripts/render-dev-notes.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import datetime as dt
import html
import json
import os
import re
from pathlib import Path
from typing import Any
Expand Down Expand Up @@ -132,9 +133,19 @@ def require_authors(ids: list[str], authors: dict[str, dict[str, str]], path: Pa
return resolved


def avatar_url(author: dict[str, str], size: int) -> str:
if "avatar" in author:
return author["avatar"]
def avatar_url(author: dict[str, str], size: int, page_dir: Path) -> str:
"""Resolve an author avatar URL, or a docs-relative avatar path for page_dir."""
avatar = author.get("avatar", "").strip()
if avatar.startswith(("https://", "http://")):
return avatar
if avatar:
docs_root = (ROOT / "docs").resolve()
avatar_path = (docs_root / avatar).resolve()
if not avatar_path.is_relative_to(docs_root):
raise ValueError(f"Author {author.get('name', '<unknown>')} avatar must stay inside {docs_root}")
if not avatar_path.is_file():
raise ValueError(f"Author {author.get('name', '<unknown>')} avatar does not exist: {avatar_path}")
return Path(os.path.relpath(avatar_path, page_dir.resolve())).as_posix()
github = author.get("github")
if not github:
raise ValueError(f"Author {author.get('name', '<unknown>')} needs a github or avatar field")
Expand Down Expand Up @@ -255,7 +266,7 @@ def render_card_visual(post: dict[str, Any], *, eager: bool = False) -> str:

def render_card_authors(authors: list[dict[str, str]]) -> str:
author_images = "\n".join(
f' <img src="{html.escape(avatar_url(author, 64), quote=True)}" alt="" loading="lazy">'
f' <img src="{html.escape(avatar_url(author, 64, DEV_NOTES_DIR), quote=True)}" alt="" loading="lazy">'
for author in authors
)
names = natural_join([author["name"] for author in authors])
Expand Down Expand Up @@ -451,7 +462,7 @@ def render_byline(post: dict[str, Any]) -> str:
description_html = f"\n <span>{html.escape(description)}</span>" if description else ""
blocks.append(
f""" <a class="dev-note-byline__author" href="{html.escape(author_url, quote=True)}">
<img src="{html.escape(avatar_url(author, 96), quote=True)}" alt="" loading="lazy">
<img src="{html.escape(avatar_url(author, 96, post["path"].parent), quote=True)}" alt="" loading="lazy">
<span class="dev-note-byline__copy">
<strong>{html.escape(author["name"])}</strong>{description_html}
</span>
Expand Down
1 change: 1 addition & 0 deletions zensical.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ nav = [
"dev-notes/index.md",
{"Posts" = [
# dev-notes:nav:start
{"OpenShell is now a CNCF Sandbox project" = "dev-notes/posts/2026-11-09-donated-openshell-to-cncf.md"},
{"Cedar as the policy language in OpenShell" = "dev-notes/posts/2026-11-09-cedar-policy-language.md"},
{"Protecting frontier agent workloads with OpenShell" = "dev-notes/posts/2026-11-06-protecting-frontier-agent-workloads.md"},
{"Introducing OpenShell Research" = "dev-notes/posts/2026-09-28-introducing-openshell-research.md"},
Expand Down
Loading