The lightweight AI Agent Skills engine with built-in native system-level sandbox, zero dependencies, and local execution.
A lightweight AI Agent Skills execution engine that integrates with any OpenAI-compatible LLM.
| Feature | SkillLite | Claude Code Sandbox | Pyodide | OpenAI Plugins | Semantic Kernel |
|---|---|---|---|---|---|
| Built-in Sandbox | β Rust Native | β Node.js Native | β None (Azure) | ||
| Sandbox Tech | Seatbelt + Namespace | Seatbelt + bubblewrap | WebAssembly/Docker | Cloud Isolation | - |
| Implementation | Rust (High Perf) | Node.js/TypeScript | Python | - | C# |
| Local Execution | β | β | β | β | β |
| Zero Dependencies | β Single Binary | β Needs Node.js | β Needs Runtime | β | β |
| Cold Start | β‘ Milliseconds | Medium | π’ Seconds | - | - |
| LLM Agnostic | β Any LLM | β Claude Only | β | β OpenAI Only | β |
| License | MIT | Apache 2.0 | MIT | Closed | MIT |
# Install SkillLite SDK
pip install skilllite
# Install the sandbox binary (auto-downloads pre-compiled binary)
skilllite install
# Verify installation
skilllite statusThat's it! No Rust, no Docker, no complex setup required.
β οΈ Platform Support: macOS and Linux only. Windows is not supported yet.
| Tutorial | Time | Description |
|---|---|---|
| 01. Basic Usage | 5 min | Simplest examples, one-line execution |
| 02. Skill Management | 10 min | Create and manage skills |
| 03. Agentic Loop | 15 min | Multi-turn conversations and tool calls |
| 04. LangChain Integration | 15 min | Integration with LangChain framework |
| 05. LlamaIndex Integration | 15 min | RAG + skill execution |
| 06. MCP Server | 10 min | Claude Desktop integration |
| 07. OpenCode Integration | 5 min | One-command OpenCode integration |
from skilllite import SkillRunner
runner = SkillRunner()
result = runner.run("Calculate 15 * 27")
print(result)# Create .env file with your LLM API configuration
cat > .env << EOF
BASE_URL=https://api.deepseek.com/v1
API_KEY=your_api_key_here
MODEL=deepseek-chat
EOFπ View All Tutorials
In addition to performance tests, we provide security comparison tests to evaluate the protection capabilities of sandbox solutions against malicious behavior.
| Category | Test Item | Description |
|---|---|---|
| File System | Read sensitive files | /etc/passwd, ~/.ssh/id_rsa |
| Write files | Try to create files outside sandbox | |
| Directory traversal | ../../../ path traversal attacks |
|
| Network | HTTP requests | External network access capability |
| DNS queries | Domain name resolution capability | |
| Port listening | Open socket services | |
| Process | System commands | os.system(), subprocess |
| Process enumeration | View other process information | |
| Signal sending | Try to kill other processes | |
| Resource Limits | Memory bomb | Infinite memory allocation |
| Fork bomb | Infinite process creation | |
| CPU bomb | Infinite loop calculation | |
| Code Injection | Dynamic import | __import__, importlib |
| eval/exec | Dynamic code execution |
| Test Item | SkillBox | Docker | Pyodide | Claude SRT |
|---|---|---|---|---|
| File System | ||||
| Read /etc/passwd | β Blocked | β Allowed | β Blocked | β Allowed |
| Read SSH private key | β Blocked | β Blocked | β Blocked | β Allowed |
| Write to /tmp dir | β Blocked | β Allowed | β Allowed | β Blocked |
| Directory traversal | β Blocked | β Allowed | β Blocked | β Allowed |
| List root directory | β Blocked | β Allowed | β Allowed | β Allowed |
| Network | ||||
| Send HTTP request | β Blocked | β Allowed | β Blocked | β Blocked |
| DNS query | β Blocked | β Allowed | β Allowed | β Blocked |
| Listen port | β Blocked | β Allowed | β Allowed | β Blocked |
| Process | ||||
| Execute os.system() | β Blocked | β Allowed | β Allowed | β Allowed |
| Execute subprocess | β Blocked | β Allowed | β Blocked | β Allowed |
| Enumerate processes | β Blocked | β Allowed | β Allowed | β Blocked |
| Send process signal | β Blocked | β Allowed | β Blocked | |
| Resource Limits | ||||
| Memory bomb | β Allowed | β Allowed | β Allowed | β Allowed |
| Fork bomb | β Blocked | β Allowed | β Blocked | β Allowed |
| CPU intensive compute | β Blocked | β Blocked | β Allowed | β Blocked |
| Code Injection | ||||
| Dynamic import os | β Blocked | β Allowed | β Allowed | β Allowed |
| Use eval/exec | β Blocked | β Allowed | β Allowed | β Allowed |
| Modify built-in funcs | β Allowed | β Allowed | β Allowed | β Allowed |
| Information Leakage | ||||
| Read environment vars | β Blocked | β Allowed | β Allowed | β Allowed |
| Get system info | β Blocked | β Allowed | β Allowed | β Allowed |
| Platform | Blocked | Partially Blocked | Allowed | Security Score |
|---|---|---|---|---|
| SkillBox | 18 | 0 | 2 | 90.0% |
| Docker | 2 | 0 | 18 | 10.0% |
| Pyodide | 7 | 0 | 13 | 35.0% |
| Claude SRT | 6 | 1 | 13 | 32.5% |
# Complete test (SkillBox + Docker + Pyodide)
python3 benchmark/security_vs.py
# Test SkillBox only
python3 benchmark/security_vs.py --skip-docker --skip-pyodide
# Output JSON results
python3 benchmark/security_vs.py --output security_results.json| Dimension | SkillBox | Docker | Pyodide | SRT |
|---|---|---|---|---|
| Warm Start Latency | 40 ms | 194 ms | 672 ms | 596 ms |
| Cold Start Latency | 492 ms | 120s | ~5s | ~1s |
| Memory Usage | 10 MB | ~100 MB | ~50 MB | 84 MB |
| Security | βββββ | ββ | βββ | βββ |
| Deployment Complexity | Single binary | Requires daemon | Requires Node.js | Requires installation |
| Platform Support | macOS/Linux | All platforms | All platforms | macOS/Linux |
Claude/Anthropic released Claude Code Sandbox in October 2025, using the same underlying technology stack as SkillLite:
- macOS: Seatbelt (sandbox-exec)
- Linux: bubblewrap + namespace
Key Differences:
| Aspect | SkillLite | Claude Code Sandbox |
|---|---|---|
| Purpose | General Skills Execution Engine | Claude Code Exclusive |
| LLM Binding | β Any LLM | β Claude Only |
| Implementation | Rust (Higher Performance, Smaller Size) | Node.js/TypeScript |
| Deployment | Single Binary, Zero Dependencies | Requires Node.js Runtime |
| Skills Ecosystem | Independent Skills Directory | Depends on MCP Protocol |
| Use Case | Any Agent Framework Integration | Claude Code Internal Use |
π‘ Summary: Claude Code Sandbox validates that "native system-level sandbox" is the right direction for AI Agent secure execution. SkillLite provides an LLM-agnostic, Rust-implemented, lighter-weight alternative for scenarios requiring multi-LLM integration or maximum performance.
SkillLite uses a Rust-implemented native system-level sandbox, not Docker or WebAssembly:
- macOS: Kernel-level isolation based on Seatbelt (sandbox-exec)
- Linux: Container-level isolation based on Namespace + Seccomp
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Other Solutions β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Docker β β Pyodide β β Cloud Sandboxβ β
β β (Heavyweight)β β (WebAssembly)β β(Data Upload) β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SkillLite Solution β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Rust Native System-Level Sandbox ββ
β β β’ Direct OS security mechanisms (Seatbelt/Namespace) ββ
β β β’ Zero external dependencies, single binary ββ
β β β’ Millisecond cold start, production-grade performance ββ
β β β’ Code and data never leave your machine ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Security Capability | Description |
|---|---|
| Process Isolation | Each Skill runs in an independent process |
| Filesystem Isolation | Only Skill directory and temp directory accessible |
| Network Isolation | Network disabled by default, can be enabled on demand |
| Resource Limits | CPU, memory, execution time limits |
| Least Privilege | Follows the principle of least privilege |
- π Native Security Sandbox - Rust-implemented system-level isolation, not Docker/WebAssembly
- β‘ Ultra Lightweight - Single binary, millisecond cold start, zero external dependencies
- π Data Sovereignty - Pure local execution, code and data never leave your machine
- π Universal LLM Support - Compatible with all OpenAI API format LLM providers
- π¦ Skills Management - Auto-discovery, registration, and management of Skills
- π§ Smart Schema Inference - Automatically infer input parameter Schema from SKILL.md and script code
- π§ Tool Calls Handling - Seamlessly handle LLM tool call requests
- π Rich Context Support - Support for references, assets, and other extended resources
Click to expand (for contributors or custom builds)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/envcd skillbox
cargo build --release
cargo install --path .
skillbox --helpAfter compilation, the binary will be at:
cargo install:~/.cargo/bin/skillboxcargo build:skillbox/target/release/skillbox
skillLite/
βββ skillbox/ # Rust sandbox executor
βββ skilllite/ # Python SDK
β βββ skilllite/
β βββ manager.py # SkillManager core manager
β βββ executor.py # Skill executor
β βββ loops.py # Agentic Loop implementation
β βββ tools.py # Tool definitions
β βββ ...
βββ .skills/ # Skills directory
β βββ calculator/ # Calculator Skill
β βββ data-analyzer/ # Data Analysis Skill
β βββ http-request/ # HTTP Request Skill
β βββ text-processor/ # Text Processing Skill
β βββ weather/ # Weather Query Skill
β βββ writing-helper/ # Writing Assistant Skill
βββ simple_demo.py # Full example
βββ simple_demo_v2.py # Simplified example
βββ simple_demo_minimal.py # Minimal example
from openai import OpenAI
from skilllite import SkillManager
# Initialize OpenAI-compatible client
client = OpenAI(base_url="https://api.deepseek.com/v1", api_key="your_key")
# Initialize SkillManager
manager = SkillManager(
skills_dir="./.skills",
llm_client=client,
llm_model="deepseek-chat"
)
# Get tool definitions (OpenAI format)
tools = manager.get_tools()
# Call LLM
response = client.chat.completions.create(
model="deepseek-chat",
tools=tools,
messages=[{"role": "user", "content": "Calculate 15 times 27"}]
)
# Handle tool calls
if response.choices[0].message.tool_calls:
results = manager.handle_tool_calls(response)| Provider | base_url |
|---|---|
| OpenAI | https://api.openai.com/v1 |
| DeepSeek | https://api.deepseek.com/v1 |
| Qwen | https://dashscope.aliyuncs.com/compatible-mode/v1 |
| Moonshot | https://api.moonshot.cn/v1 |
| Ollama (Local) | http://localhost:11434/v1 |
Each Skill is a directory containing a SKILL.md:
my-skill/
βββ SKILL.md # Skill metadata and description (required)
βββ scripts/ # Scripts directory
β βββ main.py # Entry script
βββ references/ # Reference documents (optional)
βββ assets/ # Resource files (optional)
---
name: my-skill
description: My custom Skill
version: 1.0.0
entry_point: scripts/main.py
---
# My Skill
This is the detailed description of the Skill...SkillLite provides adapters for popular AI frameworks with security confirmation support.
from skilllite import SkillManager
from skilllite.core.adapters.langchain import SkillLiteToolkit
manager = SkillManager(skills_dir="./skills")
# Basic usage
tools = SkillLiteToolkit.from_manager(manager).get_tools()
# With security confirmation (sandbox_level=3)
def confirm_execution(report: str, scan_id: str) -> bool:
print(report)
return input("Continue? [y/N]: ").lower() == 'y'
tools = SkillLiteToolkit.from_manager(
manager,
sandbox_level=3, # 1=no sandbox, 2=sandbox only, 3=sandbox+scan
confirmation_callback=confirm_execution
).get_tools()
# Use with LangChain agent
from langchain.agents import AgentExecutor, create_openai_tools_agent
agent = create_openai_tools_agent(llm, tools, prompt)from skilllite import SkillManager
from skilllite.core.adapters.llamaindex import SkillLiteToolSpec
manager = SkillManager(skills_dir="./skills")
# Basic usage
tool_spec = SkillLiteToolSpec.from_manager(manager)
tools = tool_spec.to_tool_list()
# With security confirmation
def confirm(report: str, scan_id: str) -> bool:
print(report)
return input("Continue? [y/N]: ").lower() == 'y'
tool_spec = SkillLiteToolSpec.from_manager(
manager,
sandbox_level=3,
confirmation_callback=confirm
)
# Use with LlamaIndex agent
from llama_index.core.agent import ReActAgent
agent = ReActAgent.from_tools(tools, llm=llm)| Level | Description |
|---|---|
| 1 | No sandbox - direct execution |
| 2 | Sandbox isolation only |
| 3 | Sandbox + static security scan (requires confirmation for high-severity issues) |
SkillLite can be integrated with OpenCode as an MCP (Model Context Protocol) server, providing secure sandbox execution capabilities.
# Install with MCP support
pip install skilllite[mcp]
# One-command setup for OpenCode
skilllite init-opencode
# Start OpenCode
opencodeThe init-opencode command automatically:
- Detects the best way to start the MCP server (uvx, pipx, skilllite, or python)
- Creates
opencode.jsonwith optimal configuration - Generates
.opencode/skills/skilllite/SKILL.mdwith usage instructions - Discovers your pre-defined skills
- SkillManager - Manages Skill discovery, registration, and execution
- SkillInfo - Single Skill information encapsulation
- AgenticLoop - Automated Agent loop execution
- ToolDefinition - OpenAI-compatible tool definition
- SchemaInferrer - Smart parameter Schema inference
MIT
This project includes third-party dependencies with various licenses. See THIRD_PARTY_LICENSES.md for details.
- Getting Started - Installation and quick start guide
- Architecture - Project architecture and design
- Contributing Guide - How to contribute