Skip to content
jklthinkingPublic

About

Self-hosted coordination for AI workers: per-task graphs, device/model timelines, progress receipts, and source-aware usage. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

110 stars

Watchers

0 watching

Forks

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Retinue (众卿) — self-hosted task board for humans and AI agents

License: AGPL-3.0-only Python 3.11+ MCP Self-hosted

English · 简体中文 · English demo · 中文演示

The dashboard now switches between English and 简体中文. The language preference is saved locally and preserves the selected task/page. User-authored task content is retained. See the English PRD, English screenshots and release notes, and English sharing draft.

Retinue (Chinese name 众卿, "the assembled ministers") is a self-hosted task board and orchestration hub where a mixed team of people and AI agents work the same cards. Every piece of work is one durable baton: a task card with a single holder, an acceptance check, and an append-only receipt chain. You run the board, agents claim work over MCP or HTTP, they write back, and you accept the card or send it back. There is no hosted control plane, no vendor account requirement, and no telemetry. The server-backed hub uses operator-managed local accounts and scoped credentials.

2026-10-07: model quota on Home

Version 0.3.0a5 is the first AGPL-3.0-only release. Task conversation histories remain behind an opt-in flag. Release notes. Manual quota refresh remains available.

Opt-in node quota collection and bilingual Home cards for Claude, Codex, Grok, Cursor and Kimi subscriptions, plus Moonshot API balance. See used percentages, reset time, report age and labelled last-successful data. Setup and API semantics · Update notes · Conversation timeline design. Existing servers require the explicit schema-26 migration; collectors stay off until enabled locally. The online demos show synthetic data only.

2026-10-03 English edition: visible collaboration

Version 0.3.0a1 brings the collaboration process into each task. See who delegated to whom, what each device/model worker reported, what it is waiting for, and which artifact supports the next handoff.

View What it explains
Home The original task flow, dispatch coordination, and session flow views
Per-task graph Explicit delegation, dependencies, baton movements, and review returns
Device/model timeline Recorded runs with identity snapshots and source labels
Module contributions Explicit functional assignments, reported work, remaining items, and artifact references
Node details and context Instructions, acceptance criteria, waiting owners, progress, evidence versions, and next-step intent
Operations and data quality Separate sources, reported usage coverage, receipt freshness, and retained history

Read-only cc-connect observers match native sessions to Claude records and deduplicate usage by stable deliveries. A worker is an execution identity; session transports and observers are listed separately. The operations view has one primary implementation, while the existing task and session modes remain available.

Boundaries: delegation does not launch a model, observation does not invent task progress, an executor's claim is not independent acceptance, and reported usage is not a complete provider bill. Explicit task bindings and structured receipts are needed to follow real work. GitHub retains code/PR/CI evidence; Retinue retains holder, lease, task state, and collaboration events.

All screenshots below use the deterministic, read-only synthetic demo (seed=42). Its product-launch example illustrates the UI and protocol, not real model execution or an end-to-end production acceptance result. Collaboration images show one fixed task; timestamps come from staged synthetic demo time, not production activity.

Synthetic Retinue home: task flow, dispatch coordination, and session flow

Synthetic per-task collaboration: relationships, device/model lanes, and module contributions

Operations screenshot · Data-quality screenshot · Device/model lanes · Module contributions · Branch details · Home dispatch and session flow · Full update notes · English PRD · Sharing draft

What is Retinue?

Retinue is a self-hosted, local-first task board for AI agents and the people who supervise them. It is not a chat wrapper and not an agent framework — it is the shared board and audit layer that sits underneath whatever agents you already run (Claude Code, OpenAI Codex, any MCP client, or a human with a browser).

  • One holder per card. Work is never ambiguous: exactly one actor holds the baton, and only the holder can write. Another agent's token gets 403 holder-only-writes.
  • Append-only receipt chain. Claim, progress, hand-off, block, and acceptance are all recorded and cannot be rewritten after the fact.
  • Acceptance checks on the card. A card says what "done" means before an agent starts. Recorded completion and independent quality verification remain separate observations.
  • MCP-native coordination. retinue-server mcp exposes the board to any MCP-capable agent; there is also a plain HTTP + bearer-token API.
  • Runtime exporters. Read-only importers for Claude Code and Codex session data give you token activity per agent without touching sources.
  • Optional IM adapters. Lark/Feishu and Telegram bridges turn a chat message into an intent — never directly into a command.
  • Data sovereignty. File mode keeps canonical state in one data directory (org.yaml, tasks/, metrics/, nodes/); stop writers before copying it. The server stores canonical state in retinue.db; use a consistent SQLite snapshot for its backup. Runtime source records, external artifacts, credentials and deployment configuration have separate recovery paths. See the backup guide.

Who it is for

Individuals and small teams running a fleet of AI coding agents who want one durable board, observable receipts, and data they can take away — without adopting a hosted agent platform. It runs on one machine, a homelab box, or a NAS.

How Retinue differs

Retinue Trello / Jira / Linear Agent frameworks (LangGraph, CrewAI, AutoGen)
Primary users People and AI agents on the same cards People Agents, in code
Where it runs Your machine, self-hosted Vendor SaaS Inside your app process
Audit Append-only receipt chain per card Activity log, editable Traces, usually ephemeral
Agent access MCP server + token-scoped HTTP API Bots and webhooks bolted on N/A — it is the agent
Write safety Holder-only writes, hooks only from org.yaml Anyone with access Whatever you code
Telemetry None Vendor-side Varies

Retinue does not replace your agent runtime. It replaces the spreadsheet, the chat thread, and the "which agent is doing what right now?" question.

Ten-minute corridor

The path below stays on loopback. Credentials stay in the environment, never in a card.

1. Start the hub with Compose

Host port 9219 must be free (docker compose fails with "address already in use" otherwise). The admin password must be at least eight characters.

read -rsp 'Choose an admin password (at least 8 characters): ' RETINUE_ADMIN_PASSWORD
printf '\n'
export RETINUE_ADMIN_PASSWORD
docker compose up --build

Wait until the logs show the hub listening, then:

curl -fsS http://127.0.0.1:9219/api/health

That returns JSON like {"status":"ok","version":"0.3.0a5"} with no authentication. version is the PEP 440 string from pyproject.toml (the same spelling as the wheel name and the next git tag, v0.3.0a5). Open http://127.0.0.1:9219/ and sign in as operator with that password. The image is the authenticated v0.2 hub, not the old read-only panel.

2. Open a card

Onboard the agent first: sidebar Administration → prepare an executor with actor id worker-1, save the one-time token outside the data volume. Then open Task workspace → Task board → New task and publish:

  • Title: Write hello.txt with: hello from retinue
  • Holder: worker-1 (the agent that will claim it; do not leave this as yourself if you will use the agent token in the next step)
  • Priority: high
  • Acceptance: hello.txt contains exactly: hello from retinue

Copy the generated task id (task-YYYYMMDD-NNN).

The same card can be published over HTTP after you sign in (session cookie) or with an admin bearer. The holder must be worker-1.

3. Agent claim

Use the one-time token from step 2:

export RETINUE_AGENT_TOKEN='<one-time-agent-token>'
export RETINUE_TASK_ID='<task-id-from-the-board>'

curl --fail --request POST \
  --header "Authorization: Bearer $RETINUE_AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"status":"doing","note":"claimed through the agent API"}' \
  "http://127.0.0.1:9219/api/tasks/$RETINUE_TASK_ID/update"

MCP-capable agents can use retinue-server mcp after pip install 'retinue[mcp]' instead of learning curl. See docs/agent-onboarding.md.

4. Write back

curl --fail --request POST \
  --header "Authorization: Bearer $RETINUE_AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"progress":80,"refs":["artifact:hello.txt"],"note":"recorded the result reference"}' \
  "http://127.0.0.1:9219/api/tasks/$RETINUE_TASK_ID/update"

5. Acceptance

When the acceptance line is actually true:

curl --fail --request POST \
  --header "Authorization: Bearer $RETINUE_AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"status":"done","note":"acceptance checked; hello.txt matches"}' \
  "http://127.0.0.1:9219/api/tasks/$RETINUE_TASK_ID/update"

Refresh the board. The card is in done and the chain shows claim, write-back, and completion. A token issued for a different agent receives 403 holder-only-writes.

A file-mode corridor (no Docker) is in docs/closed-loop-walkthrough.md. Installation, backup, and exposure warnings are in SELF_HOSTING.md.

Architecture (one page)

 operator                         agents
    |                                |
    |  org.yaml (hooks only)         |  MCP or HTTP + actor token
    v                                v
 +------------------------------------------------------+
 |                    RETINUE hub                       |
 |  task cards  -- holder, acceptance, append-only chain |
 |  claim / update / receipt / handoff / block          |
 |  optional IM adapter (intent in, never a command)    |
 +------------------------+-----------------------------+
                          |
          +---------------+----------------+
          |                                |
   read-only board                  node reports
   127.0.0.1 panel                  heartbeat + CLI inventory
   GET only                         node token, no card writes

File mode keeps canonical state in the selected data directory; stop writers before copying it. Server mode uses retinue.db and needs a consistent SQLite snapshot. Runtime source records, external artifacts, credentials and deployment configuration are recovered separately; see Backup. Agents never choose on_claim hooks; file-mode hooks come only from org.yaml.

FAQ

What is Retinue used for? Assigning work to a mix of humans and AI agents on one self-hosted board, and keeping a verifiable record of who held each card, what they claimed, and whether the acceptance check actually passed.

Does Retinue work with Claude Code, Codex, or other MCP clients? Yes. MCP-capable agents connect through retinue-server mcp. Agents without MCP use the HTTP API with a scoped actor token. Claude Code and Codex also have read-only session exporters for token activity.

Is Retinue open source? Retinue is open source under AGPL-3.0-only, with optional commercial licensing. Personal and commercial use are free when you comply with AGPL. See LICENSE and COMMERCIAL.md.

Does Retinue send my data anywhere? No. There is no telemetry, no hosted control plane, no remote account, and no mandatory outbound request. The core, panel, daemon, demo, and exporters all work offline. Only IM adapters you explicitly configure contact anything.

Can I self-host Retinue on a homelab or NAS? Yes. docker compose up --build brings up the hub on one host port; the loopback corridor below is the ten-minute path. See SELF_HOSTING.md for exposure warnings and backup.

How is Retinue different from an AI kanban board like Vibe Kanban? Retinue is board plus audit boundary. Agents are treated as untrusted executors: they can never choose the hook that runs, only the operator's org.yaml can; writes are holder-only; and the receipt chain is append-only. The board is the governance surface, not just a task queue.

Does Retinue require Docker? No. There is a file-mode corridor with no Docker in docs/closed-loop-walkthrough.md.

License

Copyright (c) 2026 JKL Thinking. The current source tree uses AGPL-3.0-only, with a separate commercial licensing option.

  • Personal use and internal company use are free, including commercial use.
  • If you modify Retinue and provide it to outside users over a network, you must offer those users the modified version's Corresponding Source under AGPL.
  • If you do not want to meet those requirements, you can buy a commercial license. Contact: jklthinking@foxmail.com.
  • Versions 0.3.0a4 and earlier released under MIT remain MIT forever.

Distribution and other uses must also meet the applicable AGPL requirements. This applies to the development tree after that cutoff; old releases and tags are unchanged. See LICENSE, NOTICE, commercial terms, contributor agreement and trademarks. Third-party dependencies retain their own terms; see THIRD_PARTY_NOTICES.


Community

RETINUE is announced and discussed on the LINUX DO community. Issues and pull requests are welcome on GitHub.

众卿 RETINUE(简体中文)

众卿 Retinue 是一套可自托管的 AI 智能体任务看板与多智能体编排中枢: 人和 AI agent 共用同一批任务卡。每一件工作对应一张任务卡——有唯一持有人、 有可观测的验收条件、有只可追加的回执链。你来跑看板,agent 通过 MCP 或 HTTP 认领,回写结果,你验收或退回。没有托管控制面或第三方账号要求,也没有遥测; 服务端中枢使用部署方管理的本地账号与限定范围的凭据。

2026-10-02 社区更新:看清每项任务的协作

版本 0.3.0a1 补齐每任务的关系图、设备/模型时间泳道和功能模块贡献。 点击节点可以查看委派指令、进展、等待对象、成果引用和下一步;新会话通过只读 任务上下文了解验收条件、已有状态记录和尚未核验的工作声明。

首页的任务流转、派单协调和会话流转台继续保留。运营效率入口统一,任务看板、 列表、协作空间、历史会话和实时会话仍各有自己的用途。执行 Worker 标清设备、 runtime 与模型;同步与观察服务单列,不算作执行者。

cc-connect 原生会话观察以只读方式接入,用量按实际消息模型分层、稳定 delivery 标识去重。运营看板把任务事件、runtime 日报和会话累计来源分开解释,未上报 显示未知,采集回执与模型最后活动分别说明。

委派排队不代表模型已启动,原生会话采集不自动生成任务进度,任务 done 记录也 不代表独立验收。真实任务仍需显式绑定与结构化回执。GitHub 保存代码、PR 和 CI 证据;Retinue 保存 holder、租约、任务状态与协作事件。

上方配图均为固定种子的合成演示;协作图、泳道、模块和分支详情展示同一固定 任务,时间来自分阶段演示时钟。图片不包含真实业务记录,不声称真实模型闭环 已全部通过验收。当前自有代码采用 AGPL-3.0-only,第三方声明保留,历史标签许可不改写。

查看 完整版本说明、 PRD、小红书草稿; 也可打开 只读演示。

众卿 Retinue 是什么

它是本地优先、可自托管的 AI agent 任务板与审计层,不是聊天壳,也不是 agent 框架。它垫在你已经在用的 agent(Claude Code、OpenAI Codex、任意 MCP 客户端,或者一个开着浏览器的人)下面。

  • 一卡一持有人:同一时刻只有一个执行者握棒,只有持有人能写。别的 agent 的令牌会收到 403 holder-only-writes。
  • 只可追加的回执链:认领、进度、交接、阻塞、验收全部留痕,事后改不掉。
  • 验收条件写在卡上:开工前写清「怎样算完成」,任务完成记录与独立质量 核验分别解释。
  • 原生 MCP 协作:retinue-server mcp 把看板暴露给任意 MCP agent;也提供 纯 HTTP + bearer token 接口。
  • 运行时 exporter:只读导入 Claude Code / Codex 会话数据,按 agent 看 token 消耗,不改动来源。
  • 可选 IM 适配器:飞书 / Lark 与 Telegram 桥接把聊天消息变成「意图」, 绝不直接变成命令。
  • 数据主权:文件模式的事实源是一个数据目录(org.yaml、tasks/、 metrics/、nodes/),停掉写入者后复制;服务端事实源是 retinue.db, 使用一致性 SQLite 快照备份。运行时源记录、外部成果、凭据与部署配置 分别恢复,详见备份说明。

适合谁

手上跑着一队 AI 编程 agent 的个人和小团队:想要一块持久的看板、可观测的 回执、随时能带走的数据,又不想被托管平台绑住。单机、homelab 主机、NAS 都能跑。

十分钟走廊

以下步骤只走本机回环。凭据放在环境变量里,不写进任务卡。

1. 用 Compose 起完整中枢

本机 9219 端口必须空闲(否则 compose 会报 address already in use)。 管理员密码至少八位。

read -rsp 'Choose an admin password (at least 8 characters): ' RETINUE_ADMIN_PASSWORD
printf '\n'
export RETINUE_ADMIN_PASSWORD
docker compose up --build

等日志里出现监听后再探活:

curl -fsS http://127.0.0.1:9219/api/health

应返回类似 {"status":"ok","version":"0.3.0a5"},无需登录。version 与 pyproject.toml、wheel 文件名、下次 git tag(v0.3.0a5)是同一串。 打开 http://127.0.0.1:9219/,用 operator 和上面的密码登录。默认镜像 是带登录的 v0.2 中枢,不再是旧只读面板。

2. 开一张卡

先在侧栏 管理 入职执行者 worker-1,把一次性令牌存到数据卷以外。 再到 任务看板 → 新建任务:

  • 标题、持有人填 worker-1(下一步要用该 agent 的令牌认领,不要填成 你自己)
  • 优先级 high,写上可观测的验收条件

记下任务 id(task-YYYYMMDD-NNN)。

3. Agent 认领

用第 2 步的一次性令牌:

export RETINUE_AGENT_TOKEN='<one-time-agent-token>'
export RETINUE_TASK_ID='<task-id-from-the-board>'

curl --fail --request POST \
  --header "Authorization: Bearer $RETINUE_AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"status":"doing","note":"claimed through the agent API"}' \
  "http://127.0.0.1:9219/api/tasks/$RETINUE_TASK_ID/update"

4. 回写

curl --fail --request POST \
  --header "Authorization: Bearer $RETINUE_AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"progress":80,"refs":["artifact:hello.txt"],"note":"recorded the result reference"}' \
  "http://127.0.0.1:9219/api/tasks/$RETINUE_TASK_ID/update"

5. 验收

验收条件真正成立后再把卡标为 done:

curl --fail --request POST \
  --header "Authorization: Bearer $RETINUE_AGENT_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"status":"done","note":"acceptance checked; hello.txt matches"}' \
  "http://127.0.0.1:9219/api/tasks/$RETINUE_TASK_ID/update"

刷新看板。卡在 done,事件链上能看到认领、回写和完成。另一名 agent 的令牌会得到 403 holder-only-writes。

文件总线走廊见 docs/closed-loop-walkthrough.md。安装、 备份和暴露警告见 SELF_HOSTING.md。

架构一页图

见上方英文节的文字架构图。文件模式的事实源是运营者选定的数据目录,停掉 写入者后复制;服务端使用 retinue.db,需要一致性 SQLite 快照。运行时源记录、 外部成果、凭据与部署配置分别恢复,详见备份说明。 文件模式的 on_claim 钩子只来自 org.yaml,任务卡不能指定要执行的命令。

常见问题

众卿 Retinue 用来干什么? 把工作派给人和 AI agent 组成的混合团队,在一块自托管看板上执行,并留下可核 验的记录:谁握过这张卡、声称做了什么、验收条件是否真的通过。

支持 Claude Code、Codex 和其他 MCP 客户端吗? 支持。MCP agent 通过 retinue-server mcp 接入;不支持 MCP 的用 HTTP 接口加 受限 actor 令牌。Claude Code 和 Codex 另有只读会话 exporter 统计 token。

它是开源软件吗? 是,当前源码采用 AGPL-3.0-only,遵守 AGPL 可免费商用,也可另购商业授权。 详见 LICENSE 和 COMMERCIAL.md。

会把我的数据传到哪里去吗? 不会。没有遥测、没有托管控制面、没有远程账号、没有强制外呼。核心、面板、 daemon、demo、exporter 全部可离线运行。只有你显式配置的 IM 适配器会外联。

可以部署在 homelab 或 NAS 上吗? 可以。docker compose up --build 起一个端口即可;下面的十分钟走廊全程走回 环。暴露风险与备份见 SELF_HOSTING.md。

和 Vibe Kanban 这类 AI kanban 有什么不同? 众卿是「看板 + 审计边界」。agent 被当作不可信执行者:它永远不能指定要跑的 hook(hook 只来自运营者的 org.yaml)、写权限只归持有人、回执链只增不改。 看板本身就是治理面,不只是任务队列。

必须用 Docker 吗? 不必。无 Docker 的文件总线走廊见 docs/closed-loop-walkthrough.md。

许可证

Copyright (c) 2026 JKL Thinking。当前源码树采用 AGPL-3.0-only, 同时提供单独的商业授权。

  • 个人和公司内部使用都免费,包括商用。
  • 修改后通过网络对外提供服务,必须按 AGPL 向这些用户提供修改版本的对应源码。
  • 不想履行这些要求,可以购买商业授权。 联系邮箱:jklthinking@foxmail.com。
  • 已按 MIT 发布的 0.3.0a4 及以前版本永远是 MIT,不追溯。

分发和其他使用场景也须履行适用的 AGPL 条款。此说明针对该分界后的开发源码, 不改写旧发行版或标签。详见 LICENSE、NOTICE、 商业授权、贡献者协议 和 商标说明。 第三方依赖继续遵循各自许可证,声明见 THIRD_PARTY_NOTICES。

社区

RETINUE 在 LINUX DO 社区发布与交流,欢迎在 GitHub 提交 issue 与 PR。

About

Self-hosted coordination for AI workers: per-task graphs, device/model timelines, progress receipts, and source-aware usage. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

110 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages