The open-source alternative to Claude Cowork (powered by opencode)
23,472
stars
4,457
commits
TypeScript
primary language
Sep 11, 2026
updated
OpenWork is a free, open-source desktop app made for sharing AI workflows. It is an open-source alternative to Claude Cowork and Codex for macOS, Windows, and Linux.
Add one OpenWork MCP to Codex, Claude Code, Cursor, or another compatible agent and reuse the same skills, MCPs, and connected services across your tools, teammates, and machines. Create something once, share it with coworkers or friends, or keep it for yourself.
The desktop app is there when you want a dedicated workspace, but it is not required. You can use OpenWork from the agent you already have. For larger organizations, the admin interface lets you publish capabilities, manage access, and configure shared or per-user connections.
Already use an AI agent? Copy this prompt and paste it into Claude Code, Cursor, Codex, ChatGPT, or any agent that can run commands on your computer.
Install OpenWork on my computer, set up my first workspace, and open it ready to use. Follow the steps in https://openworklabs.com/start.md?v=hero
The OpenWork MCP brings your assigned skills, plugins, MCP connections, Google Workspace, and Microsoft 365 capabilities into any compatible agent.
It exposes two tools: search_capabilities finds what you can use, and execute_capability runs it. After adding the MCP, your client opens a browser so you can sign in and choose your OpenWork organization.
codex mcp add openwork --url https://api.openworklabs.com/mcp/agent
claude mcp add --transport http openwork https://api.openworklabs.com/mcp/agent
Add this to opencode.json:
{
"mcp": {
"openwork": {
"type": "remote",
"enabled": true,
"url": "https://api.openworklabs.com/mcp/agent",
"oauth": {}
}
}
}
Use this remote MCP server URL:
https://api.openworklabs.com/mcp/agent
OpenWork Den is the control plane for managing OpenWork across a team or organization.
For one checkout, keep using pnpm dev; with no extra environment variables it reuses the existing shared dev profile.
To run multiple git worktrees at once, use:
pnpm dev:worktree
That sets OPENWORK_DEV_PROFILE=auto, derives a stable profile name from the worktree path, lets Electron choose a free CDP port, and asks Vite for a free dev-server port. You can also choose a named profile, for example OPENWORK_DEV_PROFILE=my-feature OPENWORK_ELECTRON_REMOTE_DEBUG_PORT=0 PORT=0 pnpm dev.
dev:worktree also defaults OPENWORK_ELECTRON_USE_MOCK_KEYCHAIN=1. A brand-new profile has no stored credentials, so on macOS the real keychain prompts as soon as Chromium persists an authenticated cookie, and that modal blocks Electron's main loop until it is dismissed. Set OPENWORK_ELECTRON_USE_MOCK_KEYCHAIN=0 if you specifically want the system keychain in an isolated profile.
Dev startup prints a banner like [openwork] dev profile=... cdp=http://127.0.0.1:9223; use it to find the profile directory and pass the CDP URL to local tooling.
If a second instance cannot get the profile lock it now says so and exits, instead of lingering with an open CDP port and no window.
To run the OpenWork UI in a browser against a local openwork-server (no desktop shell):
pnpm dev:headless-web
This is an isolated launcher:
tmp/headless-server.json and never reads ~/.config/openwork/server.json--replaceopenwork-server with a stable owner bearer forced into the UI. Crash-restarts reuse that bearer so open tabs keep working; --replace mints fresh tokens (pass --keep-tokens to preserve them). The privileged host token stays on the server process and is never inlined into the Vite bundle./api/den (forwarded to the Den control plane) and the app pins its Den API there via VITE_DEN_API_BASE_URL, so Cloud calls are never CORS-blocked and stale localStorage base URLs are cleared on loadtmp/dev-headless-web.json (owner-only, 0600), and allows browser calls to the local server only from the web app's own origins — not every site you visit5178, server 8778; falls back to free ports when taken, override with OPENWORK_WEB_PORT / OPENWORK_PORT)--replace forces a restart--detach to run the whole stack independent of the invoking shell (recommended for agents): it starts detached, waits for health, prints the URLs, and exitsOpen the printed Web URL. Cloud sign-in in headless web uses the copy/paste handoff (hosted Den cannot redirect session grants back to http://127.0.0.1):
Point Den at a local stack with OPENWORK_DEV_DEN_PROXY_TARGET=http://127.0.0.1:3005 while pnpm dev:web-local is running. Set OPENWORK_DEV_HEADLESS_WEB_DEN_PROXY=0 to disable the Den wiring.
(top 30 of 67)
TypeScript
77.2%
JavaScript
19.8%
The open-source alternative to Claude Cowork (powered by opencode)
23,472
stars
4,457
commits
TypeScript
primary language
Sep 11, 2026
updated
OpenWork is a free, open-source desktop app made for sharing AI workflows. It is an open-source alternative to Claude Cowork and Codex for macOS, Windows, and Linux.
Add one OpenWork MCP to Codex, Claude Code, Cursor, or another compatible agent and reuse the same skills, MCPs, and connected services across your tools, teammates, and machines. Create something once, share it with coworkers or friends, or keep it for yourself.
The desktop app is there when you want a dedicated workspace, but it is not required. You can use OpenWork from the agent you already have. For larger organizations, the admin interface lets you publish capabilities, manage access, and configure shared or per-user connections.
Already use an AI agent? Copy this prompt and paste it into Claude Code, Cursor, Codex, ChatGPT, or any agent that can run commands on your computer.
Install OpenWork on my computer, set up my first workspace, and open it ready to use. Follow the steps in https://openworklabs.com/start.md?v=hero
The OpenWork MCP brings your assigned skills, plugins, MCP connections, Google Workspace, and Microsoft 365 capabilities into any compatible agent.
It exposes two tools: search_capabilities finds what you can use, and execute_capability runs it. After adding the MCP, your client opens a browser so you can sign in and choose your OpenWork organization.
codex mcp add openwork --url https://api.openworklabs.com/mcp/agent
claude mcp add --transport http openwork https://api.openworklabs.com/mcp/agent
Add this to opencode.json:
{
"mcp": {
"openwork": {
"type": "remote",
"enabled": true,
"url": "https://api.openworklabs.com/mcp/agent",
"oauth": {}
}
}
}
Use this remote MCP server URL:
https://api.openworklabs.com/mcp/agent
OpenWork Den is the control plane for managing OpenWork across a team or organization.
For one checkout, keep using pnpm dev; with no extra environment variables it reuses the existing shared dev profile.
To run multiple git worktrees at once, use:
pnpm dev:worktree
That sets OPENWORK_DEV_PROFILE=auto, derives a stable profile name from the worktree path, lets Electron choose a free CDP port, and asks Vite for a free dev-server port. You can also choose a named profile, for example OPENWORK_DEV_PROFILE=my-feature OPENWORK_ELECTRON_REMOTE_DEBUG_PORT=0 PORT=0 pnpm dev.
dev:worktree also defaults OPENWORK_ELECTRON_USE_MOCK_KEYCHAIN=1. A brand-new profile has no stored credentials, so on macOS the real keychain prompts as soon as Chromium persists an authenticated cookie, and that modal blocks Electron's main loop until it is dismissed. Set OPENWORK_ELECTRON_USE_MOCK_KEYCHAIN=0 if you specifically want the system keychain in an isolated profile.
Dev startup prints a banner like [openwork] dev profile=... cdp=http://127.0.0.1:9223; use it to find the profile directory and pass the CDP URL to local tooling.
If a second instance cannot get the profile lock it now says so and exits, instead of lingering with an open CDP port and no window.
To run the OpenWork UI in a browser against a local openwork-server (no desktop shell):
pnpm dev:headless-web
This is an isolated launcher:
tmp/headless-server.json and never reads ~/.config/openwork/server.json--replaceopenwork-server with a stable owner bearer forced into the UI. Crash-restarts reuse that bearer so open tabs keep working; --replace mints fresh tokens (pass --keep-tokens to preserve them). The privileged host token stays on the server process and is never inlined into the Vite bundle./api/den (forwarded to the Den control plane) and the app pins its Den API there via VITE_DEN_API_BASE_URL, so Cloud calls are never CORS-blocked and stale localStorage base URLs are cleared on loadtmp/dev-headless-web.json (owner-only, 0600), and allows browser calls to the local server only from the web app's own origins — not every site you visit5178, server 8778; falls back to free ports when taken, override with OPENWORK_WEB_PORT / OPENWORK_PORT)--replace forces a restart--detach to run the whole stack independent of the invoking shell (recommended for agents): it starts detached, waits for health, prints the URLs, and exitsOpen the printed Web URL. Cloud sign-in in headless web uses the copy/paste handoff (hosted Den cannot redirect session grants back to http://127.0.0.1):
Point Den at a local stack with OPENWORK_DEV_DEN_PROXY_TARGET=http://127.0.0.1:3005 while pnpm dev:web-local is running. Set OPENWORK_DEV_HEADLESS_WEB_DEN_PROXY=0 to disable the Den wiring.
(top 30 of 67)
TypeScript
77.2%
JavaScript
19.8%