From 0f538a2ea7336dc4c7aee324b209958cc856646b Mon Sep 17 00:00:00 2001 From: "rivet-docs-sync[bot]" Date: Wed, 14 Oct 2026 02:59:09 +0000 Subject: [PATCH] docs(agents): sync from rivet-dev/agents@f08f2ed --- vendor/agents/docs/content/docs/index.mdx | 2 +- .../agents/docs/content/docs/quickstart.mdx | 3 +- vendor/agents/docs/content/docs/sandboxes.mdx | 41 ++++++++++++++----- vendor/agents/examples/docs/package.json | 5 ++- .../examples/docs/sandboxes/freestyle.ts | 30 ++++++++++++++ 5 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 vendor/agents/examples/docs/sandboxes/freestyle.ts diff --git a/vendor/agents/docs/content/docs/index.mdx b/vendor/agents/docs/content/docs/index.mdx index ce484398..9e40bd51 100644 --- a/vendor/agents/docs/content/docs/index.mdx +++ b/vendor/agents/docs/content/docs/index.mdx @@ -89,7 +89,7 @@ Each agent on Rivet is one [Rivet Actor](/actors/docs). You define the agent onc Give agents model access with your own provider keys. - Run an agent's file and shell tools in E2B, Daytona, or your own provider. + Run an agent's file and shell tools in E2B, Daytona, Freestyle, or your own provider. Give an agent tools that run in your backend, with your APIs and secrets. diff --git a/vendor/agents/docs/content/docs/quickstart.mdx b/vendor/agents/docs/content/docs/quickstart.mdx index 300eadd7..e429c688 100644 --- a/vendor/agents/docs/content/docs/quickstart.mdx +++ b/vendor/agents/docs/content/docs/quickstart.mdx @@ -94,9 +94,10 @@ npm add @rivet-dev/sandbox-adapter + -[agentOS](/agentos/docs) needs no provider account. For E2B, install `e2b` and set `E2B_API_KEY`. For Daytona, install `@daytonaio/sdk` and set `DAYTONA_API_KEY`. See [Sandboxes](/agents/docs/sandboxes). +[agentOS](/agentos/docs) needs no provider account. For E2B, install `e2b` and set `E2B_API_KEY`. For Daytona, install `@daytonaio/sdk` and set `DAYTONA_API_KEY`. For Freestyle, install `freestyle` and set `FREESTYLE_API_KEY`. See [Sandboxes](/agents/docs/sandboxes). diff --git a/vendor/agents/docs/content/docs/sandboxes.mdx b/vendor/agents/docs/content/docs/sandboxes.mdx index 4528d3b8..590d8d80 100644 --- a/vendor/agents/docs/content/docs/sandboxes.mdx +++ b/vendor/agents/docs/content/docs/sandboxes.mdx @@ -1,6 +1,6 @@ --- title: "Sandboxes" -description: "Run an agent without a sandbox, or give it a shell in agentOS, E2B, Daytona, or a sandbox provider you write." +description: "Run an agent without a sandbox, or give it a shell in agentOS, E2B, Daytona, Freestyle, or a sandbox provider you write." --- An agent doesn't need a sandbox. Without one, its file tools work on files in the Actor's own database. Add a sandbox only when the agent needs a shell. @@ -27,28 +27,30 @@ See [Built-in Tools](/agents/docs/built-in-tools) for what each tool does. When the agent needs to run commands, such as tests or a build, pass a sandbox provider. `@rivet-dev/sandbox-adapter` gives each Actor its own sandbox, and `CodingTools` run there.
- + - + SANDBOX PROVIDERS - - + + + - - + + - Agent Actor - Sandbox adapter - SandboxProvider + Agent Actor + Sandbox adapter + SandboxProvider agentOS E2B Daytona - tool calls + Freestyle + tool calls
@@ -80,6 +82,7 @@ agentOS needs no provider account. To use E2B or Daytona instead, see | [agentOS](/agentos/docs) | None | Sleeps when idle, and keeps its files | Left in place | | E2B | `e2b` | Paused | Deleted | | Daytona | `@daytonaio/sdk` | Stopped | Deleted | +| Freestyle | `freestyle` | Paused | Deleted | Provider credentials stay on your worker and never enter the sandbox. @@ -129,6 +132,22 @@ npm add @rivet-dev/sandbox-adapter @daytonaio/sdk The working directory is the sandbox's own working directory. A stopped sandbox is started again the next time the Actor uses it. +### Freestyle + +```sh +npm add @rivet-dev/sandbox-adapter freestyle +``` + + + +| Option | Description | +| --- | --- | +| `create` | Options for Freestyle's `vms.create`, or a function that receives the Actor context and returns them. Required, because `firewall` is required. | +| `client` | A Freestyle client. Defaults to `new Freestyle()`, which reads `FREESTYLE_API_KEY`. | +| `cwd` | Working directory inside the VM. Created when the Actor connects. Defaults to `/workspace`. | + +A Freestyle VM has no network access until a `firewall` rule allows it. Commands run as `root` through Python 3, so the image must include it. Every `freestyle/ubuntu*` snapshot does. + ## How the sandbox is managed - The sandbox is created the first time the agent needs it. diff --git a/vendor/agents/examples/docs/package.json b/vendor/agents/examples/docs/package.json index a7a477b9..644f0c84 100644 --- a/vendor/agents/examples/docs/package.json +++ b/vendor/agents/examples/docs/package.json @@ -17,13 +17,14 @@ "@rivet-dev/pi": "workspace:*", "@rivet-dev/sandbox-adapter": "workspace:*", "@rivet-dev/workflows": "1.0.0", - "@rivetkit/react": "2.3.23", + "@rivetkit/react": "2.3.26", "@slack/web-api": "^8.2.0", "discord-interactions": "^4.4.0", "e2b": "^2.51.0", + "freestyle": "^0.2.16", "hono": "^4.13.12", "react": "^19.3.0", - "rivetkit": "2.3.23" + "rivetkit": "2.3.26" }, "devDependencies": { "@types/node": "^24.0.0", diff --git a/vendor/agents/examples/docs/sandboxes/freestyle.ts b/vendor/agents/examples/docs/sandboxes/freestyle.ts new file mode 100644 index 00000000..d0dab1c9 --- /dev/null +++ b/vendor/agents/examples/docs/sandboxes/freestyle.ts @@ -0,0 +1,30 @@ +import { createRegistry } from "@earendil-works/pi-durable"; +import { CodingTools } from "@earendil-works/pi-durable/tools"; +import { pi } from "@rivet-dev/pi"; +import { freestyleProvider } from "@rivet-dev/sandbox-adapter/freestyle"; +import { setup } from "rivetkit"; + +// read, write, edit, and bash, running in the sandbox +const extensions = createRegistry(); +extensions.install(CodingTools); + +const agent = pi({ + model: "anthropic/claude-opus-5-5", + registry: extensions, + sandbox: freestyleProvider({ + create: { + snapshotId: "freestyle/ubuntu-sm", + // A VM has no network access until a rule allows it. This allows DNS and HTTPS out. + firewall: { + rules: [ + { action: "allow", source: {}, destination: { public: true, port: 53, protocol: "udp" } }, + { action: "allow", source: {}, destination: { public: true, port: 443, protocol: "tcp" } }, + ], + }, + }, + }), +}); + +export const registry = setup({ use: { agent } }); + +registry.start();