Skip to content

LobsterTrap/podman-desktop-extension-openshell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenShell Extension for Podman Desktop

A Podman Desktop extension that provides point-and-click management of OpenShell (LobsterTrap midstream fork) β€” the safe, private runtime for autonomous AI agents.

Features

πŸ—οΈ Gateway Management

Start, stop, destroy, select, and configure OpenShell gateways directly from Podman Desktop. The gateway is the control-plane container that coordinates sandbox lifecycle and acts as the auth boundary.

  • Start Gateway β€” Interactive form for name, port, GPU passthrough, and remote deployment
  • Stop Gateway β€” Gracefully stop a running gateway (preserves state)
  • Destroy Gateway β€” Permanently delete a gateway and all its state
  • Select Gateway β€” Switch between multiple configured gateways
  • Add Gateway β€” Register an existing gateway (local, remote mTLS, or edge-authenticated)
  • Gateway Info β€” View detailed gateway configuration and status

πŸ“¦ Sandbox Management

Create, delete, connect to, and inspect sandboxes β€” isolated container environments for AI agents with policy-enforced security.

  • Create Sandbox β€” Guided wizard: select agent (Claude, Codex, Copilot, OpenCode), choose image source (default, community, custom, local Dockerfile), attach providers, configure GPU/policy
  • Delete Sandbox β€” Multi-select deletion with confirmation
  • Connect to Sandbox β€” Open a terminal session to a running sandbox
  • List Sandboxes β€” Interactive webview table with status, ID, age, and action buttons
  • Sandbox Details β€” Inspect sandbox configuration and metadata
  • Execute in Sandbox β€” Run commands inside a running sandbox

πŸ”‘ Provider Management

Create, update, delete, and inspect credential providers β€” named credential bundles (API keys, tokens) injected into sandboxes at runtime.

  • Create Provider β€” Select type (Claude, OpenAI, Anthropic, GitHub, NVIDIA, etc.), choose credential source (auto-discover from environment or manual entry)
  • Update Provider β€” Re-discover credentials or manually update key-value pairs
  • Delete Provider β€” Multi-select deletion
  • List Providers β€” Interactive webview table with type and action buttons
  • Provider Details β€” Inspect provider configuration (credentials are never displayed)

πŸ–₯️ Terminal UI

Access the OpenShell TUI β€” a real-time terminal dashboard for monitoring gateways, sandboxes, and providers, inspired by k9s.

  • Native Terminal β€” Launch openshell term in your system terminal emulator (recommended for full interactivity)
  • Embedded Viewer β€” Simplified status viewer inside Podman Desktop with keyboard shortcut reference

πŸ“‹ Log Viewer

View and stream sandbox logs with filtering and search.

  • Snapshot mode β€” Fetch the last N log lines
  • Tail mode β€” Stream live logs in real-time
  • Filters β€” By source (gateway/sandbox), level (error/warn/debug), and time range
  • Search β€” Full-text search with highlighting
  • Color coding β€” Error (red), warn (yellow), debug (blue), trace (gray)

πŸ” Diagnostics

Comprehensive diagnostics viewer aggregating output from multiple OpenShell diagnostic commands.

  • System Check (openshell doctor check) β€” Validate prerequisites: container runtime installed, running, and reachable
  • Gateway Status (openshell status) β€” Current gateway health and configuration
  • Gateway Logs (openshell doctor logs) β€” Recent gateway container logs
  • Quick Check β€” One-click doctor check from the command palette
  • Collapsible sections β€” Each diagnostic section can be expanded/collapsed independently
  • Re-run button β€” Refresh all diagnostics with one click

πŸ“Š Status Bar

A persistent status bar indicator showing the current gateway state:

  • ● running β€” Gateway is active and healthy
  • β—‹ stopped β€” No gateway detected
  • Click to open the full status view

Screenshots

(TODO: Add screenshots once the extension is built and running)

Installation

Prerequisites

Install the Extension

From the Extension Catalog

(Coming soon β€” once published to the Podman Desktop extension registry)

Manual Installation

  1. Clone this repository:

    git clone https://github.com/LobsterTrap/podman-desktop-extension-openshell.git
    cd podman-desktop-extension-openshell
  2. Install dependencies and build:

    npm install
    npm run build
  3. Install in Podman Desktop:

    • Open Podman Desktop β†’ Settings β†’ Extensions
    • Click "Install a new extension from OCI Image" or drag the .cdix file

Install OpenShell CLI

If you don't have openshell installed, the extension will prompt you to install it. You can also install it manually:

Binary (recommended):

curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh

From PyPI (requires uv):

uv tool install -U openshell

Fedora/RHEL via COPR:

sudo dnf copr enable maxamillion/openshell
sudo dnf install openshell

Usage

Quick Start

  1. Start a gateway: Open the command palette (Ctrl+Shift+P) β†’ OpenShell: Start Gateway
  2. Create a sandbox: OpenShell: Create Sandbox β†’ Select an agent (Claude, Codex, etc.)
  3. Monitor: OpenShell: Diagnostics or OpenShell: Open Terminal UI

Command Palette

All commands are available from the command palette (Ctrl+Shift+P / Cmd+Shift+P):

Command Description
OpenShell: Start Gateway Deploy a new gateway
OpenShell: Stop Gateway Stop the active gateway
OpenShell: Destroy Gateway Permanently destroy a gateway
OpenShell: Select Gateway Switch between gateways
OpenShell: Gateway Info View gateway details
OpenShell: Add Gateway Register an existing gateway
OpenShell: Create Sandbox Create a new sandbox
OpenShell: Delete Sandbox Delete sandbox(es)
OpenShell: Connect to Sandbox Open a terminal to a sandbox
OpenShell: List Sandboxes View all sandboxes
OpenShell: Sandbox Details Inspect a sandbox
OpenShell: Execute in Sandbox Run a command in a sandbox
OpenShell: Create Provider Create a credential provider
OpenShell: Delete Provider Delete provider(s)
OpenShell: List Providers View all providers
OpenShell: Provider Details Inspect a provider
OpenShell: Update Provider Update provider credentials
OpenShell: View Logs Open the log viewer
OpenShell: Open Terminal UI Launch the TUI
OpenShell: Diagnostics Open diagnostics panel
OpenShell: Doctor Check Quick system check
OpenShell: Show Status Full status overview

Configuration

Settings are available in Podman Desktop β†’ Settings β†’ Preferences β†’ OpenShell:

Setting Default Description
openshell.binary.path (auto-detect) Custom path to the openshell binary
openshell.gateway.name openshell Default gateway name
openshell.gateway.port 8080 Default gateway port
openshell.gateway.gpu false Enable NVIDIA GPU passthrough by default
openshell.sandbox.defaultAgent (none) Default agent for sandbox creation
openshell.logs.defaultLines 200 Default number of log lines to fetch
openshell.diagnostics.autoRun false Auto-run doctor check on activation
openshell.tui.theme auto TUI color theme (auto/dark/light)

Architecture

The extension is a thin GUI layer over the openshell CLI. All operations call extensionApi.process.exec() to invoke the binary, parse its output, and present results through Podman Desktop's UI primitives:

Extension                          OpenShell CLI
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ GatewayManager      │──exec──→  β”‚ gateway     β”‚
β”‚ SandboxManager      │──exec──→  β”‚ sandbox     β”‚
β”‚ ProviderManager     │──exec──→  β”‚ provider    β”‚
β”‚ LogViewer           │──exec──→  β”‚ logs        β”‚
β”‚ DiagnosticsViewer   │──exec──→  β”‚ doctor      β”‚
β”‚ TuiTerminal         │──spawn──→ β”‚ term        β”‚
β”‚ StatusBar           │──exec──→  β”‚ status      β”‚
β”‚ SandboxTerminal     │──ssh2───→ β”‚ ssh-proxy   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                               β”‚
         β–Ό                               β–Ό
  Podman Desktop APIs             SSH tunnel to
  (provider, commands,            sandbox container
   webviews, process,             (via HTTP CONNECT
   context, statusbar,            through gateway)
   progress, dialogs)

The sandbox terminal uses a custom architecture for full interactive SSH sessions: openshell ssh-proxy is spawned as a child process, its stdio is wrapped as a Node.js Duplex stream, and the ssh2 library speaks SSH protocol over that stream β€” no system SSH binary or node-pty needed. See DESIGN.md Β§5.4 for the full connection flow.

See DESIGN.md for the full architecture documentation.

Development

Prerequisites

  • Node.js 18+
  • npm or pnpm

Build

npm install
npm run build          # Build for production
npm run watch          # Build with watch mode for development

Test

npm test               # Run tests
npm run test:watch     # Watch mode

Project Structure

src/
β”œβ”€β”€ extension.ts         # Activation entry point β€” wires everything together
β”œβ”€β”€ openshell-cli.ts     # Typed wrapper around the openshell binary
β”œβ”€β”€ gateway-manager.ts   # Gateway CRUD + lifecycle UI
β”œβ”€β”€ sandbox-manager.ts   # Sandbox CRUD + lifecycle UI
β”œβ”€β”€ sandbox-terminal.ts  # Interactive SSH terminal (ssh2 + xterm.js)
β”œβ”€β”€ provider-manager.ts  # Provider CRUD UI
β”œβ”€β”€ log-viewer.ts        # Log streaming webview with auto-refresh
β”œβ”€β”€ diagnostics.ts       # Diagnostics aggregation webview
β”œβ”€β”€ tui-terminal.ts      # TUI native terminal launcher
β”œβ”€β”€ status-bar.ts        # Status bar indicator with polling
└── util.ts              # Shared utilities (error handling, HTML escaping)

Contributing

Contributions are welcome! Please see the OpenShell CONTRIBUTING.md for guidelines.

License

Apache License 2.0

About

Podman Desktop Extension for OpenShell

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors