Skip to main content

Agent Deployment Modes

Back to main doc

Rossoctl supports two agent deployment modes that coexist in the same cluster.

Mode 1: Custom A2A Agents (Rossoctl-managed)

Custom agents deployed as K8s Deployments with A2A JSON-RPC 2.0 protocol. Used for production agents with custom code and frameworks.

  • Image: Custom Dockerfile per agent
  • Interaction: A2A JSON-RPC 2.0 (programmatic)
  • Lifecycle: Long-running Deployment
  • Session management: Rossoctl backend PostgreSQL

Custom agent types in the PoC

Agent IDFrameworkLLMSupervisorA2A Skills
weather_agentLangGraphNo (MCP weather tool)NoN/A
adk_agentGoogle ADK + LiteLLMLiteMaaS (llama-scout)NoPR review via tool
claude_sdk_agentAnthropic SDK / OpenAI-compatLiteMaaS (llama-scout)NoCode review via prompt
weather_supervisedLangGraphNo (MCP weather tool)Yes (Landlock+netns+OPA)N/A

Mode 2: Built-in Sandboxes (OpenShell-managed)

Pre-installed CLI agents created via OpenShell gateway Sandbox CRs. The base image includes Claude Code, OpenCode, Codex, Copilot, Python, Node.js, git.

  • Image: ghcr.io/nvidia/openshell-community/sandboxes/base:latest (~1.1GB)
  • Interaction: SSH exec or ExecSandbox gRPC (Rossoctl backend adapter in Phase 2)
  • Lifecycle: Ephemeral sandbox (Sandbox CR, on-demand create/destroy)
  • Session management: Workspace PVC + Rossoctl backend PostgreSQL

Builtin sandbox types in the PoC

Sandbox IDCLI AgentLLMWorks with LiteMaaS?Rossoctl Skill Support
openshell_claudeClaude Code CLIAnthropic APINo (needs real key)Native (.claude/skills/)
openshell_opencodeOpenCode CLIOpenAI-compatYesVia tool/prompt system
openshell_genericNone (bare sandbox)N/AN/ANo agent to run skills

Pre-installed CLIs in base image

CLIBinaryLLM ProtocolNotes
claudeClaude CodeAnthropic /v1/messagesBest for rossoctl skills (native .claude/skills/ support)
opencodeOpenCodeOpenAI /v1/chat/completionsGood with LiteMaaS
codexOpenAI CodexOpenAI-specificNeeds real OpenAI key
copilotGitHub CopilotProprietaryNeeds GitHub subscription

Architecture with Both Modes

Both modes share the same namespace, LLM routing (LiteMaaS/Budget Proxy), and Istio mesh. Custom agents use A2A protocol; builtin sandboxes use SSH/exec, with the Rossoctl backend serving as the unified session manager.

Target: Unified Supervisor for ALL Agents

The ideal architecture runs ALL agents under the OpenShell supervisor for both egress control and zero-secret credential management.

Current blocker: The supervisor creates a network namespace that blocks kubectl port-forward and K8s Service routing to the agent port. A2A tests and production traffic cannot reach the agent.

Solution: Port bridge sidecar

# Sidecar bridges pod network → netns agent port
containers:
- name: port-bridge
image: alpine/socat
command: ["socat", "TCP-LISTEN:8080,fork,reuseaddr", "TCP:10.200.0.2:8080"]
ports:
- containerPort: 8080

Benefits of unified supervisor:

  • Zero-secret credential injection for ALL agents (gateway provider store)
  • OPA egress control on ALL agents (not just supervised variant)
  • Landlock filesystem isolation on ALL agents
  • Seccomp syscall filtering on ALL agents
  • Single credential management plane (OpenShell gateway)
  • No K8s Secrets needed for agent API keys

What's needed:

  1. Port bridge sidecar (simple socat container) — can implement now
  2. Supervisor binary delivery via init container (proposal's Option C)
  3. Test that A2A works through the bridge
  4. OR: upstream OpenShell --expose-port flag for native reverse proxy