OpenWork helps users run agents, skills, and MCP. It is an open-source alternative to Claude Cowork/Codex as a desktop app.
OpenWork is a practical control surface for agentic work:
- Run local and remote agent workflows from one place.
- Use OpenCode capabilities directly through OpenWork.
- Compose desktop app, server, and messaging connectors without lock-in.
- Treat the OpenWork app as a client of the OpenWork server API surface.
- Connect to hosted workers through a simple user flow:
Add a worker->Connect remote.
- Local-first, cloud-ready: OpenWork runs on your machine in one click and can connect to cloud workflows when needed.
- Server-consumption first: the app should consume OpenWork server surfaces (self-hosted or hosted), not invent parallel behavior.
- Composable: use the desktop app, WhatsApp/Slack/Telegram connectors, or server mode based on the task.
- Ejectable: OpenWork is powered by OpenCode, so anything OpenCode can do is available in OpenWork, even before a dedicated UI exists.
- Sharing is caring: start solo, then share quickly; one CLI or desktop command can spin up an instantly shareable instance.
If you open a PR, you must run tests and report what you ran (commands + result).
To maximize merge speed, include evidence of the end-to-end flow:
- Ideally: attach a short video/screen recording showing the flow running successfully.
- Otherwise: screenshots are acceptable, but video is preferred.
If you cannot run tests or capture the video, say so explicitly and explain why, and include the exact commands/steps for the reviewer to reproduce.
- Never use
any, typecasts, oras, unless 100% necessary or specifically instructed.
- Use pnpm.
- Never use npm or yarn.
- Use components from @/components when possible.
- When creating new components, we prefer using shadcn/ui with (Base UI).
- Assume most end users of OpenWork are non-technical.
When uncertain, prefer: Tailwind, TypeScript, React, shadcn/ui (Base UI), TanStack Query, Zustand, Zod, Drizzle, Better-Auth.
- Always strive for concise, simple solutions.
- If a problem can be solved in a simpler way, propose it.
- Use the smallest possible diff to make a change. Then think of how to make it smaller and do that again.
- Avoid fallback expressions when types or control flow already guarantee a value.
- If asked to do too much work at once, stop and state that clearly.