{"id":64505,"date":"2026-07-23T20:20:29","date_gmt":"2026-07-24T00:20:29","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=64505"},"modified":"2026-07-23T20:20:29","modified_gmt":"2026-07-24T00:20:29","slug":"andrew-ng-openworker-ai","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/andrew-ng-openworker-ai\/","title":{"rendered":"Andrew Ng Releases OpenWorker AI That Delivers Finished Work"},"content":{"rendered":"<p>Andrew Ng has released OpenWorker, an open-source desktop agent that produces finished work rather than conversation. OpenWorker asks the user for an outcome, not a prompt: a polished document, a Slack reply containing the actual numbers, an updated calendar, a triaged inbox. It then breaks that outcome into steps, works across local files and connected apps, and checks in before anything consequential. This marks a deliberate shift from the chat-based interaction paradigm that has dominated consumer AI tools since the launch of ChatGPT, positioning the agent as a reliable executor of complete tasks rather than a conversational partner.<\/p>\n<h2>The architecture is four layers, and all of them run on your machine<\/h2>\n<p>The repository contains 119 Python files (~32,400 lines) under <code>coworker\/<\/code>codecodecodecodecode, 149 TypeScript\/TSX files under <code>surfaces\/gui\/<\/code>codecodecodecodecode, and 78 backend test modules. The stack breaks down as follows:<\/p>\n<ul>\n<li><strong>Desktop shell<\/strong> \u2014 a Tauri 2 native window wrapping a React 18 UI. The bundle identifier is <code>com.openworker.desktop<\/code>codecodecodecodecode, and the shell supervises the Python server itself.<\/li>\n<li><strong>Local agent server<\/strong> \u2014 Python 3.10+ on FastAPI and uvicorn, binding to <code>127.0.0.1:8765<\/code>codecodecodecodecode by default. The example config caps a turn at 12 model\u2194tool iterations.<\/li>\n<li><strong>Capability and connector layer<\/strong> \u2014 vetted local tools (files, git, ripgrep-backed search, shell, todo) plus hosted integrations plus MCP (Model Context Protocol).<\/li>\n<li><strong>Model router<\/strong> \u2014 one interface over native, OpenAI-compatible, reseller and local providers.<\/li>\n<\/ul>\n<p>The engine is built on <a href=\"https:\/\/github.com\/andrewyng\/aisuite\" target=\"_blank\" rel=\"noopener\">aisuite<\/a>, Andrew Ng\u2019s provider-agnostic LLM library. This design means the entire system \u2014 from the user interface through the agent loop to the model calls \u2014 runs locally on the user&#8217;s machine. No cloud service processes the user&#8217;s data unless they explicitly connect a third-party API. The desktop shell, built with Tauri 2, provides a native experience on macOS, <a href=\"https:\/\/www.microsoft.com\/windows\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Windows<\/a>, and Linux, while the React 18 frontend delivers a modern, responsive interface.<\/p>\n<h2>What is OpenWorker and how does it differ from traditional AI assistants?<\/h2>\n<p>OpenWorker is an open-source desktop agent that produces finished work \u2014 not conversation. Unlike conventional chatbots that respond to prompts with text, OpenWorker is designed to take an outcome specification (e.g., &#8220;draft a quarterly report in <a href=\"https:\/\/www.google.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Google<\/a> Docs using data from the attached spreadsheet and send a Slack summary to the team&#8221;) and then autonomously break that outcome into executable steps, interact with local files and connected applications, and deliver the completed artifact. The system checks in with the user before performing any consequential action \u2014 such as writing to a file, executing a shell command, or sending a message \u2014 unless the user has configured a higher permission mode. This outcome-driven workflow represents a fundamental rethinking of how AI agents should interact with users: instead of mediating every action through a chat window, the agent plans and executes in the background, only surfacing to request approval or clarify ambiguity.<\/p>\n<h2>Four risk classes and five permission modes control every action<\/h2>\n<p>OpenWorker introduces a safety system built around four risk classes and five permission modes. The risk classes are <code>read<\/code>codecodecodecodecode, <code>write_local<\/code>codecodecodecodecode, <code>exec<\/code>codecodecodecodecode, and <code>external<\/code>codecodecodecodecode. Each tool and connector is assigned a risk class, and the user&#8217;s chosen permission mode determines what the agent can do without explicit approval.<\/p>\n<p>The five permission modes are:<\/p>\n<ul>\n<li><strong>Discuss<\/strong> \u2014 The agent can only read data and discuss plans. It cannot write, execute, or contact external services.<\/li>\n<li><strong>Plan<\/strong> \u2014 Same as discuss but with the ability to generate a detailed plan that the user can review.<\/li>\n<li><strong>Interactive<\/strong> (default) \u2014 The agent can read freely, but must ask before writing to local files, executing shell commands, or performing external actions.<\/li>\n<li><strong>Auto<\/strong> \u2014 The agent can perform all actions automatically, with writes scoped to the workspace path.<\/li>\n<li><strong>Custom<\/strong> \u2014 The user defines a custom set of allowed actions per risk class, using an <code>auto_allow<\/code>codecodecodecodecode list.<\/li>\n<\/ul>\n<p>This granular control means users can start with a conservative mode like &#8220;discuss&#8221; to explore the agent&#8217;s planning capabilities, then gradually increase autonomy as they build trust. The system also supports per-workspace mode settings, so a user might run sensitive work in interactive mode while allowing automated mode for less critical tasks.<\/p>\n<h2>Model matrix: 30 curated models from 10 providers<\/h2>\n<p>OpenWorker ships with a curated matrix of 30 models, deliberately small and covering only current-generation, tool-calling models. The matrix includes:<\/p>\n<ul>\n<li><strong>OpenAI<\/strong>: <a href=\"https:\/\/overcentral.com\/en\/gpt-5-6-sol-reasoning-levels\/\" title=\"GPT-5.6 Sol Maps Five Reasoning Levels to Task Complexity\" data-iacss-internal=\"1\">GPT-5.6 Sol<\/a>, GPT-5.6 Terra, GPT-5.6 Luna, GPT-5.5<\/li>\n<li><strong>Anthropic<\/strong>: <a href=\"https:\/\/overcentral.com\/en\/anthropic-restores-claude-fable-5-access\/\" title=\"Anthropic Restores Claude Fable 5 Access on Wednesday\" data-iacss-internal=\"1\">Claude Fable 5<\/a>, Claude <a href=\"https:\/\/overcentral.com\/en\/claude-sonnet-5-beats-opus-4-8\/\" title=\"Claude Sonnet 5 beats Opus 4.8 on knowledge work benchmark\" data-iacss-internal=\"1\">Opus 4.8<\/a>, Claude Sonnet 4.6, Claude Haiku 4.5<\/li>\n<li><strong>Google<\/strong>: Gemini 3.1 Pro, Gemini 3.6 Flash, Gemini 2.5 Pro, Gemini 2.5 Flash<\/li>\n<li><strong>Direct vendors<\/strong>: GLM-5.2, DeepSeek V4 Flash, DeepSeek V4 Pro, Kimi K2.6, MiniMax M2.5, Qwen3 Max, Grok 4.3, Mistral Large<\/li>\n<li><strong>Together AI<\/strong>: Inkling, GLM-5.2, Kimi K2.7 Code, Kimi K2.6, DeepSeek V4 Pro, Llama 4 Maverick<\/li>\n<li><strong>Fireworks<\/strong>: GLM-5.2, Kimi K2.6, DeepSeek V4 Pro, Llama 4 Maverick<\/li>\n<\/ul>\n<p>Users can add any other model string manually, but the curated list ensures that only models known to perform well with tool calling are recommended. The model router handles the provider-specific API details, so users only need to provide their API keys \u2014 which are stored locally in a secret store and never placed in prompts or traces. For local inference, OpenWorker supports Ollama, requiring no API key at all.<\/p>\n<h2>35 connectors ship with published access copy<\/h2>\n<p>The connector layer provides 35 integrations that are available at launch, organized by category:<\/p>\n<ul>\n<li><strong>Messaging<\/strong>: Slack, Telegram, Discord, WhatsApp, Email (IMAP), Gmail, Outlook<\/li>\n<li><strong>Calendar &amp; files<\/strong>: Google Calendar, Google Drive, Dropbox, Box<\/li>\n<li><strong>Engineering<\/strong>: GitHub, GitLab, Jira, Linear, ClickUp, Confluence<\/li>\n<li><strong>CRM &amp; sales<\/strong>: HubSpot, Attio, Close, Apollo, Hunter<\/li>\n<li><strong>Docs &amp; design<\/strong>: Notion, Canva, Figma, DocuSign<\/li>\n<li><strong>Analytics<\/strong>: PostHog, Mixpanel, Amplitude<\/li>\n<li><strong>Business<\/strong>: Stripe, QuickBooks, Zendesk, Asana, monday.com<\/li>\n<li><strong>Web<\/strong>: Built-in browser<\/li>\n<\/ul>\n<p>Five more connectors are declared but not yet available: Datadog, Salesforce, PagerDuty, Descript, and Clay. Additionally, any MCP server can be plugged in on top using the same <code>mcpServers<\/code>codecodecodecodecode JSON format that Claude Desktop uses, with per-tool approval required. The model router also includes a keyless default web search via DuckDuckGo, with Tavily and Brave as optional alternatives.<\/p>\n<h2>How does the agent loop work?<\/h2>\n<p>The agent loop is the core of OpenWorker&#8217;s execution engine. When a user submits an outcome, the system first parses the request into a structured plan. The agent then iterates through a loop of model calls and tool invocations, with a default cap of 12 iterations per turn. At each step, the model may read files, search code, execute shell commands, or call connectors \u2014 all subject to the permission mode and risk class. The agent logs every action, and the user can inspect the trace at any time. When the agent determines that the outcome has been achieved, it presents the finished work to the user. If the user is not satisfied, they can provide feedback and the agent will adjust its approach.<\/p>\n<p>This loop is powered by aisuite, which provides a single interface over multiple model providers. The agent uses the model&#8217;s native tool-calling capability to decide which tool to invoke and with what parameters. The local tools \u2014 files, git, ripgrep-backed search, shell, and todo \u2014 are vetted to ensure they work reliably with the agent loop. The system also includes a code files tool that understands common programming language structures, making it particularly useful for developers.<\/p>\n<h2>Local-first architecture ensures privacy and offline capability<\/h2>\n<p>One of the most significant design decisions in OpenWorker is that the entire system runs on the user&#8217;s machine. The Python server, the Tauri shell, and the React UI all execute locally. The only external connections are the model API calls (which go directly to the provider&#8217;s API endpoint using the user&#8217;s own key) and the connector integrations (which use the user&#8217;s OAuth tokens or API keys). No data passes through an OpenWorker-managed server. This local-first approach means the agent can work with sensitive files, internal codebases, and confidential communications without ever uploading them to a third party.<\/p>\n<p>The architecture also includes an optional Rust speech-to-text sidecar called <code>ocw-stt<\/code>codecodecodecodecode that runs Whisper fully offline, enabling voice input without any network dependency. The signed updater feed at <code>download.openworker.com\/latest.json<\/code>codecodecodecodecode ensures that users can receive updates through the native update mechanism without compromising the local-first security model.<\/p>\n<h2>Strategic implications for the AI agent market<\/h2>\n<p>OpenWorker enters a landscape where most AI agents are either cloud-based services or experimental open-source projects. By releasing a fully functional, open-source desktop agent that can be installed and run immediately, Andrew Ng is challenging the industry to move beyond chat interfaces. The emphasis on outcomes rather than prompts aligns with the growing recognition that the ultimate value of AI lies in task completion, not conversation.<\/p>\n<p>The open-source nature of OpenWorker \u2014 the entire repository is available on GitHub at <a href=\"https:\/\/github.com\/andrewyng\/openworker\" target=\"_blank\" rel=\"noopener\">andrewyng\/openworker<\/a> \u2014 means that developers can inspect, modify, and extend the agent. The use of aisuite as the model router allows users to switch between providers without changing their workflows. This flexibility could accelerate adoption among developers who have been hesitant to commit to a single AI vendor.<\/p>\n<p>The permission system, with its four risk classes and five modes, also sets a new standard for agent safety. By making the user the ultimate decision-maker for consequential actions, OpenWorker addresses one of the most persistent concerns about autonomous agents: the risk of unintended actions. The interactive mode, which is the default, strikes a balance between automation and control, requiring user approval for writes, shell commands, and external communications while allowing reads to proceed without interruption.<\/p>\n<h2>Practical applications and use cases<\/h2>\n<p>OpenWorker is designed to be useful across a wide range of professional activities. A product manager could ask the agent to &#8220;review the latest GitHub issues, identify the top three blockers, and draft a Jira epic for each.&#8221; A marketer could say &#8220;update the Q3 campaign report in Google Docs with the latest Stripe payment data and send a Slack summary to the team.&#8221; A developer could request &#8220;refactor the authentication module in the <code>coworker\/<\/code>codecodecodecodecode directory, run the tests, and create a pull request.&#8221;<\/p>\n<p>The local file system integration means the agent can work with any file on the user&#8217;s machine, including codebases, documents, and data files. The ripgrep-backed search tool provides fast, regex-capable searching across large codebases. The git integration allows the agent to create branches, stage changes, and commit work. The todo tool enables the agent to manage task lists within the agent&#8217;s own workspace.<\/p>\n<p>For users who need to collaborate with external services, the 35 connectors cover the most common business tools. The MCP client support means that any third-party tool that provides an MCP server can be integrated, extending the agent&#8217;s reach to virtually any service with an API.<\/p>\n<h2>Technical details: from Rust to React<\/h2>\n<p>The desktop shell, built with Tauri 2, provides a native window that launches and supervises the Python server. When the user opens OpenWorker, the Tauri shell starts the Python server process, initializes the React UI, and establishes a WebSocket connection between the frontend and the backend. The frontend communicates with the Python server over HTTP at <code>127.0.0.1:8765<\/code>codecodecodecodecode. The shell also handles updates, notifications, and system tray integration.<\/p>\n<p>The Python server, built on FastAPI and uvicorn, is the engine that runs the agent loop. It manages the tool registry, the permission gate, the scheduler, and the model router. The 78 backend test modules ensure that each component is tested independently. The 119 Python files under <code>coworker\/<\/code>codecodecodecodecode are organized into modules for tools, connectors, models, permissions, and the agent loop itself.<\/p>\n<p>The React 18 UI, with 149 TypeScript\/TSX files under <code>surfaces\/gui\/<\/code>codecodecodecodecode, provides a modern, responsive interface. Users can view the agent&#8217;s plan, see the current step, inspect the action history, and provide feedback. The UI also includes a dark mode, a settings panel for configuring API keys and permissions, and a workspace manager for organizing multiple projects.<\/p>\n<p>OpenWorker is available now as an open-source release under the repository at <a href=\"https:\/\/github.com\/andrewyng\/openworker\" target=\"_blank\" rel=\"noopener\">github.com\/andrewyng\/openworker<\/a>, tagged v0.1.6. The release includes pre-built binaries for macOS, Windows, and Linux, as well as instructions for building from source. The project is actively maintained by Andrew Ng&#8217;s team, and the community is encouraged to contribute connectors, tools, and improvements.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Andrew Ng has released OpenWorker, an open-source desktop agent that produces finished work rather than conversation. OpenWorker asks the user for an outcome, not a prompt: a polished document, a Slack reply containing the actual numbers, an updated calendar, a triaged inbox. It then breaks that outcome into steps, works across local files and connected [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":83819,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/64505.png","fifu_image_alt":"Andrew Ng Releases OpenWorker AI That Delivers Finished Work","footnotes":""},"categories":[349],"tags":[],"class_list":["post-64505","post","type-post","status-publish","format-standard","has-post-thumbnail","category-articles"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/64505.png","fifu_image_alt":"Andrew Ng Releases OpenWorker AI That Delivers Finished Work","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/64505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=64505"}],"version-history":[{"count":0,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/64505\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/83819"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=64505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=64505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=64505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}