DuoDuo docs

How DuoDuo works.

What DuoDuo is, how it learns, and the ways you reach it. Where there is something to do, these pages hand it to your DuoDuo.

Talk to the same DuoDuo from a chat app, another assistant, a room, or your pocket.

Reach

Channels

Every way in at a glance, with Feishu/Lark and your editor in full.

Channels let you reach the same DuoDuo installation from Feishu/Lark, an editor, a room you speak in, or the other AI assistants you already use. Each channel has its own status and configuration.

DuoDuo holds a teal route running through three openings in one folding doorway.

Connecting one is DuoDuo's job. The duoduo-channel-admin skill carries installing, starting, inspecting and configuring channels for the version you run (see Host Operations). Ask in plain language. Wherever a credential is needed, you type it into the host terminal; it stays on the machine, outside chat and source control.

Feishu/Lark#

Feishu/Lark is DuoDuo in your team's chat. Ask DuoDuo to set it up: it installs and starts the channel, and walks you through the part that is yours, creating the bot in Feishu/Lark's developer console and entering its App ID and App Secret on the host.

Owner DM#

The configured owner's direct message is the simplest place to begin. Its first message can bind to the default workspace automatically. After that, /setup stays locked there, so the owner always has one reliable way back in.

Groups and secondary DMs#

Use /setup to connect a group or another direct message. A group can point at the workspace root or one project. A secondary DM can only choose a narrower project.

How a reply looks#

Every finished reply carries a one-line footer: tokens in and out with the cache share, context size, the model that served the turn, and the cost. Whatever a runtime does not report is left out, and the line renders shorter. There is nothing to configure.

The process card is optional. It streams status while the turn runs and names the tools as they are called, so a long answer shows its work while it runs. There are three settings:

  • Off, the default: one card, written when the reply is ready.
  • Replace: the process card becomes the answer when the turn ends. One card, start to finish.
  • Keep: the finished process card stays as a trace and the answer arrives as its own card.

Tell DuoDuo which you want, for every Feishu/Lark chat or just one. It sets process_card in the channel's descriptor, which is read on every message, so the change applies to the next message without a restart. A card only appears for turns that channel started.

When card buttons stop working#

Ask DuoDuo to run the Feishu/Lark doctor. It checks the three layers a card action passes through (the developer-console subscription, the app release, and encryption). It has to stop the channel while it does, so the bot is briefly away.

ACP editor bridge#

ACP brings DuoDuo into an editor that speaks the Agent Client Protocol. Ask DuoDuo to install the bridge; it needs no credentials. Each editor pane maps to one daemon session, the editor provides the workspace directly, and closing the pane releases that session cleanly.

Ambient#

Ambient is DuoDuo in a room: it listens all day and answers only what was said to it. It is a channel with a backend, the cerebellum that does its hearing, and the DuoDuo iPhone app is its app. Ambient covers how it works, the reference cerebellum and its configurations, and the skill that has DuoDuo set it up.

Tether#

Tether hands DuoDuo's context over MCP to the assistants you already use (the Grok app, Dots in ChatGPT, Meta's Muse, Claude Code, Codex), so each of them can answer as DuoDuo. Every connection needs your passkey. Tether covers how it works, what a connected assistant can reach, and the skill that has DuoDuo set it up.

Channels and upgrades#

A channel is a separate process talking to the daemon, so it has to be upgraded alongside it. When you ask DuoDuo to upgrade, duoduo upgrade does both: it reinstalls each channel, restarts the daemon, and brings the channels back. The order means a channel whose download failed keeps running its previous build instead of being left stopped.

A channel left on an older build than the daemon fails quietly: the bot keeps receiving messages and answers none. If a channel goes silent after an upgrade, ask DuoDuo to check that first.

Kind and instance configuration#

Each channel is shaped by two files. A kind descriptor sets defaults for every channel of one kind; an instance descriptor overrides one specific room, DM or editor surface. To change how a channel behaves, tell DuoDuo what should be different and where. It finds both files for the running install and edits them without disturbing the frontmatter, comments and prompt text already there.