← Back to archive

Repo of the Day

CopilotKit/OpenDuet

Published: Oct 30, 2026

Open repository ↗

An Open Source template for a proactive AI agent that gets your work done and keeps you in the loop

Summary

OpenDuet is a TypeScript template for a proactive, self-hosted AI agent that can contact people first, continue work on its own computer, and pause for approval before consequential actions. Built on OpenBot and CopilotKit, it adds triage, morning briefs, scheduled routines, browser and workspace access, reusable skills, governed connectors, and persistent threads and memory.

What it is useful for

OpenDuet is aimed at workflows where an assistant should do more than answer a request. For example, it can read Gmail and Google Calendar, separate “needs you” from “can wait,” and publish a daily morning brief. It can carry out a task in a dedicated Chromium browser, shell, and /workspace, then report when the task is done or needs input.

The approval boundary is central to real use. Actions that send messages, make payments, sign documents, or delete data are shown to the user, who can allow once, always allow, or refuse. Messages to other people always require approval, while passwords entered through the masked secret box are not exposed to the conversation.

Other documented uses include:

  • Scheduling recurring work under /routines.
  • Calling reusable instructions as skills, such as /research-public-web, after an administrator configures a research provider.
  • Using governed MCP connectors such as Google Drive and Notion.
  • Creating designs, dashboards, slides, documents, or web pages through the Make interface.

The project is explicitly in early, active development. It requires CopilotKit Intelligence for threads and memory, and the server will not start without its key. Google Workspace needs a registered OAuth client, while team sign-in and Slack or Microsoft Teams rely on OpenBot. No hosted OpenDuet deployment guide or OpenDuet container image is published yet; the repository’s local Quick start is the supported path today.

How engineers can use it

You need Docker, Bun 1.3 or newer, Node for npx, a model key, and a CopilotKit Intelligence project. From the repository root, the README documents:

git clone https://github.com/CopilotKit/OpenDuet.git
cd OpenDuet
cp .env.example .env
bun install
npx --yes copilotkit@latest login
npx --yes copilotkit@latest project select
bun openbot/scripts/setup-learning.ts

The project-selection step records the Intelligence key; the final script configures the required Learning container. Put OPENAI_API_KEY=sk-... in .env, or follow the README’s Anthropic variables, then launch:

bash scripts/start.sh

Open http://localhost:3010. The start script brings up Postgres and the Bot computers in Docker, applies migrations, and starts the API, worker, and app. The in-app setup checklist reports missing model, Google, notification, and Intelligence dependencies; bash scripts/stop.sh stops the installation.