{"slug": "open-cowork-open-source-alternative-to-claude-cowork-with-byok", "title": "Open-Cowork: open-source alternative to Claude Cowork with BYOK", "summary": "Open-Cowork, an open-source alternative to Claude Cowork, launches as a cross-platform agentic coworker that automates computer tasks via screen observation and action. The tool supports bring-your-own-LLM (BYOK) with providers like OpenRouter, OpenAI, and local models, and offers live streaming, approval pauses, and cost controls. It runs on the Coasty Computer Use API by default but allows users to switch models, aiming to democratize AI desktop automation.", "body_md": "**Hand off computer tasks to an AI coworker — watch it work, approve from anywhere.**\n\nAn open-source, cross-platform agentic coworker that *sees a screen and acts on it* —\nyour own desktop, a cloud VM, or a browser. It streams every step live, pauses for your\napproval, and keeps spend visible and capped.\n\nRuns on the [Coasty Computer Use API](https://coasty.ai/docs) out of the box —\nor **bring your own LLM** (OpenRouter · OpenAI · a local model). Your call.\n\n[ Quickstart](#quickstart) ·\n\n[·](#bring-your-own-llm-byok)\n\n**Bring your own LLM**[·](/coasty-ai/open-cowork/blob/main/RUN_LOCALLY.md)\n\n**Automate your PC**[·](#what-you-can-do)\n\n**Features**[How it works](#how-it-works)·\n\n[Docs](#docs)\n\nPrereqs:Node ≥ 22.5 (we use 24) · pnpm 10 (`corepack enable`\n\n).\n\n```\ngit clone https://github.com/coasty-ai/open-cowork.git && cd open-cowork\npnpm install      # one install for the whole monorepo\npnpm desktop      # ← runs the desktop app: starts backend + web, opens the window\n```\n\nThat's it — **one command, zero config.** `pnpm desktop`\n\nstarts the backend and web\nUI, then opens the **desktop app** (the build that can drive **your own screen**).\nWith no key set it runs in **demo mode**: a bundled mock server and a throwaway\nsandbox key — no account, no network, no billing.\n\nThen, in the window:\n\n- Sign in with any email.\n- On\n**Delegate**, pick**“This computer (local screen).”** - Type a task → confirm the cost → watch it work.\n*(Tip: put*`NEEDS_HUMAN`\n\nin a task to see the approval flow pause and resume.)\n\n🧠\n\nBring your own LLM (BYOK).Want it to run onyourmodel instead of Coasty? OpenSettings → Model providerand add OpenRouter, OpenAI, or a local model (Ollama / LM Studio). Coasty stays the default until you switch.[Jump to BYOK ↓]\n\n⚠️ Local control moves yourrealmouse and keyboard. Stop withCancel(or close the window), and start small — full safety notes in.[RUN_LOCALLY.md]\n\n| Goal | How | Model | Cost |\n|---|---|---|---|\nAutomate your own PC |\n`pnpm desktop` |\nCoasty or your own LLM |\ndemo $0 · BYOK = your provider's rate |\nWeb app only |\n`pnpm dev` →\n|\nCoasty | $0 |\nYour Coasty account |\nadd `COASTY_API_KEY` to `.env` |\nCoasty (real model) | sandbox key = $0 |\nBring your own LLM (BYOK) |\nSettings → Model provider |\nOpenRouter · OpenAI · Ollama | your provider's rate · local = $0 |\n\nThe only thing you ever *have* to set is `COASTY_API_KEY`\n\n— and even that's optional in demo\nmode. Everything else has a working default. Prefer your own model? **That's BYOK** — pick a\nprovider in Settings and local runs use it. Full local-automation guide:\n** RUN_LOCALLY.md**.\n\n**Using your own Coasty account, webhooks & the cost warning**\n\n```\necho \"COASTY_API_KEY=sk-coasty-test-…\" > .env   # sandbox key — never bills\npnpm dev                                         # now talks to the real Coasty API\n```\n\nWith a key set, `pnpm dev`\n\ndoes **not** start the mock and points the backend at\nthe real Coasty API. Start with a **sandbox key** (`sk-coasty-test-…`\n\n) — it\nexercises the full real model and never bills. Switch to a live key only when\nyou're ready to spend.\n\n**Webhooks** (instant status without polling) require an **https**\n`COWORK_PUBLIC_URL`\n\n— Coasty only accepts HTTPS webhook URLs. open-cowork\ndetects this: over a non-https URL it simply doesn't register a webhook (so run\ncreation never fails) and state still syncs live via SSE + read-time reconcile.\nSet an https `COWORK_PUBLIC_URL`\n\n(a tunnel or your deployment — see\n[DEPLOYMENT.md](/coasty-ai/open-cowork/blob/main/DEPLOYMENT.md)) to turn webhooks on.\n\n⚠\n\nCost warning.With alivekey (`sk-coasty-live-…`\n\n): runs bill$0.05/step, machines$0.05–0.09/hourrunning ($0.01 stopped), predict/session calls a few cents each. open-cowork always shows an estimate, requires explicit confirmation, enforces per-run budget caps server-side, and supports machine auto-terminate TTLs — but a live key is real money. All automated tests use the mock/sandbox path and never spend anything.\n\n```\npnpm desktop       # full stack + the desktop app (local screen control) — one command\npnpm dev           # full stack, open the web app yourself at :5173\npnpm dev --no-web  # API only (mock + backend)\npnpm dev:mobile    # Expo / React Native  (or: pnpm --filter @open-cowork/mobile web)\n```\n\n## Run the Electron app against an already-running stack (advanced)\n\nWith `pnpm dev`\n\nalready running in another terminal:\n\n```\npnpm dev:desktop   # builds the Electron bundles and opens the window only\n```\n\n`pnpm desktop`\n\ndoes both for you — start the stack and open the window — and\nshuts it all down when you close the window.\n\n- 💬\n**Delegate in chat**—*\"rename these files and email the report\"*— and watch the agent execute it step by step with a live screen view. - 🧠\n**Bring your own LLM (BYOK)**— run local screen control on*your*model: OpenRouter, OpenAI, or a local model (Ollama / LM Studio / vLLM). Coasty is just the default.[Details ↓](#bring-your-own-llm-byok) - 📺\n**Supervise runs**— dashboard, durable event timeline (SSE with replay), cancel / resume / human-takeover from web, desktop, or phone. - 🔁\n**Build workflows**— a versioned JSON DSL (task · assert · if · loop · parallel · retry · human_approval) with instant validation, cost estimates, and hard server-side budget caps. - 🖥️\n**Manage machines**— provision Coasty cloud VMs, snapshot, stop, terminate, with live cost rates at every step. - 📱\n**Stay in the loop across devices**— start a run on your laptop; when it pauses for approval, the banner pops on your phone. Approve there. - 💸\n**See cost at all times**— wallet balance, per-run worst-case estimates, and an explicit*confirm-the-cost*handshake before anything billable starts.\n\n| Capability | 🖥️ Desktop | 🌐 Web | 📱 Mobile |\n|---|---|---|---|\n| Local screen control | ✅ first-class | → cloud machine | → cloud machine |\n| Cloud-machine control + live view | ✅ | ✅ | ✅ |\n| Task chat + run dashboard | ✅ | ✅ | ✅ |\n| Workflow builder | ✅ full | ✅ full | view + approve |\n| Approvals / human takeover | ✅ | ✅ | ✅ |\n| Cost / wallet view | ✅ | ✅ | ✅ |\n\n**Bring your own key, bring your own model.** Local screen control defaults to **Coasty's**\ncomputer-use model — but you can point it at **any OpenAI-dialect LLM** instead. In the\ndesktop app, open **Settings → Model provider**, pick a provider, choose a **vision-capable**\nmodel, and local runs use it. Coasty stays the default; switch back any time with one click.\nNothing else in the app changes.\n\n| Provider | API key | Covers |\n|---|---|---|\nOpenRouter |\nrequired | hundreds of models; vision read from OpenRouter's own modality metadata |\nOpenAI |\nrequired | `gpt-4o` , `gpt-4.1` , … |\nOpenAI-compatible |\noptional | Ollama, LM Studio, vLLM, Together, Groq — any `…/v1` base URL |\n\n- 👁️\n**Vision is required.** Computer use is screenshot-driven, so a model that can't see images is flagged and**blocked** with a clear message — never a blind, wasted run. - 🏠\n**Local-first.** A local model (e.g. Ollama at`http://localhost:11434/v1`\n\n) runs entirely on your machine — no key, no cloud, no spend. - 🔑\n**Your key stays yours.** BYO keys are encrypted with your**OS keychain**(Electron`safeStorage`\n\n— DPAPI / Keychain / libsecret), live only in the desktop process, are scrubbed from every error message, and**never** reach the web or mobile bundle. - 👀\n**No surprise data egress.** With a third-party model, your screenshots and prompts go to that provider — the app says so right in the confirm-the-cost dialog before a run starts. - ☁️\n**Cloud-machine runs always use Coasty.** BYO drives local (desktop) runs today; cloud BYO is a documented follow-up.\n\nBuilt on the\n\n[Vercel AI SDK]: rate-limit (429) and transient errors retry with backoff, and if a model ignores structured output the response is recovered with a defensive JSON parse — so even smaller local models can drive the loop.\n\n```\n You ──► open-cowork backend ──► Coasty API ──► a screen the agent drives\n            │   (the ONLY place           ├─ your own desktop   (desktop app)\n            │    the API key lives)       ├─ a Coasty cloud VM  (any client)\n            └──► web / desktop / mobile   └─ a browser page     (Playwright)\n                 live events, approvals, costs\n```\n\nOne shared **agent loop** (screenshot → predict → act → repeat) drives any\nscreen through a single `Executor`\n\ninterface — `LocalExecutor`\n\n(your desktop),\n`RemoteMachineExecutor`\n\n(a cloud VM), or `BrowserExecutor`\n\n. The **predict** step\nis its own seam (`@open-cowork/llm`\n\n): Coasty is the default implementation, and a\n[bring your own LLM](#bring-your-own-llm-byok) is just another one behind the same contract,\nso the loop, executors, and UI don't care which is behind it. Clients never hold\nthe Coasty key: they talk to the backend with short-lived session tokens, and\nthe backend proxies to Coasty, verifies HMAC-signed webhooks, persists runs, and\nfans events out over SSE. Full design in\n** ARCHITECTURE.md**.\n\n`COASTY_API_KEY`\n\nexists **only** in the backend's environment. Browsers,\nElectron renderers, and the mobile app authenticate with short-lived session\ntokens and never see the key — enforced by tests that scan every client bundle\nand a runtime E2E assertion that watches every browser request for secret\nmaterial. **Bring-your-own-LLM keys** follow the same rule: encrypted with the OS\nkeychain (`safeStorage`\n\n), held only in the desktop process, scrubbed from every\nerror, and kept out of the web/mobile bundles (the AI SDK is desktop-only).\nCoasty webhooks are verified with per-run HMAC secrets (constant-time compare,\n±5-minute replay window) before they can touch any state. Threat notes in\n** SECURITY.md**.\n\n| Guide | What's inside |\n|---|---|\n|\nAutomate your own PC with the desktop app — step by step |\n|\n\n[SECURITY.md](/coasty-ai/open-cowork/blob/main/SECURITY.md)[DEPLOYMENT.md](/coasty-ai/open-cowork/blob/main/DEPLOYMENT.md)[COOKBOOK.md](/coasty-ai/open-cowork/blob/main/COOKBOOK.md)[DECISIONS.md](/coasty-ai/open-cowork/blob/main/DECISIONS.md)·[CONTRIBUTING.md](/coasty-ai/open-cowork/blob/main/CONTRIBUTING.md)·[SUMMARY.md](/coasty-ai/open-cowork/blob/main/SUMMARY.md)\n\n```\npackages/core       Coasty client, agent loop, workflow DSL, cost estimator, HMAC — isomorphic, zero deps\npackages/executor   Executor abstraction: LocalExecutor (native), RemoteMachineExecutor (VM), BrowserExecutor\npackages/llm        BYO LLM provider seam: Coasty + OpenAI/OpenRouter/Ollama via the Vercel AI SDK (desktop-only)\npackages/ui         Shared React design system + domain components\napps/backend        Fastify: auth, Coasty proxy (sole key holder), webhooks, SQLite, SSE fan-out, budgets\napps/web            Vite + React SPA (also hosted by the desktop shell)\napps/desktop        Electron shell + LocalRunManager (local screen control)\napps/mobile         Expo / React Native companion (monitor + approve)\ntools/mock-coasty   Full offline mock of the Coasty API (REST + SSE + signed webhooks)\ne2e                 Playwright end-to-end flows (web + desktop)\n```\n\n| Command | What |\n|---|---|\n`pnpm dev` |\nmock + backend + web, wired together (`--no-web` for API only) |\n`pnpm doctor` |\npreflight: Node, deps, key shape |\n`pnpm test` |\nevery unit + integration suite (offline, no spend) |\n`pnpm typecheck` · `pnpm lint` · `pnpm format` |\nstrict static checks |\n`pnpm e2e` |\nPlaywright: web + desktop journeys vs the mock |\n`pnpm security:scan` |\nassert no secret material in client code/bundles |\n`pnpm dev:mock|backend|web|desktop|mobile` |\nrun any single piece |\n\n**Repository:**[https://github.com/coasty-ai/open-cowork](https://github.com/coasty-ai/open-cowork)** Issues & feature requests:**[https://github.com/coasty-ai/open-cowork/issues](https://github.com/coasty-ai/open-cowork/issues)** Report a vulnerability:**[Security Advisories](https://github.com/coasty-ai/open-cowork/security/advisories)(see[SECURITY.md](/coasty-ai/open-cowork/blob/main/SECURITY.md))**Coasty:**[docs](https://coasty.ai/docs)·[API keys](https://coasty.ai/developers/keys)\n\n[MIT](/coasty-ai/open-cowork/blob/main/LICENSE) © Coasty / open-cowork contributors", "url": "https://wpnews.pro/news/open-cowork-open-source-alternative-to-claude-cowork-with-byok", "canonical_source": "https://github.com/coasty-ai/open-cowork", "published_at": "2026-06-14 02:18:18+00:00", "updated_at": "2026-06-14 02:29:48.393486+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-infrastructure"], "entities": ["Open-Cowork", "Coasty", "Claude Cowork", "OpenRouter", "OpenAI", "Ollama", "LM Studio"], "alternates": {"html": "https://wpnews.pro/news/open-cowork-open-source-alternative-to-claude-cowork-with-byok", "markdown": "https://wpnews.pro/news/open-cowork-open-source-alternative-to-claude-cowork-with-byok.md", "text": "https://wpnews.pro/news/open-cowork-open-source-alternative-to-claude-cowork-with-byok.txt", "jsonld": "https://wpnews.pro/news/open-cowork-open-source-alternative-to-claude-cowork-with-byok.jsonld"}}