duoduo-channel-admin
Duoduo Channel Admin
Host-mode channel lifecycle and channel-facing configuration. Route by kind (Feishu / WeChat / ACP) and by task (install / configure / diagnose / reset).
Start with discovery
Before making any change, run the smallest read-only probe:
duoduo daemon status # confirm host mode, daemon alive
duoduo daemon config # resolve kernel_dir, runtime_dir, defaults
duoduo channel list # see installed plugins + running state
When editing a specific channel instance, always inspect the current descriptor first:
cat <runtime_dir>/var/channels/<channel_id>/descriptor.md
Route by kind
Each channel kind has its own reference. Load only the one that matches the request to avoid polluting context with unrelated detail.
- Feishu (飞书) → read references/feishu.md.
Covers install, credentials, v0.5
/setuprouting matrix, main session contract (owner DM auto-spawn),FEISHU_BOT_OWNERsecurity hygiene, 200340 triage, reset walkthrough, stale-card guard, accepted v0.5 limits. - WeChat (微信) → read references/wechat.md. Covers install, start, QR login, state-dir resolution.
- ACP (编辑器) → read references/acp.md. Covers install, editor integration semantics.
When the request is "diagnose a misbehaving Feishu channel" and the symptom isn't obvious, read references/diagnose-feishu.md — it walks a decision tree (card errors, /setup refusals, stale history, stranger access, ownership drift) to the right remediation.
Configure channel behavior
Descriptor model: kind-level for defaults applied to every channel of a kind; instance-level for one specific channel.
- Kind descriptor:
<kernel_dir>/config/<kind>.md - Instance descriptor:
<runtime_dir>/var/channels/<channel_id>/descriptor.md
Editable keys by hand:
new_session_workspaceprompt_modetime_gap_minutesstreamallowedToolsdisallowedToolsadditionalDirectories
v0.5 adds three keys normally written by channel.spawn (not hand-
edited): runtime, bound_by, bound_at. See
references/channel-config-model.md
for the full list and the new_session_workspace priority rules.
For frontmatter edits that must preserve Markdown body and comments, use scripts/patch_markdown_frontmatter.py.
Reset a bound channel
When a channel's descriptor, session, or message history is stale and the user wants a clean slate:
bash scripts/reset-feishu-session.sh --channel-id feishu-<chat_id>
duoduo channel feishu stop && duoduo channel feishu start
The script calls duoduo session archive <session_key> for every
session that references the channel. That RPC moves the session dir +
ingress + outbox records + channel descriptor under
var/<kind>-archive/ (timestamped, reversible via mv). The plugin
restart is mandatory — it caches subscription state in memory.
Read references/reset-feishu-session.md for what the script cleans and why each piece matters. When users report "bot quotes old messages after I reset", they hit the reason this script exists.
Prompt editing
- The Markdown body of
kernel/config/<kind>.mdis the kind prompt. - The Markdown body of
descriptor.mdis the instance prompt. - Instance frontmatter and prompt override kind defaults.
- Preserve bootstrap-seeded guidance comments when possible.
Operating rules
- Prefer the smallest scope: kind-level for defaults, instance-level for a single room or session surface.
- After editing
~/.config/duoduo/.envchannel credentials, restart the affected channel process (not just the daemon). - After installing a new plugin, verify with
duoduo channel listandduoduo channel <type> status. - If a channel fails after credentials, install state, and runtime config all look correct, treat it as a likely product or plugin issue — see ../duoduo-admin/references/issue-reporting.md.
- If the request is really about telemetry, cadence, debug logs, or
Codex, hand off to
duoduo-runtime-admin.
More from openduo/duoduo
duoduo-admin
Explain and manage a host-mode duoduo installation after onboarding. Use when the user asks how duoduo works, how stdio/daemon/channel/session fit together, where duoduo stores config and state, how to inspect current setup, how to upgrade duoduo itself (including migrating to v0.5), where something lives on disk (kernel_dir, runtime_dir, .env, descriptor.md), how to archive or recover a specific session (`duoduo session archive`, sessions-archive directory, restoring an archived session), or for broad 'configure duoduo' / 'fix my duoduo' requests that haven't narrowed to a specific channel or runtime setting yet. Also trigger for Chinese: 帮我理解 duoduo, duoduo 是怎么工作的, 看看我现在的 duoduo 配置, 帮我管理 duoduo, 升级 duoduo, 升级到 v0.5 要注意什么, duoduo 哪个路径存什么, 归档 session, 删掉 session, 恢复归档 session.
39duoduo-runtime-admin
Manage host-mode duoduo daemon-level settings and diagnostics. Use when the request involves: inspecting daemon status/config/logs, Codex runtime setup (auto-detected from v0.5: install codex + run `codex login`) or sandbox (ALADUO_CODEX_SANDBOX), log verbosity (ALADUO_LOG_LEVEL), telemetry persistence, cadence interval, other ALADUO_* env keys in ~/.config/duoduo/.env, running-daemon diagnostics, refreshing subconscious partition prompts from a published duoduo tag, or archiving / pruning the usage ledger (var/usage growing too large). Also trigger for Chinese: 启用 codex runtime, 打开 debug log, 关闭 telemetry, 调 cadence 频率, 看看 duoduo daemon 配置, 查 daemon 日志, 升级潜意识, 刷新潜意识, 更新分区提示词, 同步 subconscious, refresh subconscious, update partition prompts, 归档 usage, 清理 usage, 缩 var/usage, 保留最近 N 周 usage. This skill does NOT handle channel-kind settings (Feishu/WeChat/ACP) — those live in duoduo-channel-admin.
39