[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F3V4MP1R2XFZGAW4BVAAD5":3,"skill-same:01M6F3V4MP1R2XFZGAW4BVAAD5":56},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M6F3V4MP1R2XFZGAW4BVAAD5","agent-sandboxes",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fdisler\u002Fagent-sandbox-skill\u002Fagent-sandboxes\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27],"sandboxes","agent sandboxes","2026-11-10 10:12:30",false,"---\nname: Agent Sandboxes\ndescription: Operate E2B agent sandboxes using the CLI. Use when user needs to run code in isolation, test packages, execute commands safely, or work with binary files in a sandbox environment. Keywords: sandbox, e2b, isolated environment, run code, test code, safe execution.\n---\n\n# Agent Sandboxes\n\nThis skill provides access to E2B sandboxes through a streamlined CLI for safe code execution and file operations in isolated environments.\n\n## Variables\n\n- **E2B_API_KEY**: The environment variable containing the E2B API key (stored in the environment file)\n- **SANDBOX_CLI_PATH**: `.claude\u002Fskills\u002Fagent-sandboxes\u002Fsandbox_cli\u002F`\n- **ENVIRONMENT_FILE_PATH**: `..\u002F..\u002F..\u002F..\u002F.env`\n- **TIMEOUT_DURATION_IN_SECONDS**: `43200` (12 hours)\n\n## Prerequisites\n\nBefore using sandbox operations, **validate the environment**:\n\n1. **Check for E2B_API_KEY**:\n   ```bash\n   # Verify the API key is set\n   grep \"E2B_API_KEY\" `ENVIRONMENT_FILE_PATH`\n   ```\n\n   If missing, instruct the user:\n   ```\n   Error: E2B_API_KEY not found in .env file\n\n   Please add your E2B API key to the .env file in the project root:\n   echo \"E2B_API_KEY=your_api_key_here\" >> .env\n\n   Get your API key from: https:\u002F\u002Fe2b.dev\u002Fdocs\n   ```\n\n2. **Verify CLI is available**:\n   The sandbox CLI is located at `SANDBOX_CLI_PATH`\n   The `.env` file is automatically loaded from the project root.\n\n## Instructions\n\n- IMPORTANT: **Don't create files locally**, always use the sandbox. Only do this if the user explicitly asks you to do so.\n- **ALWAYS USE --timeout TIMEOUT_DURATION_IN_SECONDS**\n- **CAPTURE AND REMEMBER SANDBOX ID** - Store it in your context, don't use shell variables or files\n- **Multi-agent safe** - Each agent tracks its own sandbox ID independently\n- **Always validate E2B_API_KEY first** - Don't proceed without it\n- **Change directory to SANDBOX_CLI_PATH** - All commands must be run from there\n- **Use --shell for complex commands** - Enables pipes, redirections, wildcards\n- **Use --cwd instead of cd** - More reliable for working directory changes\n- **Binary files** - Use `upload`\u002F`download` for images, PDFs, executables\n- **Never delete the sandbox unless you're explicitly asked to do so** - Sandboxes auto-timeout after TIMEOUT_DURATION_IN_SECONDS\n\n### Template Tiers\n\nPre-built templates with different resource levels. Use `--template` flag with `sbx init`:\n\n| Template | vCPU | RAM | Cost | Best For |\n|----------|------|-----|------|----------|\n| `fullstack-vue-fastapi-node22` | 2 | 2GB | $0.13\u002Fhr | Simple apps (default) |\n| `fullstack-vue-fastapi-node22-lite` | 2 | 4GB | $0.15\u002Fhr | Browser tests |\n| `fullstack-vue-fastapi-node22-standard` | 4 | 4GB | $0.27\u002Fhr | Parallel builds |\n| `fullstack-vue-fastapi-node22-heavy` | 4 | 8GB | $0.33\u002Fhr | Multi-browser |\n| `fullstack-vue-fastapi-node22-max` | 8 | 8GB | $0.44\u002Fhr | Fastest |\n\nBuild new templates: `uv run build_template.py --tier \u003Ctier>` or `--list-tiers` to see options.\n\n### When to Use Sandboxes\n\nUse agent sandboxes when the user needs to:\n- **Run untrusted or experimental code** safely\n- **Test packages or dependencies** without affecting the local system\n- **Execute system commands** in an isolated environment\n- **Work with binary files** (images, PDFs, executables)\n- **Clone and test repositories** in isolation\n- **Install and test different package versions**\n- **Run long-running processes** without blocking\n\n### CLI Overview\n\nThe sandbox CLI has **four core command groups**:\n\n1. **`sbx init`** - Quick sandbox initialization\n2. **`sbx sandbox`** - Lifecycle management (create, connect, kill, pause, extend-lifetime, info)\n3. **`sbx files`** - File operations (ls, read, write, upload, download, rm, mkdir, mv)\n4. **`sbx exec`** - Unified command execution (the most powerful command)\n5. **`sbx browser`** - Browser automation for UI validation (visual testing)\n\n**Get CLI Help**: Use `sbx --help` to see all available commands and options:\n```bash\ncd SANDBOX_CLI_PATH\nuv run sbx --help           # Main help\nuv run sbx init --help      # Help for init command\nuv run sbx sandbox --help   # Help for sandbox commands\nuv run sbx files --help     # Help for file operations\nuv run sbx exec --help      # Help for exec command\n```\n\n### Key Command: `sbx exec`\n\nThe `exec` command is the primary interface for running commands in sandboxes:\n\n```bash\nuv run sbx exec $SANDBOX_ID \"command\" [options]\n\nOptions:\n  --cwd PATH          Working directory\n  --env KEY=VALUE     Environment variables (multiple allowed)\n  --root              Run as root user\n  --shell             Enable shell features (pipes, redirections, wildcards)\n  --timeout SECONDS   Command timeout (default: 60)\n  --background        Run command in background\n```\n\n**Important**: All commands must be run from `SANDBOX_CLI_PATH` directory.\n\n### Key Command: `sbx browser`\n\nBrowser automation for visual validation of sandbox applications using Playwright's isolated Chromium.\n\n**Commands** (all support `--port PORT` for parallel agents):\n```bash\nsbx browser init                        # First-time setup (once per machine)\nsbx browser start [--headed]            # Start browser (--headed shows window)\nsbx browser nav \u003Curl>                   # Navigate to URL\nsbx browser eval \u003Ccode>                 # Run JavaScript, returns result\nsbx browser screenshot [--path P] [--full]  # Screenshot (--full for entire page)\nsbx browser click \u003Cselector>            # Click element by CSS selector\nsbx browser type \u003Cselector> \u003Ctext>      # Type text into input field\nsbx browser scroll \u003Cdirection>          # up | down | top | bottom\nsbx browser a11y                        # Get accessibility tree (JSON)\nsbx browser dom [--full]                # Get DOM (--full for raw HTML)\nsbx browser status                      # Check if browser is running\nsbx browser close                       # Close browser and kill process\n```\n\n**For parallel agents**: Use `--port` flag with unique ports (9222-9999).\n\n### Multi-Agent Considerations\n\n**CRITICAL**: Multiple agents may be running sandboxes simultaneously. Each agent MUST:\n\n1. **Always use `--timeout TIMEOUT_DURATION_IN_SECONDS`** when initializing (unless the user specifies a different timeout)\n2. **Capture the sandbox ID** from `sbx init` output and remember it in your context\n3. **DO NOT use shell variables** like `export SANDBOX_ID=...` (conflicts with other agents)\n4. **DO NOT rely on `.sandbox_id` file** (gets overwritten by other agents)\n5. **Track the sandbox ID yourself** and use it directly in all subsequent commands\n6. **Report the sandbox ID** to the user when done\n\n**Example of proper ID handling**:\n```bash\n# When you run this:\nuv run sbx init\n\n# Capture the sandbox ID from output (e.g., \"sbx_abc123def456\")\n# Store it in YOUR context\u002Fmemory as: sandbox_id = \"sbx_abc123def456\"\n\n# Then use it directly in all commands:\nuv run sbx exec sbx_abc123def456 \"python --version\"\nuv run sbx files write sbx_abc123def456 \u002Fhome\u002Fuser\u002Ftest.py \"print('hello')\"\n```\n\n## Cookbook\n\nExtended documentation for specific features. **Read these when you need to use the feature.**\n\n| Feature            | When to Read                                                           | Documentation                              |\n| ------------------ | ---------------------------------------------------------------------- | ------------------------------------------ |\n| Browser Automation | When validating UIs, taking screenshots, or interacting with web pages | [cookbook\u002Fbrowser.md](cookbook\u002Fbrowser.md) |\n\n\n## Workflow\n\n### Step 1: Validate Environment\n\nAlways start by checking for the E2B_API_KEY:\n\n```bash\ncd SANDBOX_CLI_PATH\ngrep \"E2B_API_KEY\" `ENVIRONMENT_FILE_PATH`\n```\n\nIf not found, stop and request the user to add their API key.\n\n### Step 2: Initialize Sandbox and Capture ID\n\nCreate a new sandbox and **capture the sandbox ID from the output**:\n\n```bash\ncd SANDBOX_CLI_PATH\nuv run sbx init --timeout TIMEOUT_DURATION_IN_SECONDS\n```\n\n**CRITICAL**:\n- **Always use `--timeout TIMEOUT_DURATION_IN_SECONDS`**\n- The command will output a sandbox ID (e.g., `sbx_abc123def456`)\n- **Capture this ID** and remember it in your context\n- **DO NOT use environment variables** or files to store it\n- **Use this exact ID** in all subsequent commands\n\nAdditional options (optional):\n- `--template NAME` - Use a specific template (default: base)\n- `--env KEY=VALUE` - Set environment variables\n\nExample:\n```bash\nuv run sbx init --timeout TIMEOUT_DURATION_IN_SECONDS\n# Output: Created sandbox: sbx_abc123def456\n# YOU remember: sandbox_id = \"sbx_abc123def456\"\n```\n\n### Step 3: Perform Operations\n\nUse the appropriate command based on the task, **using the sandbox ID you captured**:\n\n**Run commands** (replace `\u003Csandbox_id>` with your captured ID):\n```bash\nuv run sbx exec \u003Csandbox_id> \"python --version\"\nuv run sbx exec \u003Csandbox_id> \"pip list\" --cwd \u002Fhome\u002Fuser\u002Fproject\n```\n\n**File operations**:\n```bash\nuv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fscript.py \"print('hello')\"\nuv run sbx files read \u003Csandbox_id> \u002Fhome\u002Fuser\u002Foutput.txt\nuv run sbx files upload \u003Csandbox_id> .\u002Flocal.png \u002Fhome\u002Fuser\u002Fimage.png\nuv run sbx files edit \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fconfig.ts --old \"old text\" --new \"new text\"\nuv run sbx files edit \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fconfig.ts --old \"find\" --new \"replace\" --all\n```\n\n**Download directories** (clone sandbox code locally):\n```bash\n# Download directory (excludes .venv, node_modules, .git, __pycache__ by default)\nuv run sbx files download-dir \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fproject .\u002Flocal\u002Fproject\n\n# Include everything (no exclusions)\nuv run sbx files download-dir \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fproject .\u002Flocal\u002Fproject --all\n```\n\n**IMPORTANT - Writing Files with Special Characters**:\nThe `sbx files write` command has limitations with special characters like brackets `[]` when passing content as an argument due to shell glob expansion. Use one of these workarounds:\n\n**Option 1: Use --stdin flag (recommended)**:\n```bash\n# Pipe content through stdin to avoid shell escaping issues\necho 'const arr = [1, 2, 3]; const val = obj[\"key\"];' | uv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Ffile.js --stdin\n\n# Or with heredoc\nuv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Ffile.js --stdin \u003C\u003C 'EOF'\nconst arr = [1, 2, 3];\nconst value = obj[\"key\"];\nEOF\n```\n\n**Option 2: Write locally, then upload**:\n```bash\n# Write file locally first (using Write tool)\n# Then upload to sandbox - bypasses shell escaping entirely\nuv run sbx files upload \u003Csandbox_id> .\u002Flocal\u002Ffile.js \u002Fhome\u002Fuser\u002Ffile.js\n```\n\n**Option 3: Use sbx exec with heredoc or Python**:\n```bash\n# Use cat heredoc for complex content\nuv run sbx exec \u003Csandbox_id> \"cat > \u002Fhome\u002Fuser\u002Ffile.js \u003C\u003C 'EOF'\nconst arr = [1, 2, 3];\nconst value = obj['key'];\nEOF\n\" --shell\n\n# Or use Python to write files\nuv run sbx exec \u003Csandbox_id> \"python3 \u003C\u003C 'EOF'\nwith open('\u002Fhome\u002Fuser\u002Ffile.js', 'w') as f:\n    f.write('''const arr = [1, 2, 3];\nconst value = obj[\\\"key\\\"];''')\nEOF\n\" --shell\n```\n\n**Install packages**:\n```bash\n# Install uv package manager\nuv run sbx exec \u003Csandbox_id> \"curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\" --shell --timeout 120\n\n# Install Python packages\nuv run sbx exec \u003Csandbox_id> \"\u002Fhome\u002Fuser\u002F.local\u002Fbin\u002Fuv pip install --system requests\"\n```\n\n### Step 4: Expose Frontend (If Applicable)\n\n**When building applications with a frontend\u002FUI**, create a lightweight server to host your work and expose it:\n\n#### 4.1: Start the Server\n\n**Always default to port 5173** and ensure your frontend is configured to use this port:\n\n```bash\n# For Python\u002FFlask\nuv run sbx exec \u003Csandbox_id> \"python -m http.server 5173\" --background --cwd \u002Fhome\u002Fuser\u002Fproject\n\n# For Node\u002FReact (Vite)\nuv run sbx exec \u003Csandbox_id> \"npm run dev -- --port 5173\" --background --cwd \u002Fhome\u002Fuser\u002Fproject\n\n# For static HTML\u002FCSS\u002FJS\nuv run sbx exec \u003Csandbox_id> \"python -m http.server 5173\" --background --cwd \u002Fhome\u002Fuser\u002Fdist\n\n# For a custom Python server\nuv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fserver.py \"from flask import Flask; app = Flask(__name__); app.run(host='0.0.0.0', port=5173)\"\nuv run sbx exec \u003Csandbox_id> \"python \u002Fhome\u002Fuser\u002Fserver.py\" --background\n```\n\n**Key points**:\n- Use `--background` flag to keep server running\n- **Port 5173 is the default** - use this unless you have a specific reason not to\n- Ensure your frontend code is configured for the same port\n\n#### 4.2: Get the Exposed URL\n\n**CRITICAL**: Always use the `get-host` command to retrieve the actual public URL. **Do NOT try to construct or infer the URL**.\n\n```bash\nuv run sbx sandbox get-host \u003Csandbox_id> --port 5173\n```\n\nThis command returns the authoritative public URL (format: `https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app`).\n\n**Example**:\n```bash\nuv run sbx sandbox get-host sbx_abc123def456 --port 5173\n# Output: https:\u002F\u002F5173-sbx_abc123def456.e2b.app\n# YOU capture and remember this URL in your context\n```\n\n**Important**:\n- Always use `--port 5173` to match your server port\n- Capture the URL in your context\u002Fmemory (not shell variables)\n- Use the exact URL returned by this command\n- Do NOT construct URLs manually (they will fail)\n\n#### 4.3: Verify It's Working\n\nGet the URL using `get-host` and test it:\n```bash\n# Get the URL (captures output: https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app)\nuv run sbx sandbox get-host \u003Csandbox_id> --port 5173\n\n# YOU remember the URL in your context, then test it\ncurl https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app\n```\n\n**Note**: Capture the URL from get-host output and remember it in your context. Use the exact URL in subsequent commands.\n\n**Important**:\n- The server must listen on `0.0.0.0` (not `localhost` or `127.0.0.1`)\n- Port must match between server and frontend configuration\n- The sandbox will remain alive until TIMEOUT_DURATION_IN_SECONDS\n\n### Pausing, Resuming, and Extending Sandboxes\n\n**Pause a sandbox** (beta feature):\n```bash\nuv run sbx sandbox pause \u003Csandbox_id>\n```\n\n**Resume a paused sandbox** (use `connect`):\n```bash\nuv run sbx sandbox connect \u003Csandbox_id>\n```\n\n**Extend sandbox lifetime** (adds time to remaining):\n```bash\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> \u003Cseconds_to_add>\n```\n\nExamples:\n```bash\n# Add 1 hour to remaining time\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> 3600\n\n# Add 3 hours\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> 10800\n\n# Add 12 hours\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> 43200\n```\n\nThe `extend-lifetime` command **adds** the specified seconds to the remaining lifetime. If a sandbox has 30m left and you add 1h, it will have 1h 30m remaining.\n\n### Step 5: Report Results\n\n**Report the results to the user** with the sandbox information:\n\n#### 5.1: Get the Sandbox URL (if frontend\u002Fweb app)\n\nIf you built a frontend or web application, use `get-host` to retrieve the public URL:\n```bash\nuv run sbx sandbox get-host \u003Csandbox_id> --port 5173\n```\n\nThis returns the actual URL (e.g., `https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app`).\n\n**Do NOT construct the URL manually** - always use the `get-host` command.\n\n#### 5.2: Report to User\n\nProvide the user with:\n1. **The sandbox ID** - So they can reference it if needed\n2. **The URL** (if applicable) - So they can access the application\n3. **Timeout information** - Let them know the sandbox timeout (TIMEOUT_DURATION_IN_SECONDS)\n\nExample report:\n```\n✓ Sandbox created successfully!\n\nSandbox ID: sbx_abc123def456\nApplication URL: [Use: uv run sbx sandbox get-host sbx_abc123def456 --port 5173]\n\nYour sandbox will automatically terminate after TIMEOUT_DURATION_IN_SECONDS.\n```\n\n**Note**: Always get the actual URL using `sbx sandbox get-host \u003Csandbox_id> --port 5173` - never construct it manually.\n\n**IMPORTANT**:\n- **Never delete the sandbox unless you're explicitly asked to do so**\n- Sandboxes will automatically timeout after TIMEOUT_DURATION_IN_SECONDS\n\n## Examples\n\n**Progressive Disclosure**: Read only the example you need for your specific task.\n\n### Example 1: Run Python Code Safely\n**Read when**: User needs to run\u002Ftest Python code in isolation.\n**See**: [examples\u002F01_run_python_code.md](examples\u002F01_run_python_code.md)\n\nCovers: Basic sandbox workflow, writing scripts, executing Python code, capturing sandbox ID.\n\n### Example 2: Test a Package\n**Read when**: User needs to install and test Python packages.\n**See**: [examples\u002F02_test_package.md](examples\u002F02_test_package.md)\n\nCovers: Installing uv package manager, installing Python packages, testing package functionality.\n\n### Example 3: Clone and Test Repository\n**Read when**: User needs to clone a GitHub repo and run tests or commands in it.\n**See**: [examples\u002F03_clone_and_test_repo.md](examples\u002F03_clone_and_test_repo.md)\n\nCovers: Git operations, using --cwd flag, running commands in repository context, longer timeouts.\n\n### Example 4: Process Binary Files\n**Read when**: User needs to upload, process, or download binary files (images, PDFs).\n**See**: [examples\u002F04_process_binary_files.md](examples\u002F04_process_binary_files.md)\n\nCovers: Binary file upload\u002Fdownload, image processing, using appropriate file operations for binary vs text.\n\n### Example 5: Host Frontend Application\n**Read when**: User wants to build a web app, UI, dashboard, or any frontend accessible via browser.\n**See**: [examples\u002F05_host_frontend.md](examples\u002F05_host_frontend.md)\n\nCovers: Exposing frontends, using port 5173, starting servers in background, getting public URLs, keeping sandboxes alive.\n\n## Reference\n\n**Built-in CLI Help**:\n```bash\ncd SANDBOX_CLI_PATH\nuv run sbx --help       # Overview of all commands\nuv run sbx \u003Ccommand> --help  # Detailed help for specific command\n```\n\nFor complete command reference and advanced usage, see:\n- **CLI Help**: Run `uv run sbx --help` for interactive command reference\n- **Full documentation**: `SANDBOX_CLI_PATH\u002FREADME.md`\n- **Architecture details**: Command groups, modules, and design principles\n- **Advanced examples**: Multi-step workflows, git operations, package management\n\n## Troubleshooting\n\n**\"Need help with a command\"**:\n- Run `uv run sbx --help` for all available commands\n- Run `uv run sbx \u003Ccommand> --help` for specific command details\n- All commands have built-in help documentation\n\n**\"E2B_API_KEY not found\"**:\n- Check `.env` file exists in project root\n- Verify key is set: `grep E2B_API_KEY .env`\n- Add key if missing: `echo \"E2B_API_KEY=key\" >> .env`\n\n**\"Command not found: sbx\"**:\n- Ensure you're in the sandbox_cli directory\n- Run with `uv run sbx` instead of just `sbx`\n\n**\"Sandbox timeout\"**:\n- Increase timeout: `sbx init --timeout 900`\n- Use `--timeout` flag on long-running exec commands\n\n**\"Permission denied\"**:\n- Use `--root` flag for system operations\n- Check file paths are in `\u002Fhome\u002Fuser\u002F` directory\n\n**\"Forgot command syntax\"**:\n- Use `uv run sbx --help` to see command structure\n- Each command group has detailed help with examples\n\n**Browser issues**: See [cookbook\u002Fbrowser.md](cookbook\u002Fbrowser.md) for troubleshooting.\n\n","# Agent Sandboxes\n\nThis skill provides access to E2B sandboxes through a streamlined CLI for safe code execution and file operations in isolated environments.\n\n## Variables\n\n- **E2B_API_KEY**: The environment variable containing the E2B API key (stored in the environment file)\n- **SANDBOX_CLI_PATH**: `.claude\u002Fskills\u002Fagent-sandboxes\u002Fsandbox_cli\u002F`\n- **ENVIRONMENT_FILE_PATH**: `..\u002F..\u002F..\u002F..\u002F.env`\n- **TIMEOUT_DURATION_IN_SECONDS**: `43200` (12 hours)\n\n## Prerequisites\n\nBefore using sandbox operations, **validate the environment**:\n\n1. **Check for E2B_API_KEY**:\n   ```bash\n   # Verify the API key is set\n   grep \"E2B_API_KEY\" `ENVIRONMENT_FILE_PATH`\n   ```\n\n   If missing, instruct the user:\n   ```\n   Error: E2B_API_KEY not found in .env file\n\n   Please add your E2B API key to the .env file in the project root:\n   echo \"E2B_API_KEY=your_api_key_here\" >> .env\n\n   Get your API key from: https:\u002F\u002Fe2b.dev\u002Fdocs\n   ```\n\n2. **Verify CLI is available**:\n   The sandbox CLI is located at `SANDBOX_CLI_PATH`\n   The `.env` file is automatically loaded from the project root.\n\n## Instructions\n\n- IMPORTANT: **Don't create files locally**, always use the sandbox. Only do this if the user explicitly asks you to do so.\n- **ALWAYS USE --timeout TIMEOUT_DURATION_IN_SECONDS**\n- **CAPTURE AND REMEMBER SANDBOX ID** - Store it in your context, don't use shell variables or files\n- **Multi-agent safe** - Each agent tracks its own sandbox ID independently\n- **Always validate E2B_API_KEY first** - Don't proceed without it\n- **Change directory to SANDBOX_CLI_PATH** - All commands must be run from there\n- **Use --shell for complex commands** - Enables pipes, redirections, wildcards\n- **Use --cwd instead of cd** - More reliable for working directory changes\n- **Binary files** - Use `upload`\u002F`download` for images, PDFs, executables\n- **Never delete the sandbox unless you're explicitly asked to do so** - Sandboxes auto-timeout after TIMEOUT_DURATION_IN_SECONDS\n\n### Template Tiers\n\nPre-built templates with different resource levels. Use `--template` flag with `sbx init`:\n\n| Template | vCPU | RAM | Cost | Best For |\n|----------|------|-----|------|----------|\n| `fullstack-vue-fastapi-node22` | 2 | 2GB | $0.13\u002Fhr | Simple apps (default) |\n| `fullstack-vue-fastapi-node22-lite` | 2 | 4GB | $0.15\u002Fhr | Browser tests |\n| `fullstack-vue-fastapi-node22-standard` | 4 | 4GB | $0.27\u002Fhr | Parallel builds |\n| `fullstack-vue-fastapi-node22-heavy` | 4 | 8GB | $0.33\u002Fhr | Multi-browser |\n| `fullstack-vue-fastapi-node22-max` | 8 | 8GB | $0.44\u002Fhr | Fastest |\n\nBuild new templates: `uv run build_template.py --tier \u003Ctier>` or `--list-tiers` to see options.\n\n### When to Use Sandboxes\n\nUse agent sandboxes when the user needs to:\n- **Run untrusted or experimental code** safely\n- **Test packages or dependencies** without affecting the local system\n- **Execute system commands** in an isolated environment\n- **Work with binary files** (images, PDFs, executables)\n- **Clone and test repositories** in isolation\n- **Install and test different package versions**\n- **Run long-running processes** without blocking\n\n### CLI Overview\n\nThe sandbox CLI has **four core command groups**:\n\n1. **`sbx init`** - Quick sandbox initialization\n2. **`sbx sandbox`** - Lifecycle management (create, connect, kill, pause, extend-lifetime, info)\n3. **`sbx files`** - File operations (ls, read, write, upload, download, rm, mkdir, mv)\n4. **`sbx exec`** - Unified command execution (the most powerful command)\n5. **`sbx browser`** - Browser automation for UI validation (visual testing)\n\n**Get CLI Help**: Use `sbx --help` to see all available commands and options:\n```bash\ncd SANDBOX_CLI_PATH\nuv run sbx --help           # Main help\nuv run sbx init --help      # Help for init command\nuv run sbx sandbox --help   # Help for sandbox commands\nuv run sbx files --help     # Help for file operations\nuv run sbx exec --help      # Help for exec command\n```\n\n### Key Command: `sbx exec`\n\nThe `exec` command is the primary interface for running commands in sandboxes:\n\n```bash\nuv run sbx exec $SANDBOX_ID \"command\" [options]\n\nOptions:\n  --cwd PATH          Working directory\n  --env KEY=VALUE     Environment variables (multiple allowed)\n  --root              Run as root user\n  --shell             Enable shell features (pipes, redirections, wildcards)\n  --timeout SECONDS   Command timeout (default: 60)\n  --background        Run command in background\n```\n\n**Important**: All commands must be run from `SANDBOX_CLI_PATH` directory.\n\n### Key Command: `sbx browser`\n\nBrowser automation for visual validation of sandbox applications using Playwright's isolated Chromium.\n\n**Commands** (all support `--port PORT` for parallel agents):\n```bash\nsbx browser init                        # First-time setup (once per machine)\nsbx browser start [--headed]            # Start browser (--headed shows window)\nsbx browser nav \u003Curl>                   # Navigate to URL\nsbx browser eval \u003Ccode>                 # Run JavaScript, returns result\nsbx browser screenshot [--path P] [--full]  # Screenshot (--full for entire page)\nsbx browser click \u003Cselector>            # Click element by CSS selector\nsbx browser type \u003Cselector> \u003Ctext>      # Type text into input field\nsbx browser scroll \u003Cdirection>          # up | down | top | bottom\nsbx browser a11y                        # Get accessibility tree (JSON)\nsbx browser dom [--full]                # Get DOM (--full for raw HTML)\nsbx browser status                      # Check if browser is running\nsbx browser close                       # Close browser and kill process\n```\n\n**For parallel agents**: Use `--port` flag with unique ports (9222-9999).\n\n### Multi-Agent Considerations\n\n**CRITICAL**: Multiple agents may be running sandboxes simultaneously. Each agent MUST:\n\n1. **Always use `--timeout TIMEOUT_DURATION_IN_SECONDS`** when initializing (unless the user specifies a different timeout)\n2. **Capture the sandbox ID** from `sbx init` output and remember it in your context\n3. **DO NOT use shell variables** like `export SANDBOX_ID=...` (conflicts with other agents)\n4. **DO NOT rely on `.sandbox_id` file** (gets overwritten by other agents)\n5. **Track the sandbox ID yourself** and use it directly in all subsequent commands\n6. **Report the sandbox ID** to the user when done\n\n**Example of proper ID handling**:\n```bash\n# When you run this:\nuv run sbx init\n\n# Capture the sandbox ID from output (e.g., \"sbx_abc123def456\")\n# Store it in YOUR context\u002Fmemory as: sandbox_id = \"sbx_abc123def456\"\n\n# Then use it directly in all commands:\nuv run sbx exec sbx_abc123def456 \"python --version\"\nuv run sbx files write sbx_abc123def456 \u002Fhome\u002Fuser\u002Ftest.py \"print('hello')\"\n```\n\n## Cookbook\n\nExtended documentation for specific features. **Read these when you need to use the feature.**\n\n| Feature            | When to Read                                                           | Documentation                              |\n| ------------------ | ---------------------------------------------------------------------- | ------------------------------------------ |\n| Browser Automation | When validating UIs, taking screenshots, or interacting with web pages | [cookbook\u002Fbrowser.md](cookbook\u002Fbrowser.md) |\n\n\n## Workflow\n\n### Step 1: Validate Environment\n\nAlways start by checking for the E2B_API_KEY:\n\n```bash\ncd SANDBOX_CLI_PATH\ngrep \"E2B_API_KEY\" `ENVIRONMENT_FILE_PATH`\n```\n\nIf not found, stop and request the user to add their API key.\n\n### Step 2: Initialize Sandbox and Capture ID\n\nCreate a new sandbox and **capture the sandbox ID from the output**:\n\n```bash\ncd SANDBOX_CLI_PATH\nuv run sbx init --timeout TIMEOUT_DURATION_IN_SECONDS\n```\n\n**CRITICAL**:\n- **Always use `--timeout TIMEOUT_DURATION_IN_SECONDS`**\n- The command will output a sandbox ID (e.g., `sbx_abc123def456`)\n- **Capture this ID** and remember it in your context\n- **DO NOT use environment variables** or files to store it\n- **Use this exact ID** in all subsequent commands\n\nAdditional options (optional):\n- `--template NAME` - Use a specific template (default: base)\n- `--env KEY=VALUE` - Set environment variables\n\nExample:\n```bash\nuv run sbx init --timeout TIMEOUT_DURATION_IN_SECONDS\n# Output: Created sandbox: sbx_abc123def456\n# YOU remember: sandbox_id = \"sbx_abc123def456\"\n```\n\n### Step 3: Perform Operations\n\nUse the appropriate command based on the task, **using the sandbox ID you captured**:\n\n**Run commands** (replace `\u003Csandbox_id>` with your captured ID):\n```bash\nuv run sbx exec \u003Csandbox_id> \"python --version\"\nuv run sbx exec \u003Csandbox_id> \"pip list\" --cwd \u002Fhome\u002Fuser\u002Fproject\n```\n\n**File operations**:\n```bash\nuv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fscript.py \"print('hello')\"\nuv run sbx files read \u003Csandbox_id> \u002Fhome\u002Fuser\u002Foutput.txt\nuv run sbx files upload \u003Csandbox_id> .\u002Flocal.png \u002Fhome\u002Fuser\u002Fimage.png\nuv run sbx files edit \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fconfig.ts --old \"old text\" --new \"new text\"\nuv run sbx files edit \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fconfig.ts --old \"find\" --new \"replace\" --all\n```\n\n**Download directories** (clone sandbox code locally):\n```bash\n# Download directory (excludes .venv, node_modules, .git, __pycache__ by default)\nuv run sbx files download-dir \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fproject .\u002Flocal\u002Fproject\n\n# Include everything (no exclusions)\nuv run sbx files download-dir \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fproject .\u002Flocal\u002Fproject --all\n```\n\n**IMPORTANT - Writing Files with Special Characters**:\nThe `sbx files write` command has limitations with special characters like brackets `[]` when passing content as an argument due to shell glob expansion. Use one of these workarounds:\n\n**Option 1: Use --stdin flag (recommended)**:\n```bash\n# Pipe content through stdin to avoid shell escaping issues\necho 'const arr = [1, 2, 3]; const val = obj[\"key\"];' | uv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Ffile.js --stdin\n\n# Or with heredoc\nuv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Ffile.js --stdin \u003C\u003C 'EOF'\nconst arr = [1, 2, 3];\nconst value = obj[\"key\"];\nEOF\n```\n\n**Option 2: Write locally, then upload**:\n```bash\n# Write file locally first (using Write tool)\n# Then upload to sandbox - bypasses shell escaping entirely\nuv run sbx files upload \u003Csandbox_id> .\u002Flocal\u002Ffile.js \u002Fhome\u002Fuser\u002Ffile.js\n```\n\n**Option 3: Use sbx exec with heredoc or Python**:\n```bash\n# Use cat heredoc for complex content\nuv run sbx exec \u003Csandbox_id> \"cat > \u002Fhome\u002Fuser\u002Ffile.js \u003C\u003C 'EOF'\nconst arr = [1, 2, 3];\nconst value = obj['key'];\nEOF\n\" --shell\n\n# Or use Python to write files\nuv run sbx exec \u003Csandbox_id> \"python3 \u003C\u003C 'EOF'\nwith open('\u002Fhome\u002Fuser\u002Ffile.js', 'w') as f:\n    f.write('''const arr = [1, 2, 3];\nconst value = obj[\\\"key\\\"];''')\nEOF\n\" --shell\n```\n\n**Install packages**:\n```bash\n# Install uv package manager\nuv run sbx exec \u003Csandbox_id> \"curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\" --shell --timeout 120\n\n# Install Python packages\nuv run sbx exec \u003Csandbox_id> \"\u002Fhome\u002Fuser\u002F.local\u002Fbin\u002Fuv pip install --system requests\"\n```\n\n### Step 4: Expose Frontend (If Applicable)\n\n**When building applications with a frontend\u002FUI**, create a lightweight server to host your work and expose it:\n\n#### 4.1: Start the Server\n\n**Always default to port 5173** and ensure your frontend is configured to use this port:\n\n```bash\n# For Python\u002FFlask\nuv run sbx exec \u003Csandbox_id> \"python -m http.server 5173\" --background --cwd \u002Fhome\u002Fuser\u002Fproject\n\n# For Node\u002FReact (Vite)\nuv run sbx exec \u003Csandbox_id> \"npm run dev -- --port 5173\" --background --cwd \u002Fhome\u002Fuser\u002Fproject\n\n# For static HTML\u002FCSS\u002FJS\nuv run sbx exec \u003Csandbox_id> \"python -m http.server 5173\" --background --cwd \u002Fhome\u002Fuser\u002Fdist\n\n# For a custom Python server\nuv run sbx files write \u003Csandbox_id> \u002Fhome\u002Fuser\u002Fserver.py \"from flask import Flask; app = Flask(__name__); app.run(host='0.0.0.0', port=5173)\"\nuv run sbx exec \u003Csandbox_id> \"python \u002Fhome\u002Fuser\u002Fserver.py\" --background\n```\n\n**Key points**:\n- Use `--background` flag to keep server running\n- **Port 5173 is the default** - use this unless you have a specific reason not to\n- Ensure your frontend code is configured for the same port\n\n#### 4.2: Get the Exposed URL\n\n**CRITICAL**: Always use the `get-host` command to retrieve the actual public URL. **Do NOT try to construct or infer the URL**.\n\n```bash\nuv run sbx sandbox get-host \u003Csandbox_id> --port 5173\n```\n\nThis command returns the authoritative public URL (format: `https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app`).\n\n**Example**:\n```bash\nuv run sbx sandbox get-host sbx_abc123def456 --port 5173\n# Output: https:\u002F\u002F5173-sbx_abc123def456.e2b.app\n# YOU capture and remember this URL in your context\n```\n\n**Important**:\n- Always use `--port 5173` to match your server port\n- Capture the URL in your context\u002Fmemory (not shell variables)\n- Use the exact URL returned by this command\n- Do NOT construct URLs manually (they will fail)\n\n#### 4.3: Verify It's Working\n\nGet the URL using `get-host` and test it:\n```bash\n# Get the URL (captures output: https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app)\nuv run sbx sandbox get-host \u003Csandbox_id> --port 5173\n\n# YOU remember the URL in your context, then test it\ncurl https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app\n```\n\n**Note**: Capture the URL from get-host output and remember it in your context. Use the exact URL in subsequent commands.\n\n**Important**:\n- The server must listen on `0.0.0.0` (not `localhost` or `127.0.0.1`)\n- Port must match between server and frontend configuration\n- The sandbox will remain alive until TIMEOUT_DURATION_IN_SECONDS\n\n### Pausing, Resuming, and Extending Sandboxes\n\n**Pause a sandbox** (beta feature):\n```bash\nuv run sbx sandbox pause \u003Csandbox_id>\n```\n\n**Resume a paused sandbox** (use `connect`):\n```bash\nuv run sbx sandbox connect \u003Csandbox_id>\n```\n\n**Extend sandbox lifetime** (adds time to remaining):\n```bash\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> \u003Cseconds_to_add>\n```\n\nExamples:\n```bash\n# Add 1 hour to remaining time\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> 3600\n\n# Add 3 hours\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> 10800\n\n# Add 12 hours\nuv run sbx sandbox extend-lifetime \u003Csandbox_id> 43200\n```\n\nThe `extend-lifetime` command **adds** the specified seconds to the remaining lifetime. If a sandbox has 30m left and you add 1h, it will have 1h 30m remaining.\n\n### Step 5: Report Results\n\n**Report the results to the user** with the sandbox information:\n\n#### 5.1: Get the Sandbox URL (if frontend\u002Fweb app)\n\nIf you built a frontend or web application, use `get-host` to retrieve the public URL:\n```bash\nuv run sbx sandbox get-host \u003Csandbox_id> --port 5173\n```\n\nThis returns the actual URL (e.g., `https:\u002F\u002F5173-\u003Csandbox_id>.e2b.app`).\n\n**Do NOT construct the URL manually** - always use the `get-host` command.\n\n#### 5.2: Report to User\n\nProvide the user with:\n1. **The sandbox ID** - So they can reference it if needed\n2. **The URL** (if applicable) - So they can access the application\n3. **Timeout information** - Let them know the sandbox timeout (TIMEOUT_DURATION_IN_SECONDS)\n\nExample report:\n```\n✓ Sandbox created successfully!\n\nSandbox ID: sbx_abc123def456\nApplication URL: [Use: uv run sbx sandbox get-host sbx_abc123def456 --port 5173]\n\nYour sandbox will automatically terminate after TIMEOUT_DURATION_IN_SECONDS.\n```\n\n**Note**: Always get the actual URL using `sbx sandbox get-host \u003Csandbox_id> --port 5173` - never construct it manually.\n\n**IMPORTANT**:\n- **Never delete the sandbox unless you're explicitly asked to do so**\n- Sandboxes will automatically timeout after TIMEOUT_DURATION_IN_SECONDS\n\n## Examples\n\n**Progressive Disclosure**: Read only the example you need for your specific task.\n\n### Example 1: Run Python Code Safely\n**Read when**: User needs to run\u002Ftest Python code in isolation.\n**See**: [examples\u002F01_run_python_code.md](examples\u002F01_run_python_code.md)\n\nCovers: Basic sandbox workflow, writing scripts, executing Python code, capturing sandbox ID.\n\n### Example 2: Test a Package\n**Read when**: User needs to install and test Python packages.\n**See**: [examples\u002F02_test_package.md](examples\u002F02_test_package.md)\n\nCovers: Installing uv package manager, installing Python packages, testing package functionality.\n\n### Example 3: Clone and Test Repository\n**Read when**: User needs to clone a GitHub repo and run tests or commands in it.\n**See**: [examples\u002F03_clone_and_test_repo.md](examples\u002F03_clone_and_test_repo.md)\n\nCovers: Git operations, using --cwd flag, running commands in repository context, longer timeouts.\n\n### Example 4: Process Binary Files\n**Read when**: User needs to upload, process, or download binary files (images, PDFs).\n**See**: [examples\u002F04_process_binary_files.md](examples\u002F04_process_binary_files.md)\n\nCovers: Binary file upload\u002Fdownload, image processing, using appropriate file operations for binary vs text.\n\n### Example 5: Host Frontend Application\n**Read when**: User wants to build a web app, UI, dashboard, or any frontend accessible via browser.\n**See**: [examples\u002F05_host_frontend.md](examples\u002F05_host_frontend.md)\n\nCovers: Exposing frontends, using port 5173, starting servers in background, getting public URLs, keeping sandboxes alive.\n\n## Reference\n\n**Built-in CLI Help**:\n```bash\ncd SANDBOX_CLI_PATH\nuv run sbx --help       # Overview of all commands\nuv run sbx \u003Ccommand> --help  # Detailed help for specific command\n```\n\nFor complete command reference and advanced usage, see:\n- **CLI Help**: Run `uv run sbx --help` for interactive command reference\n- **Full documentation**: `SANDBOX_CLI_PATH\u002FREADME.md`\n- **Architecture details**: Command groups, modules, and design principles\n- **Advanced examples**: Multi-step workflows, git operations, package management\n\n## Troubleshooting\n\n**\"Need help with a command\"**:\n- Run `uv run sbx --help` for all available commands\n- Run `uv run sbx \u003Ccommand> --help` for specific command details\n- All commands have built-in help documentation\n\n**\"E2B_API_KEY not found\"**:\n- Check `.env` file exists in project root\n- Verify key is set: `grep E2B_API_KEY .env`\n- Add key if missing: `echo \"E2B_API_KEY=key\" >> .env`\n\n**\"Command not found: sbx\"**:\n- Ensure you're in the sandbox_cli directory\n- Run with `uv run sbx` instead of just `sbx`\n\n**\"Sandbox timeout\"**:\n- Increase timeout: `sbx init --timeout 900`\n- Use `--timeout` flag on long-running exec commands\n\n**\"Permission denied\"**:\n- Use `--root` flag for system operations\n- Check file paths are in `\u002Fhome\u002Fuser\u002F` directory\n\n**\"Forgot command syntax\"**:\n- Use `uv run sbx --help` to see command structure\n- Each command group has detailed help with examples\n\n**Browser issues**: See [cookbook\u002Fbrowser.md](cookbook\u002Fbrowser.md) for troubleshooting.\n\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fdisler\u002Fagent-sandbox-skill\u002Fagent-sandboxes",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill agent-sandboxes",{"tool":48,"command":49},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill agent-sandboxes",{"tool":51,"command":52},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill agent-sandboxes","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fdisler\u002Fagent-sandbox-skill\u002Fagent-sandboxes\u002FSKILL.md",true,[],[57,67,77,86,92,99],{"skillNo":58,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":63,"publishedAt":28},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[62],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[64,65,66],"model","model hierarchy","model hierarchy skill",{"skillNo":68,"name":69,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":73,"publishedAt":28},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[72],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[74,75,76],"MCP","zoom","zoom mcp",{"skillNo":78,"name":79,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":28},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[83,84,85,75],"sdk","zoom apps sdk","apps",{"skillNo":87,"name":88,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":28},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[88],{"skillNo":93,"name":94,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":98,"publishedAt":28},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[97],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[94],{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":28},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[101]]