{"slug": "andrew-ng-ships-open-coworker-desktop-ai-agent", "title": "Andrew Ng ships Open CoWorker desktop AI agent", "summary": "Andrew Ng released Open Coworker, a desktop AI agent built on aisuite that can perform tasks like deep research, file reading, and messaging. The open-source tool supports multiple LLM providers and runs locally, with downloads available for macOS and Windows.", "body_md": "An AI agent that lives on your desktop, built on aisuite.OpenCoworker is a desktop AI agent that can not only chat, but also do deep research and carry out tasks for you on your computer. It can read files (with permission) to gain context, read/send messages (slack, email, etc.), and create real deliverables like PDF reports, documents, spreadsheets. It also supports scheduled automations, such as providing you a daily news summary.\n\nRequires bringing your own API key (OpenAI, Anthropic, Google) or run fully local with Ollama. Your data stays on your machine.\n\n⬇ Download for macOSmacOS 13+ (Apple Silicon)\n\n⬇ Download for WindowsWindows 10/11 (x64) ·\n\n[— install, connect a model, first tasks, automations.]Quickstart:Its source lives in this repository under\n\n`platform/`\n\n— a working reference for building your own agent harness on aisuite.\n\n`aisuite`\n\nis a lightweight Python library for building with LLMs, in two layers: a unified **Chat Completions API** across providers, and an **Agents API** with tools and toolkits on top. This repo is also home to **OpenCoworker**, a desktop AI coworker built using aisuite:\n\n```\n┌───────────────────────────────────────────────┐\n│                 OpenCoworker                  │   agent harness for doing everyday tasks\n├───────────────────────────────────────────────┤\n│        Agents API  ·  Toolkits  ·  MCP        │   build agents across multiple LLMs\n├───────────────────────────────────────────────┤\n│             Chat Completions API              │   one API across multiple LLM providers\n├────────┬───────────┬────────┬────────┬────────┤\n│ OpenAI │ Anthropic │ Google │ Ollama │ Others │\n└────────┴───────────┴────────┴────────┴────────┘\n```\n\n— a unified, OpenAI-style interface for[Chat Completions API](#chat-completions)*OpenAI, Anthropic, Google, Mistral, Hugging Face, AWS, Cohere, Ollama, OpenRouter*, and more. Swap providers by changing one string.— give models real Python functions as tools, run multi-turn loops, attach ready-made toolkits (files, git, shell) or any MCP server, and govern it all with tool policies.[Agents API · Toolkits · MCP](#agents)— a desktop AI coworker built using aisuite, shipped as an app for everyday tasks.[OpenCoworker](/andrewyng/aisuite/blob/main/docs/opencoworker-quickstart.md)\n\nInstall the base package, or include the SDKs of the providers you plan to use:\n\n```\npip install aisuite               # base package, no provider SDKs\npip install 'aisuite[anthropic]'  # with a specific provider's SDK\npip install 'aisuite[all]'        # with all provider SDKs\n```\n\nYou'll also need API keys for the providers you call — the [Chat Completions quickstart](/andrewyng/aisuite/blob/main/docs/chat-completions-quickstart.md) covers key setup and your first calls.\n\nDownload the installer and bring your own API key (or run local models with Ollama):\n\n[ ⬇ macOS (Apple Silicon)](https://github.com/andrewyng/aisuite/releases/latest/download/OpenCoworker-macos-arm64.dmg) ·\n\n[·](https://github.com/andrewyng/aisuite/releases/latest/download/OpenCoworker-windows-setup.exe)\n\n**⬇ Windows 10/11 (x64)**[OpenCoworker quickstart](/andrewyng/aisuite/blob/main/docs/opencoworker-quickstart.md)\n\nThe chat API provides a high-level abstraction for model interactions. It supports all core parameters (`temperature`\n\n, `max_tokens`\n\n, `tools`\n\n, etc.) in a provider-agnostic way, and standardizes request and response structures so you can focus on logic rather than SDK differences.\n\nModel names use the format `<provider>:<model-name>`\n\n; aisuite routes the call to the right provider with the right parameters:\n\n``` python\nimport aisuite as ai\nclient = ai.Client()\n\nmodels = [\"openai:gpt-4o\", \"anthropic:claude-3-5-sonnet-20240620\"]\n\nmessages = [\n    {\"role\": \"system\", \"content\": \"Respond in Pirate English.\"},\n    {\"role\": \"user\", \"content\": \"Tell me a joke.\"},\n]\n\nfor model in models:\n    response = client.chat.completions.create(\n        model=model,\n        messages=messages,\n        temperature=0.75\n    )\n    print(response.choices[0].message.content)\n```\n\n**→ Quickstart:** [docs/chat-completions-quickstart.md](/andrewyng/aisuite/blob/main/docs/chat-completions-quickstart.md) — install, key setup, local models, and more examples.\n\naisuite turns tool calling into a one-liner: pass plain Python functions and it generates the schemas, executes the calls, and feeds results back to the model.\n\n``` python\ndef will_it_rain(location: str, time_of_day: str):\n    \"\"\"Check if it will rain in a location at a given time today.\n\n    Args:\n        location (str): Name of the city\n        time_of_day (str): Time of the day in HH:MM format.\n    \"\"\"\n    return \"YES\"\n\nclient = ai.Client()\nresponse = client.chat.completions.create(\n    model=\"openai:gpt-4o\",\n    messages=[{\n        \"role\": \"user\",\n        \"content\": \"I live in San Francisco. Can you check for weather \"\n                   \"and plan an outdoor picnic for me at 2pm?\"\n    }],\n    tools=[will_it_rain],\n    max_turns=2  # Maximum number of back-and-forth tool calls\n)\nprint(response.choices[0].message.content)\n```\n\nWith `max_turns`\n\nset, aisuite sends your message, executes any tool calls the model requests, returns the results to the model, and repeats until the conversation completes. `response.choices[0].intermediate_messages`\n\ncarries the full tool interaction history if you want to continue the conversation.\n\nPrefer full manual control? Omit `max_turns`\n\nand pass OpenAI-format JSON tool specs — aisuite returns the model's tool-call requests and you run the loop yourself. See `examples/tool_calling_abstraction.ipynb`\n\nfor both styles.\n\nFor longer-running, structured work there is a first-class Agents API: declare an agent once, run it with a `Runner`\n\n, and attach **toolkits** — prebuilt, sandboxed tool families for files, git, and shell:\n\n``` python\nimport aisuite as ai\nfrom aisuite import Agent, Runner\n\nagent = Agent(\n    name=\"repo-helper\",\n    model=\"anthropic:claude-sonnet-4-6\",\n    instructions=\"You are a careful repo assistant. Use your tools to answer from the code.\",\n    tools=[*ai.toolkits.files(root=\".\"), *ai.toolkits.git(root=\".\")],\n)\n\nresult = Runner.run(agent, \"What changed in the last commit? Summarize in 3 bullets.\")\nprint(result.final_output)\n```\n\nThe Agents API also gives you the pieces a production harness needs:\n\n**Tool policies**—`RequireApprovalPolicy`\n\n, allow/deny lists, or your own callable deciding which tool calls run.**State stores**— persist and resume runs (in-memory, file, or Postgres) and continue conversations across processes.** Artifacts & tracing**— capture what an agent produced and every step it took along the way.\n\naisuite natively supports the [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro), so any MCP server's tools can be handed to a model without boilerplate (`pip install 'aisuite[mcp]'`\n\n):\n\n```\nclient = ai.Client()\nresponse = client.chat.completions.create(\n    model=\"openai:gpt-4o\",\n    messages=[{\"role\": \"user\", \"content\": \"List the files in the current directory\"}],\n    tools=[{\n        \"type\": \"mcp\",\n        \"name\": \"filesystem\",\n        \"command\": \"npx\",\n        \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/directory\"]\n    }],\n    max_turns=3\n)\nprint(response.choices[0].message.content)\n```\n\nFor reusable connections, security filters, and tool prefixing, use the explicit `MCPClient`\n\n.\n\n**→ Quickstart:** [docs/agents-quickstart.md](/andrewyng/aisuite/blob/main/docs/agents-quickstart.md) — manual tool handling, the full Agents API, policies, state stores, and MCP in depth.\n\nNew providers can be added by implementing a lightweight adapter. The system uses a naming convention for discovery:\n\n| Element | Convention |\n|---|---|\nModule file |\n`<provider>_provider.py` |\nClass name |\n`<Provider>Provider` (capitalized) |\n\nExample:\n\n```\n# providers/openai_provider.py\nclass OpenaiProvider(BaseProvider):\n    ...\n```\n\nThis convention ensures consistency and enables automatic loading of new integrations.\n\nContributions are welcome. Please review the [Contributing Guide](https://github.com/andrewyng/aisuite/blob/main/CONTRIBUTING.md) and join our [Discord](https://discord.gg/T6Nvn8ExSb) for discussions.\n\nReleased under the **MIT License** — free for commercial and non-commercial use.", "url": "https://wpnews.pro/news/andrew-ng-ships-open-coworker-desktop-ai-agent", "canonical_source": "https://github.com/andrewyng/aisuite", "published_at": "2026-06-16 22:17:06+00:00", "updated_at": "2026-06-16 22:30:37.761918+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "ai-products", "large-language-models", "developer-tools"], "entities": ["Andrew Ng", "Open Coworker", "aisuite", "OpenAI", "Anthropic", "Google", "Ollama"], "alternates": {"html": "https://wpnews.pro/news/andrew-ng-ships-open-coworker-desktop-ai-agent", "markdown": "https://wpnews.pro/news/andrew-ng-ships-open-coworker-desktop-ai-agent.md", "text": "https://wpnews.pro/news/andrew-ng-ships-open-coworker-desktop-ai-agent.txt", "jsonld": "https://wpnews.pro/news/andrew-ng-ships-open-coworker-desktop-ai-agent.jsonld"}}