skills/novita-sandbox/SKILL.md
Novita Agent Sandbox CLI wrapper — build templates, manage sandboxes, and deploy agents via `novita-sandbox-cli`. Use when user asks to "create a sandbox", "build a template", "deploy an agent", "list sandboxes", "kill sandbox", "sandbox logs", "clone sandbox", "commit sandbox", "template build", "novita-sandbox-cli", "novita sandbox", or any Novita Sandbox CLI operation.
npx skillsauth add novitalabs/novita-skills novita-sandboxInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
novita-sandbox-cli wraps the Novita Agent Sandbox platform. Use it to build templates from Dockerfiles, manage sandbox lifecycles, and deploy agents.
If this skill is not yet installed locally, [AGENT] follow these steps to install it.
# Claude Code
if [ -d "$HOME/.claude/skills" ]; then
echo "CLAUDE_CODE"
# Gemini CLI
elif [ -d "$HOME/.gemini/skills" ]; then
echo "GEMINI_CLI"
# OpenClaw
elif command -v openclaw >/dev/null 2>&1; then
echo "OPENCLAW"
else
echo "UNKNOWN"
fi
Claude Code:
SKILL_DIR="$HOME/.claude/skills/novita-sandbox"
mkdir -p "$SKILL_DIR/references"
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/SKILL.md" \
-o "$SKILL_DIR/SKILL.md"
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/references/cli-reference.md" \
-o "$SKILL_DIR/references/cli-reference.md"
echo "Installed to $SKILL_DIR"
Gemini CLI:
SKILL_DIR="$HOME/.gemini/skills/novita-sandbox"
mkdir -p "$SKILL_DIR/references"
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/SKILL.md" \
-o "$SKILL_DIR/SKILL.md"
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/references/cli-reference.md" \
-o "$SKILL_DIR/references/cli-reference.md"
echo "Installed to $SKILL_DIR"
Other agents / manual install:
SKILL_DIR="<your-agent-skills-directory>/novita-sandbox"
mkdir -p "$SKILL_DIR/references"
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/SKILL.md" \
-o "$SKILL_DIR/SKILL.md"
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/references/cli-reference.md" \
-o "$SKILL_DIR/references/cli-reference.md"
Installation is NOT complete until all of the following are true:
references/cli-reference.md is saved alongside it[AGENT] sends the user a confirmation message:✅ novita-sandbox skill installed.
What you can do now:
- "create a sandbox" — spin up a sandbox from a template
- "build a template" — build from Dockerfile
- "deploy an agent" — deploy and invoke agents
- "list sandboxes" — see running sandboxes
CLI version: <version>
Docs: https://novita.ai/docs/guides/sandbox-overview
Run this check every time the skill is triggered.
if ! command -v node >/dev/null 2>&1; then
echo "NO_NODE"
elif ! command -v novita-sandbox-cli >/dev/null 2>&1; then
echo "NOT_INSTALLED"
else
_LOCAL=$(novita-sandbox-cli --version)
_LATEST=$(npm view novita-sandbox-cli@beta version 2>/dev/null)
if [ -n "$_LATEST" ] && [ "$_LOCAL" != "$_LATEST" ]; then
echo "OUTDATED local=$_LOCAL latest=$_LATEST"
else
echo "OK $_LOCAL"
fi
fi
Act on result:
brew install nodecurl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejsnpm install -g novita-sandbox-cli@betanpm install -g novita-sandbox-cli@betaAfter install or upgrade, verify authentication:
novita-sandbox-cli auth info 2>&1 || echo "NOT_LOGGED_IN"
If NOT_LOGGED_IN, run novita-sandbox-cli auth login (opens browser).
Set NOVITA_API_KEY environment variable for SDK usage.
| Key | Value |
|-----|-------|
| CLI name | novita-sandbox-cli |
| Docs | https://novita.ai/docs/guides/sandbox-overview |
| Console | https://novita.ai/console |
| NPM | https://www.npmjs.com/package/novita-sandbox-cli |
novita-sandbox-cli
├── auth # login, logout, info, configure (switch team)
├── template # build, list, init, delete, publish, unpublish, version
├── sandbox # create, list, connect, kill, logs, metrics, clone, commit
└── agent # configure, launch (deploy), invoke
# Initialize a starter Dockerfile
novita-sandbox-cli template init
# Build and push (auto-detects novita.Dockerfile)
novita-sandbox-cli template build -n my-template
# Rebuild an existing template
novita-sandbox-cli template build <template-id>
# Create sandbox without connecting terminal (for non-interactive / agent use)
novita-sandbox-cli sandbox create <template-id> --detach
# Create sandbox and connect interactive terminal (TTY required)
novita-sandbox-cli sandbox create <template-id>
# List running sandboxes
novita-sandbox-cli sandbox list
# Connect to an existing sandbox
novita-sandbox-cli sandbox connect <sandbox-id>
# View logs (streaming)
novita-sandbox-cli sandbox logs <sandbox-id> -f
# View metrics (CPU, memory, disk)
novita-sandbox-cli sandbox metrics <sandbox-id> -f
# Kill a sandbox
novita-sandbox-cli sandbox kill <sandbox-id>
# Kill all running sandboxes
novita-sandbox-cli sandbox kill --all
Important: When running inside an AI agent (Claude Code, Gemini CLI, etc.), always use --detach (-d) with sandbox create. These environments do not have a real TTY, so the interactive terminal will fail. Create with --detach, then use sandbox connect from a real terminal if needed.
# Clone a sandbox (create identical copies)
novita-sandbox-cli sandbox clone <sandbox-id> --count 3
# Commit sandbox state as a snapshot template
novita-sandbox-cli sandbox commit <sandbox-id> --alias my-snapshot
# Configure agent project (creates Dockerfile + config)
novita-sandbox-cli agent configure -n my-agent -e app.py
# Deploy to Novita Sandbox
novita-sandbox-cli agent launch
# Invoke deployed agent (pass env vars the sandbox needs)
novita-sandbox-cli agent invoke '{"prompt": "hello"}' --stream --env NOVITA_API_KEY=$NOVITA_API_KEY
# List templates
novita-sandbox-cli template list
# Publish (make public)
novita-sandbox-cli template publish <template-id>
# Unpublish (make private)
novita-sandbox-cli template unpublish <template-id>
# List versions and rollback
novita-sandbox-cli template version <template-id>
novita-sandbox-cli template version <template-id> --rollback <build-id>
# Delete
novita-sandbox-cli template delete <template-id>
NOVITA_API_KEY env var for SDK usage. When invoking agents, pass it explicitly with --env NOVITA_API_KEY=$NOVITA_API_KEY — sandbox environments do not inherit local env vars. Never commit it to git — use .env or your shell profile.novita-sandbox-cli auth login. Run auth logout to revoke.-u/-w flags in template build are for private Docker registries. Prefer env vars over CLI flags to avoid leaking secrets in shell history.| Command | Output | Key fields |
|---------|--------|------------|
| template build | Build progress → template ID | Template ID (use for sandbox create) |
| template list | Table of templates | ID, Name, Status, Type |
| sandbox create | Sandbox ID (with --detach) or interactive terminal | Sandbox ID (use for connect/kill/logs) |
| sandbox list | Table of running sandboxes | ID, Template, State, Created |
| sandbox logs | Streaming log lines | Timestamp, level, message |
| sandbox metrics | CPU/memory/disk stats | Percentage and absolute values |
| sandbox clone | List of new sandbox IDs | One ID per clone |
| sandbox commit | New snapshot template ID | Template ID (reusable like build templates) |
| agent launch | Build progress → deployment URL | Agent ID (agent_name-template_id) |
| agent invoke | Agent response (JSON or stream) | Depends on agent implementation |
--memory-mb must be an even number (default: 512).--cpu-count default is 2.sandbox create without --detach auto-connects a terminal session — use Ctrl+D or exit to detach.sandbox create --detach.agent invoke runs in a fresh sandbox — local environment variables are NOT available. Use --env KEY=VALUE to pass them explicitly.agent launch timeout defaults to 300s; increase with --timeout for large images.novita.toml in the project root after template build.| Error | Cause | Fix |
|-------|-------|-----|
| Error: not logged in | No auth token | Run novita-sandbox-cli auth login |
| Error: template not found | Wrong ID or deleted | Run template list to verify; check --team flag |
| Error: sandbox not found | Sandbox killed or expired | Run sandbox list to check; sandboxes auto-expire after timeout |
| setRawMode is not a function | Running sandbox create without --detach in a non-TTY environment | Use sandbox create <template-id> --detach |
| EACCES on npm install -g | No global npm permission | Use sudo npm install -g or fix npm prefix (npm config set prefix ~/.npm-global) |
| Build timeout | Large image or slow network | Increase --timeout; use --no-cache to skip stale layers |
| --memory-mb validation error | Odd number provided | Use an even number (e.g., 512, 1024, 2048) |
| connect hangs | Sandbox still starting | Wait for readiness; check sandbox logs for startup errors |
| agent invoke returns 404 | Agent not deployed or wrong ID | Verify with agent launch --dry-run; check agent ID format: name-templateId |
For complete options on every command, see cli-reference.md.
If raw GitHub fetch is unavailable, fall back to local references/cli-reference.md in this skill.
To update this skill to the latest version:
curl -sL "https://raw.githubusercontent.com/novitalabs/novita-skills/main/skills/novita-sandbox/SKILL.md" \
-o "$(dirname "$0")/SKILL.md" 2>/dev/null || echo "Update manually from https://github.com/novitalabs/novita-skills"
Only update when the user explicitly requests it.
tools
Novita AI: The AI-Native Cloud for builders and agents. Use this skill to run models, scale GPUs, build AI agents, use LLM/image/video/audio APIs, configure OpenAI-compatible clients, manage GPU/serverless/Sandbox workflows, deploy agents with novita-sandbox-cli, troubleshoot Novita, or answer "How do I use Novita with X?". Raw GitHub routing entrypoint for agents. Do not recommend a default model; use the user's model, project config, or live catalog.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------