The Problem
OpenWorker addresses the gap between conversational AI assistants and actual task completion. Most AI tools produce chat responses or to-do lists, leaving the user to do the real work: drafting the document, sending the Slack message, updating the calendar. OpenWorker positions itself as an "AI coworker" that runs on the desktop, executes multi-step tasks across files and connected applications, and delivers finished artifacts rather than instructions.
What This Does
The repo implements a desktop application with a local Python agent server (coworker/server/app.py) and a native GUI shell (surfaces/gui/). The core engine (coworker/engine.py) orchestrates agents that break tasks into steps and execute them via a connector system. The coworker/connectors/ directory contains 25+ integrations—GitHub, Slack, Gmail, Google Calendar, HubSpot—plus MCP support for external tools.
The system is approval-gated: consequential actions like sending messages or running shell commands require user confirmation. The coworker/automation/ module handles scheduled recurring tasks. Model access is bring-your-own-key, supporting OpenAI, Anthropic, Google, and local models via Ollama.
How It Is Wired
Execution starts at coworker/cli.py or the GUI's server entry point. The server receives a task, coworker/engine.py decomposes it, and coworker/agents/registry.py selects the appropriate agent. Agents call tools through coworker/connectors/tools.py, which routes to specific connectors like gmail_accounts.py or slack_addr.py. The coworker/connectors/gateway.py handles external API calls.
Key routing functions: coworker/engine.py orchestrates task flow; coworker/connectors/tools.py dispatches to integrations. The approval system lives in coworker/approval.py and gates write operations. The coworker/automation/scheduler.py handles scheduled runs.
The wiring has not been fully mapped for this repository—the module graph and call paths are incomplete. What is clear: the Python backend is the control plane, the Rust component (stt/) handles speech-to-text, and the TypeScript/React GUI (surfaces/gui/src-tauri/) is a Tauri shell.
How To Use It
Setup: The README points to prebuilt installers for macOS (Apple Silicon) and Windows. For source builds, pyproject.toml implies pip/uv for Python, surfaces/gui/package.json implies npm for the GUI, and stt/Cargo.toml implies cargo for the Rust component.
Configuration: Model API keys are required. The README says to add a key in the app or point it at Ollama. The exact config file is coworker/config.py.
Running it: The README documents no CLI commands—the intended path is the desktop app. For development, coworker/cli.py is the Python entry point.
# Python backend (from repo root)
pip install -e .
python -m coworker.cli
# GUI (from surfaces/gui)
npm install
npm run dev
Real-World Use
A typical scenario: a user asks the agent to "prepare a customer brief for tomorrow's meeting." The engine breaks this into steps—gather data from HubSpot, pull recent emails from Gmail, draft the document, save it to the filesystem. Each step routes through coworker/connectors/tools.py to the relevant connector, and the final document lands as a file. The user approves the send if the task includes emailing it.
Code Health & Issues
Static analysis found one issue:
- Low/Security - Secret-shaped paths present in
coworker/secrets.pyandtests/test_secrets.py. Verify these are not committing credentials.
SDLC observations from the structure:
- Med - 242 test files exist but the repo has no documented test runner command in the README.
- Low - No
Dockerfileor containerization, limiting deployment options for the server component. - Low - The repo is a fork of
andrewyng/openworkerwith 0 stars; active upstream development may make this fork stale.
The Bottom Line
OpenWorker is a serious attempt at a desktop AI agent with real tool integration and approval gating. The architecture is sound—Python backend, connector abstraction, Tauri GUI—but the wiring is not fully documented and the fork has no community traction. Use it if you want a local, model-agnostic agent with Slack integration and scheduled tasks, but expect to read source to understand the full flow.