Skip to main content

Add your description here

Project description

SkillFS

Bash is all you need.

A persistent, version-controlled sandbox for AI agents. Runs on E2B with every change tracked in git.

Agent works → commits progress → session ends
            ↓
Next session → restores state → continues where it left off
            ↓
git log     → full history of everything it did

Installation

pip install skillfs

You'll also need:

  • An E2B API key for sandbox execution
  • An LLM API key (e.g., Anthropic) if using runners

Quick Start

import asyncio
from skillfs.workspaces import Workspace
from skillfs.sandboxes import E2BSandbox, SandboxConfig
from skillfs.storage import LocalBundleStore

async def main():
    sandbox = E2BSandbox.create(config=SandboxConfig(timeout=300))
    store = LocalBundleStore(directory="/tmp/workspaces")

    workspace = Workspace(
        workspace_id="my-workspace",
        sandbox=sandbox,
        store=store,
    )

    await workspace.load()  # Restore from previous session if exists

    # Use the sandbox directly
    sandbox.run_command("echo 'Hello, world!' > hello.txt")
    sandbox.run_command("cat hello.txt")

    workspace.save()  # Commit and upload git bundle
    sandbox.close()

asyncio.run(main())

Workspace

Workspace handles persistence. It manages:

  • Loading state from storage (git bundles)
  • Saving state back to storage
  • Setting up MCP servers
  • Managing skills
from skillfs.workspaces import Workspace

workspace = Workspace(
    workspace_id="my-workspace",
    sandbox=sandbox,
    store=store,
    mcp_servers={
        "playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}
    },
    generate_mcp_tools=True,
)

await workspace.load()
# ... do work with sandbox ...
workspace.save()

Storage Backends

# Local filesystem (development)
from skillfs.storage import LocalBundleStore
store = LocalBundleStore(directory="/tmp/workspaces")

# Google Cloud Storage (production)
from skillfs.storage import GCSBundleStore
store = GCSBundleStore(bucket="my-bucket", prefix="workspaces/")

Runners (Optional)

Runners are LLM loops that work with the sandbox. Workspace handles persistence, Runner handles agent logic.

from skillfs.workspaces import Workspace
from skillfs.runners import AnthropicProvider, MainRunner

# Workspace: persistence
workspace = Workspace(workspace_id="my-workspace", sandbox=sandbox, store=store)
await workspace.load()

# Runner: LLM loop (uses same sandbox)
provider = AnthropicProvider(api_key="sk-ant-...", model="claude-sonnet-4-5-20250929")
runner = MainRunner(
    name="assistant",
    description="General assistant",
    system_prompt="You are a helpful assistant.",
    sandbox=sandbox,
    provider=provider,
    tools=["glob", "grep", "read_file", "write_file"],
)

result = await runner.run("Find all Python files")
print(result.message)

workspace.save()

Tools

Built-in sandbox tools available to runners:

  • glob: Find files by pattern
  • grep: Search file contents (regex)
  • read_file: Read file contents
  • write_file: Create/overwrite files
  • edit_file: Make targeted string replacements
  • run_command: Execute shell commands

MCP Integration

Generate Python wrappers for MCP servers inside the sandbox:

workspace = Workspace(
    workspace_id="browser-workspace",
    sandbox=sandbox,
    store=store,
    mcp_servers={
        "playwright": {
            "command": "npx",
            "args": ["@playwright/mcp@latest"]
        }
    },
    generate_mcp_tools=True,
)
await workspace.load()

# MCP tools are now available at src/servers/playwright/

Examples

examples/browser_agent.py - Browser automation with Playwright MCP.

examples/example_with_runners.py - Using Workspace with Runners.

export ANTHROPIC_API_KEY=sk-ant-...
export E2B_API_KEY=e2b_...
python examples/browser_agent.py

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skillfs-0.1.0.tar.gz (56.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skillfs-0.1.0-py3-none-any.whl (77.6 kB view details)

Uploaded Python 3

File details

Details for the file skillfs-0.1.0.tar.gz.

File metadata

  • Download URL: skillfs-0.1.0.tar.gz
  • Upload date:
  • Size: 56.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skillfs-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6e797d94672baa146caaa2f19bb5a024c78d0cea9352375edf7e7a1e40c15348
MD5 bfa042def738713865be52fe47208f1e
BLAKE2b-256 30172269716d5282ced938ff559402303ceed4e373323a2cad7d30e1cf24202c

See more details on using hashes here.

File details

Details for the file skillfs-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: skillfs-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 77.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skillfs-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ee42e152722a750beff0d7b35cb04efd89f6507a75bbe013ae0554be4e42885c
MD5 ec6f5f5983617e3b2eb71cf1126a244d
BLAKE2b-256 9717aa1f7c2ad2807009512343f4b85141a2114f2adad88c8ce998b21db8db25

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page