用途:在 OpenViking 存储的看板上推进任务。看板是存放多个任务的目录,任务是一个 markdown 文件,既是工单也是交接材料,读它即可继续工作,无需上一轮对话。OpenViking 负责存储、索引(find/grep)并跨账号内所有智能体和用户共享,没有其他状态。
文件结构:<root>/<board>/<id>.md 为任务(头部加当前状态,每轮重写);<root>/<board>/archive/<id>.md 为折叠明细(只追加、不重写)。<root> 默认是 viking://agent/kanban,每会话用 ov stat viking://agent/kanban 探测一次(不存在时用 ov mkdir);若服务器返回 PERMISSION_DENIED(旧服务器禁止在 viking://agent 下写入除 skills 外的内容),改用 viking://resources/kanban。$OV_KANBAN_ROOT 设置时覆盖探测结果,协议不变。
看板与任务:<board> 是隔离单位(项目、仓库或团队),用 ov acl 决定谁可读或领取任务,用 ov mkdir <root>/<board> 和 ov mkdir <root>/<board>/archive 创建(--mode create 写需要父目录已存在)。<id> 为 YYYY-MM-DD-short-slug,看板内唯一。用 ov CLI(任何有 shell 的智能体均可用);若已注册 OpenViking MCP 工具 list、read、write、grep 则等价,不要退回到原始 HTTP。写入优先用 CLI:遇到 MCP 客户端超时的写入通常已落盘,再次写入前先读回文件。
分层读取:boards 层用 ov ls <root>;board 视图用 ov grep '^(title|status|owner|updated):' -u <root>/<board> -x <root>/<board>/archive -o json;任务用 ov read <root>/<board>/<id>.md;归档用 ov grep 定位后再 ov read。只用 ov find "<topic>" -u <root> 跨看板找相关任务。
任务文件头部字段:id、title、status(open·in_progress·needs_user·blocked·done·cancelled)、owner、board、updated(每次写入用 date +%Y-%m-%dT%H:%M:%S%z 生成)。正文按顺序为 Goal、Context、Decisions、Progress、Next、Questions、Log。文件是事实来源;若与实时仓库不一致,以仓库为准,修正文件并在 Log 中说明。正文用任务的主语言写,头部键和状态值保持英文。
折叠:任务文件保持一次调用可读完。文本通过移入归档离开文件,绝不删除或缩短重写:超过最近 10 条的 Log 行、被后续轮次替换的 Next 与 Decisions、超过一行的证据(命令输出、diff 摘要、评审意见)——Progress 只留结果,归档保留其余。每轮追加一条:### <updated> <agent id> 标题、状态变化 from -> to(如有)、原样移动的文本,用 ov write <root>/<board>/archive/<id>.md --append --from-file ./entry.md --wait(首次加 --mode create)。没有移出内容且状态不变的一轮不写归档条目。
单轮流程:选任务、认领、做一个切片、验证、写回、停止。选:读看板视图,取用户指定的任务,否则取 open 的,否则取 updated 超过 2 小时的 in_progress(陈旧认领);跳过其他智能体最近更新过的 in_progress。认领:ov read 文件,设 status: in_progress、owner: <你的 agent id>、updated: now,加 Log 行并写回。 agent id 为 $OV_KANBAN_AGENT,否则 <tool>@<host>。切片:做 Next 中第一个未勾选项,或更多但保持为一个连贯可验证的工作。验证:运行能证明该切片的检查,只有已验证的工作才写入 Progress 并附证据。写回:先折叠,再用 ov write <root>/<board>/<id>.md --from-file ./task.md --wait 整体重写。遇 CONFLICT(路径忙)等几秒重试一次;创建时遇 ALREADY_EXISTS 换 id。退出状态:继续做保持 in_progress;交接则清空 owner、设 open、确保 Next 对冷读者足够精确;只有用户能决定的问题写入 Questions、设 needs_user、清空 owner 并提问后停止;等待外部则 blocked,在 Next 中写明解锁条件;Goal 全部勾选且有证据则 done;用户放弃则 cancelled、清空 owner 并在 Decisions 记录决定者与原因。创建任务即用 --mode create 与 status: open 的同样写入,从用户请求填 Goal 与 Context,并在 Next 放第一步。回答 needs_user 任务:把答案记入 Decisions,清空 Questions,设 open 并写回。
长时与多智能体:无人值守循环用 bash references/loop.sh <board> 5 /path/to/repo,一轮接一轮运行(默认 codex exec,可用 OV_KANBAN_CMD 换任意 CLI),直到没有可运行任务或用尽 tick 预算,停止时通过 herdr 通知;needs_user 任务不可运行,循环会绕过它们并在只剩这类任务时停止。跨智能体交接:任何读到文件的智能体都能继续,Claude、Codex 或人通过 ov tui 均可,除 owner 中的 agent id 外不依赖具体工具。交给人:只有人能做的一步作为 needs_user 闸口,在 Questions 写明人和确切动作,清空 owner 后停止,回报后记入 Decisions 并设 open。并发多任务:给每个子智能体独立 agent id 和一个任务,绝不共享文件;涉及相同文件的任务在 Next 列出依赖并把靠后的设为 blocked。
规则:不认领其他智能体最近 2 小时更新过的任务;不把密钥、令牌或原始日志写入任务或归档,只写结论及其证据;无证据不标 Progress,Goal 有未勾选项不标 done;不从任务文件丢弃文本,而是折叠进归档;同一轮不并行做第二个任务,写回后再选。