Always
on.

A Bot is a persistent Durable Object with a conversation, memory, routines, tools, and a desktop on a shared cloud computer. It keeps working after you close the laptop and comes back only when it needs an approval.

01

Persistent by default

Every Bot is its own Durable Object. History, notes and instructions survive across sessions, deploys and devices.

02

A real computer

Browser, filesystem and terminal on a Fly Sprite. Each Bot gets its own desktop and folders. Watch the screen or take control.

03

Routines and triggers

Cron schedules, webhooks and connected-app events wake a Bot and run a Turn without you in the loop.

04

Approvals in the loop

Spending, sending, publishing a plugin: each is an approval card on the Turn's own log. Allow once, or always.

Web macOS Windows COMING SOON iPhone COMING SOON Android COMING SOON Apple Watch COMING SOON Wear OS COMING SOON YOUR DEVICES Cron Webhooks App events Host gateway ONE USER · DURABLE OBJECTS Sunny memory · routines · tools · approvals Pixel its own conversation and log Cow one Durable Object per Bot 7 hooks across the loop + theme Plugin worker one Dynamic Worker per User · enabled per Bot WRAPS THE LOOP system prompt · tool exposure each model request before and after tool calls whether the Turn ends theme assembly, outside a Turn ADDS TO THE BOT namespaced tools cards + declared slots Skills + trigger handlers model provider protocols typed services for Plugins external effects cross host-owned loopbacks HOST CAPABILITIES · AUTHORITY STAYS HERE Computer host first-party tools now · Plugin grant later browser · files · terminal · desktop Model transport Frock AI built in · optional provider Plugin the host attaches credentials upstream Connected apps + HTTP Package or Plugin logic · approved hosts Connections and secrets remain host-owned Data + time storage · memory · Workspace schedules · scoped to this Bot and Turn Device bridge TARGET INTO THE BOT entries · device triggers BACK TO THE DEVICE actions · slots · cards, rendered by the host Device bridge ↔ every connected device · triggers in, actions and surfaces out
Every request enters through a host-owned gateway and is admitted durably by the Bot. The Bot calls one Dynamic Worker per User for the enabled Plugins that wrap its loop or provide tools, cards, triggers, Skills and model protocols. Plugin code never carries authority directly: the Bot mints scoped loopbacks for this Bot and Turn, and the host owns the Computer, model transport, Connections, data and device bridge. Device entries and triggers come in through durable admission; actions, slots and cards go back through a host client that owns the surface and its trust chrome. A Plugin that throws or overruns is skipped and the Turn carries on.

Bring your
own model.

Forty providers ship in the box: Anthropic, OpenAI, Google, DeepSeek, Mistral, Groq, OpenRouter, Bedrock, Vertex, Workers AI, and the rest, including OAuth sign-in where a provider offers it. Pick a model per Bot. Credentials stay with the host transport.

The hosted deployment also includes metered models on the same balance as the computer. A deployment with no keys at all still works: Auto resolves to a Workers AI model on the account's own binding.

Sunny’s modelAuto
Best fit for this Turn Claude Sonnet Credential stays with the host transport
Anthropic OpenAI Google Google Vertex AI DeepSeek Mistral Groq Cerebras Fireworks Together OpenRouter Amazon Bedrock Azure OpenAI Cloudflare Workers AI Cloudflare AI Gateway Vercel AI Gateway xAI Hugging Face NVIDIA Baseten MiniMax Moonshot AI Xiaomi Ant Ling Radius OpenCode Zen + 2 regional endpoints

Everything a Bot does
is a plugin.

Plugins wrap the agent loop. They declare hooks on the loop's events, register tools under their own namespace, keep their own storage, and name the hosts they may reach. Each User's plugins mount into one Dynamic Worker with a hard CPU budget and a loopback into the kernel; a plugin that throws or overruns is quarantined and the Turn carries on.

Bots can write plugins too. Publishing one never runs it: the Bot puts an approval card in front of you naming the tools, hooks, grants and hosts it wants, and nothing mounts until you say so.

ADR 0026: Plugins Architecture

  1. 01Turn startsThe Bot records the work.
  2. 02Hook runsThe plugin may reshape one seam.
  3. 03Grant checkedOnly approved reach is admitted.
  4. 04Turn continuesFailure skips the plugin, not the work.
// plugin.ts: one tool, one hook, its own storage
import type { PluginExecute, PluginHooks, PluginTool }
  from "@frockbot/applet-sdk/plugin";

export const tools: PluginTool[] = [{
  name: "note_add",
  description: "Keep one short note for this Bot.",
  inputSchema: { type: "object",
    properties: { text: { type: "string" } },
    required: ["text"] },
}];

export const execute: PluginExecute = async (tool, input, ctx) => {
  const stored = await ctx.storage?.get({ key: "notes" });
  const notes = stored?.status === "available" ? stored.value : [];
  await ctx.storage?.put({ key: "notes", value: [...notes, input.text] });
  return `Kept it. ${notes.length + 1} note(s) now.`;
};

export const hooks: PluginHooks = {
  "agent/tool-exposure": (payload) =>
    payload.tools.filter((t) => t.name !== "image_generate"),
};
  1. 1system-prompt/assemble add to or rewrite the prompt before the model sees it
  2. 2agent/tool-exposure hide, rename or add tools for this Turn
  3. 3agent/request change the messages or the options on each request
  4. 4tools/pre-execute inspect or veto a tool call before it runs
  5. 5tools/post-execute reshape a result before it reaches the model
  6. 6agent/turn-stopping receive the notification that the Turn is stopping

Your account.
Coming soon.

Deploying FrockBot into a Cloudflare account you own is coming soon: the same code frockbot.com runs, with Cloudflare Access as the sign-in and no billing at all.

It is MIT licensed, so every line is already on GitHub to read.

Read the code on GitHub

Read the source.
Then change it.

MIT licensed. Issues, ADRs and the constitution are all in the open.

Open the repo → No wool required