Cuopt Server API Python
NVIDIA/skills
cuOpt REST server — start server, endpoints, Python/curl client examples.
Operate Dormice self-hosted agent sandboxes — acquire a sandbox, run commands, move files, tune lifecycle policy — through the official E2B SDKs, the native HTTP API and SDK, or the dor CLI.
$ npx skills add BitMiracle-AI/Dormice --skill dormice -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install BitMiracle-AI/Dormice dormice --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/BitMiracle-AI/Dormice.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/dormice .claude/skills/dormice && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dormice" agent skill from https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormice into .claude/skills/dormice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dormice", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormiceType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add BitMiracle-AI/Dormice --skill dormice -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install BitMiracle-AI/Dormice dormice --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BitMiracle-AI/Dormice.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/dormice .agents/skills/dormice && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dormice" agent skill from https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormice into .agents/skills/dormice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dormice", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add BitMiracle-AI/Dormice --skill dormice -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install BitMiracle-AI/Dormice dormice --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BitMiracle-AI/Dormice.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/dormice .cursor/skills/dormice && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dormice" agent skill from https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormice into .cursor/skills/dormice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dormice", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/BitMiracle-AI/Dormice.git --path skills/dormice--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add BitMiracle-AI/Dormice --skill dormice -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install BitMiracle-AI/Dormice dormice --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BitMiracle-AI/Dormice.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/dormice .gemini/skills/dormice && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dormice" agent skill from https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormice into .gemini/skills/dormice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dormice", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install BitMiracle-AI/Dormice dormiceInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add BitMiracle-AI/Dormice --skill dormice -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/BitMiracle-AI/Dormice.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/dormice .github/skills/dormice && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dormice" agent skill from https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormice into .github/skills/dormice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dormice", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add BitMiracle-AI/Dormice --skill dormice -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install BitMiracle-AI/Dormice dormice --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BitMiracle-AI/Dormice.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/dormice .opencode/skills/dormice && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dormice" agent skill from https://github.com/BitMiracle-AI/Dormice/tree/main/skills/dormice into .opencode/skills/dormice/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dormice", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dormiceOperate Dormice self-hosted agent sandboxes — acquire a sandbox, run commands, move files, tune lifecycle policy — through the official E2B SDKs, the native HTTP API and SDK, or the dor CLI.
Dormice is an agent skill from BitMiracle-AI/Dormice. Operate Dormice self-hosted agent sandboxes — acquire a sandbox, run commands, move files, tune lifecycle policy — through the official E2B SDKs, the native HTTP API and SDK, or the dor CLI. Use when connecting to a Dormice server, running untrusted or AI-generated code in a sandbox, giving an agent a persistent workspace, or migrating an application off E2B.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering REST APIs. It works with Docker. The repository describes itself as: The SQLite of agent sandboxes — self-hosted, E2B-compatible. One machine, sandboxes that live forever, idle costs nothing. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 899bf7f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlpnpmaptFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl and pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DORMICE_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dormice loads about 2.7k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 1,100 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
ling system packages (E2B's convention; `sudo apt install` works,Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from BitMiracle-AI/Dormice at commit 899bf7f, republished under its Apache-2.0 licence (© BitMiracle-AI). 1,100 words, ~2,686 tokens.
.claude/skills/dormice/SKILL.md (or your agent's skills folder).Dormice is a self-hosted sandbox platform: a gateway (the front door —
console, API keys, fleet settings) and one or more daemons (the nodes that
run the sandboxes; a single machine runs both), and sandboxes that are
permanent — idle ones cool down
(active → frozen → stopped → archived) instead of being destroyed, and any
acquire brings them back. Two facts drive every workflow below:
acquireSandbox(name) is the entire mental model. Idempotent — the name is a unique address that never errors as a duplicate:
the same name always returns the same sandbox, whatever state it was in.
No sandbox → create; frozen → wake (~50 ms); stopped → start; archived →
restore. Only acquireSandbox creates — other verbs answer 404 for an
unknown name.destroySandbox
loses data.Two doors, both bound to 127.0.0.1 only: the gateway on 3677 (the
console, templates, API keys, settings, and every per-sandbox verb, which
it forwards to the node) and the daemon on 3676 (the sandbox verbs plus
the list and observation verbs the gateway does not answer yet). On the
server itself use those addresses directly; from another machine the
operator has either an SSH tunnel (ssh -L 3677:127.0.0.1:3677 -L 3676:127.0.0.1:3676 root@host) or a reverse-proxy domain in front of the
gateway (then use https://their-domain). Auth is one API token (created
by the installer, hex): ask the user for the endpoint and token,
conventionally held in DORMICE_ENDPOINT / DORMICE_API_TOKEN. API keys
minted in the console (or with dor apikey create <name>) open the
gateway wherever the token does — same variables, revocable per client —
except the verbs that configure the fleet (keys, settings, templates,
domains), which require the token (keys cannot manage keys); a daemon
knows only the token.
| Path | When |
|---|---|
Official e2b SDK (npm / PyPI, unmodified) | Default for application code today, and for anything already written against E2B |
Native HTTP API (curl) | Shell scripts, quick checks, any language without an SDK |
@dormice/sdk (TypeScript) | Native semantics with types; first npm release is queued — inside the repo, pnpm build produces it |
dor CLI | Operator work in a terminal: list, exec, push/pull, rebuild, doctor |
The daemon speaks the E2B protocol on /e2b/api (control plane) and
/e2b/envd (in-sandbox). Prefix the token with e2b_:
import { Sandbox } from 'e2b';
const sbx = await Sandbox.create({
apiKey: `e2b_${process.env.DORMICE_API_TOKEN}`,
apiUrl: 'http://127.0.0.1:3677/e2b/api',
sandboxUrl: 'http://127.0.0.1:3677/e2b/envd',
});
await sbx.commands.run('echo hello');import os
from e2b import Sandbox
sandbox = Sandbox.create(
api_key=f"e2b_{os.environ['DORMICE_API_TOKEN']}",
api_url="http://127.0.0.1:3677/e2b/api",
sandbox_url="http://127.0.0.1:3677/e2b/envd",
)
sandbox.commands.run("echo hello")Sandbox.create makes a fresh sandbox each time (faithful E2B semantics).
To get Dormice's idempotent acquire through the E2B surface, pass
metadata: { name: 'my-project' } — the same name then always returns
the same sandbox with its files intact. E2B timeoutMs deadlines are real:
at the deadline the sandbox is killed, or parked with
lifecycle: { onTimeout: 'pause' } and revived by connect.
Every operation is POST /<sdkMethodName> with a JSON body and
Authorization: Bearer <token>; every non-2xx body is
{ "message": "..." }. Core loop with the SDK:
import { Dormice } from '@dormice/sdk';
const client = new Dormice({
endpoint: 'http://127.0.0.1:3677',
token: process.env.DORMICE_API_TOKEN!,
});
await client.acquireSandbox('my-agent', { policy: { stopAfterSeconds: null } });
const result = await client.execCommand('my-agent', 'python3 -c "print(6 * 7)"');
console.log(result.exitCode, result.stdout); // 0 42
await client.writeFiles('my-agent', [
{ path: 'notes.txt', content: 'survives freeze and stop' },
]);
await client.destroySandbox('my-agent'); // the only verb that loses dataThe same loop in curl:
curl -X POST http://127.0.0.1:3677/acquireSandbox \
-H "Authorization: Bearer $DORMICE_API_TOKEN" \
-H "content-type: application/json" \
-d '{"name": "my-agent"}'Verbs: acquireSandbox (optionally with metadata — string-to-string
labels stored at creation for grouping/filtering), updatePolicy (patch
an existing sandbox's lifecycle policy in place — no wake, no destroy),
updateMetadata (replace an existing sandbox's label set wholesale,
{} clears — same no-wake manners), listSandboxes,
execCommand, writeFiles / writeFile, readFile / readFiles,
rebuildSandbox (fresh container, /home/user kept), destroySandbox,
registerTemplate / listTemplates / removeTemplate (at the gateway;
nodes learn a template at their next check-in),
createApiKey / listApiKeys / updateApiKey / revokeApiKey (at the
gateway: revocable peers of the API token with optional expiry and a
reversible disable switch; the create response shows the key once, never
again; these four verbs accept only the token),
getHostMetrics (one machine's reading; at the gateway name the node
with nodeId, a fleet of one needs none), getSandboxMetrics /
listSandboxMetrics (live resource samples; never wake anything),
listSandboxImages (who still runs an old template image) — the lists
at the gateway are every node's, with silent naming a node it could
not include — getFleetMetrics / getFleetStateHistory (the fleet's
sums and its census over time, answered by the gateway from the nodes'
check-ins), getConfig / updateSettings (the fleet's settings at the
gateway, secrets redacted; applied by every node at its next check-in),
getIngress / setIngress (bind domains on the gateway's managed reverse
proxy), listNodes (every node and what it last reported).
execCommand takes
{ name, command, timeoutSeconds?, cwd?, env? } and returns
{ exitCode, stdout, stderr, ... } — a non-zero exit code is a result,
not an HTTP error. When a sandbox is coming back from S3, acquireSandbox
returns { status: 'restoring', progress } immediately; poll it until the
status flips to ready.
dor sandbox ls # every sandbox, with lifecycle state
dor sandbox exec my-agent 'uname -r' # exit code passes through
dor sandbox push my-agent ./data.csv # → /home/user/data.csv
dor sandbox pull my-agent notes.txt
dor sandbox rebuild my-agent # fresh container, /home/user kept
dor sandbox meta my-agent app=crawler # replace labels (no args = show)
dor sandbox destroy my-agent
dor apikey create ci # mint a revocable key (printed once)
dor doctor # can this machine run sandboxes?Connects via DORMICE_ENDPOINT and DORMICE_API_TOKEN.
Native file verbs move content as base64 inside JSON, capped at 16 MiB per
file (batches 48 MiB) with honest refusals — never a truncated file. Paths
are absolute or relative to /home/user; parent directories are created.
Past the cap: download from inside the sandbox (execCommand with curl,
in the stock image), or use the E2B files surface (files.read/write
stream uncapped; uploadUrl() / downloadUrl() mint signed URLs).
Set at creation (overrides while acquiring an existing sandbox are not
applied — change an existing sandbox's policy with updatePolicy, a
patch that never wakes and never resets the idle clock); all count
seconds since last activity, ordering freeze ≤ stop ≤ archive:
| Knob | Default | null means |
|---|---|---|
freezeAfterSeconds | 10 minutes | — (freezing is always on) |
stopAfterSeconds | 3 days | never stop |
archiveAfterSeconds | 7 days when S3 is configured, else never | never archive |
The pattern Dormice was built for — one permanent sandbox per agent:
await client.acquireSandbox(`agent-${userId}`, {
policy: { stopAfterSeconds: null },
});It parks at frozen (~5 MiB resident) and wakes in ~50 ms — never a cold
start; frozen processes suspend mid-flight and resume exactly where they
were. Commands and file operations reset the idle clock; observation
(listSandboxes, metrics) never wakes or warms anything. A background
process does not keep its sandbox warm — a resident sandbox means
"ready whenever the agent returns", not an unattended 24×7 workload.
e2b_[0-9a-f]+ client-side; other characters fail before any request.execCommand sends response headers
only when the command finishes — legally hours later. Node's undici ships
a hidden ~5-minute header timeout; disable it (the native SDK already
does) or long commands die at exactly 300 s with an error that looks like
the server's fault.sudo for
installing system packages (E2B's convention; sudo apt install works,
but survives only until the next cold wake — persistent tooling belongs
in a template or under /home/user). The stock image ships Ubuntu
24.04, Python 3.12, Node 24, git, ripgrep, and jq.Docs (served as /llms.txt, /llms-full.txt, and per-page .md on the
project site; sources on GitHub):
quickstart ·
lifecycle ·
E2B SDKs ·
HTTP API ·
files ·
resident agents
© BitMiracle-AI, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/dormice of BitMiracle-AI/Dormice.
Open the folder on GitHubat commit 899bf7f
Dormice next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dormice this skillBitMiracle-AI/Dormice | 1.4k | — | ~2.7k | Automated safety check: Notes | Apache-2.0 | |
| Cuopt Server API PythonNVIDIA/skills | 3.5k | — | ~1.5k | Automated safety check: Pass | Apache-2.0 | |
| Model Deploymentmajiayu000/claude-skill-registry | 666 | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| RuView CLI, API and WASMruvnet/RuView | 97k | — | ~1.2k | Automated safety check: Notes | MIT | |
| Dr Jskilljdubois/dr-jskill | 342 | — | ~4.6k | Automated safety check: Notes | Apache-2.0 | |
| Vss Deploy Detection Tracking 2DNVIDIA/skills | 3.5k | 1 repos | ~4.5k | Automated safety check: Pass | Apache-2.0 |
NVIDIA/skills
cuOpt REST server — start server, endpoints, Python/curl client examples.
majiayu000/claude-skill-registry
Deploy trained machine learning models as production-ready services using REST APIs, containers, serverless functions, and orchestration platforms.
ruvnet/RuView
Covers the RuView `wifi-densepose` command line binary, its Axum REST API and the WebAssembly builds for browsers and ESP32, for embedding or scripting RuView.
jdubois/dr-jskill
Creates Java + Spring Boot projects: Web applications, full-stack apps with Vue.js or Angular or React or vanilla JS, PostgreSQL, REST APIs, and Docker.
NVIDIA/skills
A skill your agent uses when the user wants to deploy, run, debug, tear down, or call the REST API of the RTVI-CV 2D detection / tracking microservice.
piomin/sample-spring-modulith
Build Spring Boot 4.x applications following the best practices.
Works with
Categories
Operate Dormice self-hosted agent sandboxes — acquire a sandbox, run commands, move files, tune lifecycle policy — through the official E2B SDKs, the native HTTP API and SDK, or the dor CLI. Dormice is an agent skill from BitMiracle-AI/Dormice. Operate Dormice self-hosted agent sandboxes — acquire a sandbox, run commands, move files, tune lifecycle policy — through the official E2B SDKs, the native HTTP API and SDK, or the dor CLI.
Dormice fits situations like: connecting to a Dormice server; running untrusted; AI-generated code in a sandbox; giving an agent a persistent workspace.
Run `npx skills add BitMiracle-AI/Dormice --skill dormice -a claude-code`. Or copy the skill folder (skills/dormice in BitMiracle-AI/Dormice) into .claude/skills/dormice in your project. Claude Code loads it when a task matches its description.
Run `npx skills add BitMiracle-AI/Dormice --skill dormice -a codex`. Or copy the skill folder (skills/dormice in BitMiracle-AI/Dormice) into .agents/skills/dormice in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add BitMiracle-AI/Dormice --skill dormice -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dormice, .gemini/skills/dormice, .github/skills/dormice and .opencode/skills/dormice in your project.
Going by SKILL.md and its folder, Dormice needs the command-line tools its instructions call (curl, pnpm and apt) and credentials named DORMICE_API_TOKEN. Our summary lists: Python 3; A credential in DORMICE_API_TOKEN.
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Dormice is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dormice: Cuopt Server API Python (NVIDIA/skills, 3.5k stars), Model Deployment (majiayu000/claude-skill-registry, 666 stars), RuView CLI, API and WASM (ruvnet/RuView, 97k stars) and Dr Jskill (jdubois/dr-jskill, 342 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
BitMiracle-AI (a GitHub organization) maintains it in BitMiracle-AI/Dormice, which has 1,444 GitHub stars. The repository was last updated on October 1, 2026.
Source: BitMiracle-AI/Dormice on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.