Community编程与开发github.com

picoduck/using-wollipog

在代理会话内部操作 Wollipog 会话,通过注入的 CLI 或通用的 Wollipog MCP 服务器。

using-wollipog 是什么?

该技能使 AI 代理(如 Claude Code、Codex 或自定义协调器)能够通过命令行界面或 MCP 工具直接管理和与 Wollipog 会话进行交互。它允许创建、监控和控制子会话,处理工作流决策,以及管理工作树和人工审批门控。这避免了代理在不同工具上下文之间切换,使其成为需要管理复杂多步骤工作流的协调代理的重要实用工具。该技能支持各种平台(Claude Code、Codex App Server),并通过“严格项目隔离”和基于策略的执行等机制强制执行安全边界。该技能通过让协调代理在不离开主会话的情况下管理子会话,简化了复杂的编排任务。

兼容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/picoduck/wollipog/tree/HEAD/skills/using-wollipog

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

使用 Wollipog

关于活动权威,请阅读活动权威预检。 它涵盖了有效模式/边界、确切的决策所有者、未解决的人工审批门控以及证据上传/提供者披露;它不会授权活动或更改已安装的策略。

当 wollipog 命令在 PATH 上时使用它。Wollipog 托管的会话会自动提供 WOLLIPOG_CONTROL_PLANE_URL、WOLLIPOG_SESSION_ID 和一个受保护的令牌文件;请勿在命令行上打印、复制或传递该令牌。

核心命令:

wollipog session list --json
wollipog session get <session-id> --json
wollipog session events <session-id> [--after <seq> [--event-epoch <n>]] [--limit <n>] --json
wollipog session capabilities --runner <id> --agent <id> [--offset <n>] [--limit <n>] [--include-hidden] --json
wollipog session capabilities --runner <id> --agent <id> --model <id> --json
wollipog session create --runner <id> --agent <id> --workspace <id> --prompt <task> [--model <id>] [--effort <level>] --json
wollipog session prompt <session-id> <message> --json
wollipog session wait <session-id> --for input_required,completed,failed,stopped --json
wollipog session stop <session-id> --json
wollipog session unarchive <session-id> --json
wollipog session stop-job <session-id> <job-id> --json
wollipog session release-hold <session-id> <hold-id> --json
wollipog pr wait <number|owner/name#number|host/group/project!iid|url> [--head <sha>] [--timeout <ms>] --json
wollipog pr closures <number|owner/name#number|url> [--intended <issue>]... --json
wollipog pr closures --file <description.md> [--repo <owner/name>] [--intended <issue>]... --json
wollipog review session run --repo <owner/name|gitlab-host/group/project> --pr <number> --head <sha> --brief-file <path> [--full-reason <text>] --json
wollipog review session get <review-session-id> --json
wollipog artifact attach --file <absolute-path> [--name <display-name>] --json
wollipog automation request --proposal '<json>' --json
wollipog automation get <occurrence-id> --json
wollipog automation execute <occurrence-id> --digest <resource-digest> --json
wollipog location-switch request --request '<json>' --json
wollipog location-switch get <occurrence-id> --json
wollipog location-switch execute <occurrence-id> --digest <resource-digest> --json
wollipog worktree create --branch <name> [--base <ref>] --json
wollipog worktree attach --path <absolute-path> --json
wollipog worktree select --path <absolute-path> --json
wollipog worktree discard --path <absolute-path> --json
wollipog worktree delete-refs [--path <absolute-path>] --ref <ref>=<object-id> [--ref ...] --json
wollipog decision request --request-id <id> --resource-key <key> --snapshot '<json>' --json
wollipog decision get <occurrence-id> [--session <descendant-id>] --json
wollipog decision list [--session <descendant-id>] [--limit <1-100>] [--cursor <occurrence-id>] --json
wollipog decision consume <occurrence-id> --snapshot '<json>' [--action '<json>'] --json
wollipog decision reconcile <occurrence-id> --snapshot '<json>' --json
wollipog decision withdraw <occurrence-id> --reason <text> [--session <child-id>] --json

对于经过验证、完全归档的活动子项的拒绝脏工作树,只有其控制协调器可以使用 session unarchive (控制平面和运行器上的协议 266+)。这可以恢复可见性,而无需重新启动或删除文件。然后重新启动子项,并让其保留和清理其工作,验证其新的最终报告,然后再次归档。退休仍然拒绝脏的、未推送或未交付的工作;较旧的运行器明确拒绝恢复。将临时报告保留在托管工作树之外。

没有 --after 时,session events 返回最新的 --limit 个事件(默认 30,最大 100)。 要读取长范围,例如子项自从某个已知点以来所做的所有操作,请向前翻页:从 --after 0 开始,或者使用您已经读取过的序列及其来源的 eventEpoch,然后重复 使用上一页中的 --after <lastSeq> --event-epoch <eventEpoch>,直到 hasMore 为 false。 historyIncomplete 表示控制平面尚未加载整个日志,因此可能存在后面的事件: 保留返回的 lastSeq 并稍后重试,而不是将该页视为结尾。如果调用失败,因为事件历史已被替换,请从 --after 0 重新开始,不要使用旧的 epoch。每个事件是一条摘要行,限制为 400 个字符,因此长消息会被截断。MCP get_session_events 工具接受相同的 after、limit 和 eventEpoch。

在历史数据加载期间,每个读取的事件都保持分页状态;一个短或不完整的空页并不是日志的结尾。没有 --after 时,不完整的结果是最新的缓存窗口,因此一旦数据加载完成,请在不使用 --after 的情况下重试以获取真正的最近窗口。直接 HTTP 读取 GET /api/sessions/:id/events 在省略 limit 时默认为 200 个事件;使用 nextAfter 和 eventEpoch 继续,而不是将一个响应视为整个日志。 协议 222 运行器在整个加载过程中使用有界读取器。在升级提供默认页面的控制平面之前,请更新旧的 CLI/MCP 安装:旧读取器的 全日志回退可能将有界第一页误认为是最新窗口。可识别的旧 代理会话回退会失败并显示运行器升级指南;配对设备 CLI 调用需要相同的 先升级后迁移,因为其人类凭证无法识别读取器版本。

session stop-job(MCP stop_background_job)通过其 ID 结束子会话的一个未完成的后台作业, 该 ID 由 session get 列为 unfinishedBackgroundJobs。当一个永不结束的作业(例如 条件从未触发的监视器)使已完成的兄弟节点的结果或 排队的手持交接等待时,请使用它。只有该作业结束并记录为已终止;子会话的对话、其 其他作业及其排队的提示将被保留。如果提供者未能及时确认停止,则该 作业将继续运行;如果它稍后结束,它仍将被记录为您的停止,因此不要仅仅为了署名而重复 请求。session stop 和 session restart 会结束每个作业 :stop 会丢弃排队的提示,而 restart 会保留它们并在之后运行它们。 当前运行器会恢复已建立的 Claude Code、Codex App Server 和 Pi 对话;一个从未运行过的 会话会全新启动。会话能力 agentCapabilities.restartResumesConversation 报告 其下一次 Restart 是否恢复。较旧的运行器会省略它,并可能全新启动,因此缺失不提供连续性保证。只有会话的所有者及其控制协调器才能 使用 stop-job。当子会话的排队手持保持报告 canRelease 时,session release-hold (MCP release_queue_hold)使用 session get 中的保持 ID 会立即结束每个未完成的作业, 将每个记录为由您终止,并按顺序运行交接和排队的提示,无需重新启动; 它需要与 stop-job 相同的权限,并且如果自您读取以来保持已更改,则被拒绝。

协调器活动必须使用管理工具作为策略边界,而不是从其提示中推断权限。在活动开始时以及人类更改策略后调用 get_campaign。它返回 有效行为、类型化决策所有者、修订版、准入和护栏限制、子项和 后续计数、UI 审查兼容性,以及 waiting_human、active、blocked、 verified_complete 或 complete_with_handoffs 之一,而不返回凭据。其 behavior 包含下一次子项创建强制执行的子项 Harness、子项 模型、子项工作量、后续操作和完成。一个人可以在活动运行时更改它们;更改后的值携带 active_campaign 源和更高的 behavior.revision。它们适用于之后创建的子项,现有子项保留其自己的配置,并且没有代理(包括协调器)可以更改它们。

协调器角色默认为委派实施:规划、委派、监控和审查。 涵盖多个问题的普通请求不会授权活动或子项创建,除非 人类明确要求编排或委派。父项可以直接维护允许的规划 工件。如果人类明确要求父项实施,请首先检查开放的子项 分配和拉取请求是否存在重叠,然后为父项创建并选择一个专用的 Wollipog 工作树,并遵循仓库的正常测试、审查、UI 证据、合并和 清理工作流程。提供者权限和治理仍然适用于整个过程。

严格项目隔离是一个独立的人类控制的执行设置。新会话默认 禁用该设置。启用后,项目位置将受操作系统强制只读,父项仅在会话私有的临时区域中工作,并且父项实施和自工作树操作将被拒绝。启动前会检查所需的 bwrap、Seatbelt 或经过审计的提供者边界。现有的协调器会话如果没有执行策略字段,则被视为严格,并且无法自行放宽。

每个子项创建都会在其初始分配中收到一个服务器派生的活动策略块。 对于自动模型或工作量,请使用 get_agent_capabilities 并在同一个 create_session 调用中发送所选对;固定值由服务器强制执行。该块不是全面批准。子项 必须使用 request_workflow_decision、get_workflow_decision 和 consume_workflow_decision 来处理实施问题、PR 合并、合并分支删除、后续发布和 UI 证据。 当这些 MCP 工具不可用时,请使用上面等效的自限定 wollipog decision request、 get 和 consume 命令;确切的资源快照和可选的 PR 合并操作是 JSON 对象。CLI 拒绝将 --session 用于 request、consume 和 reconcile,并且不公开解析操作。 只读的 get_workflow_decision 接受可选的 sessionId;list_workflow_decisions 枚举待处理的和已批准的决策,带有可选的 sessionId、limit 和 cursor。 省略目标则读取自身。协调器可以针对可访问的后代,需要访问 两个会话。精确读取包括终端状态;404 永不证明已被消费。 一直跟随 nextCursor 直到不存在。页面反映当前状态,因此在分页期间确定的决策可能会消失;当结果重要时,精确读取已知出现。 后代读取和列表需要控制平面协议 v214。没有该工具的较旧运行器 可以使用更新的 CLI 或只读 HTTP 端点 GET /api/sessions/:id/workflow-decisions/:occurrenceId 和 GET /api/sessions/:id/workflow-decisions?limit=50&cursor=<occurrence-id>,并使用其现有的 会话凭据(如果已配置令牌)。提供者隔离的会话仅持有一个运行器中继密钥, 该密钥无法通过直接 HTTP 调用进行身份验证;升级运行器/CLI 以使用工具,而不是 寻求不记名令牌。较旧的控制平面仅通过 list_descendant_requests 公开待处理的请求;请为权威的后代状态检查更新它们。 只有当前所有者可以解析确切的待处理出现。

对于不必要的待处理人工拥有的 review_round_extension,控制协调器 可以改为调用 withdraw_descendant_workflow_decision,并提供子项的 sessionId、确切的 occurrenceId 和非空的 reason,解释撤回并给出子项的下一个 指令(控制平面 v265+)。它仅移除该请求,审计协调器的 撤回,并通过持久的恢复路径传递原因,而无需停止或重新启动 子项。该决策读取为 revoked,来源为 withdrawal;它不授予任何批准,并且 不能被消费。已批准的决策和未指定用于撤回的类别将被拒绝。 使用 get_workflow_decision 获取确切结果;仍然需要人的请求保持不变。

当待处理或已批准的决策不再需要且从未被消费或武装时,使用 withdraw_workflow_decision(decision withdraw)和非空的 reason(控制平面 v269+)将其停用;切勿使用过时的快照进行消费以使其被撤销。省略 sessionId 以撤回您自己的。 控制协调器可以传递其子项的 sessionId 以撤回协调器拥有的一个;一个人拥有的决策仍然是请求者的撤回。撤回不批准也不消费任何内容:该决策读取为 revoked,其中 withdrawal 命名撤回会话及其 原因,此后永远无法消费,并且不再阻止 verify_campaign_child。一个 仍在等待待处理决策的子项会使用该原因恢复;一个已经持有批准的不会醒来。已消费的决策、武装的 pr_merge(请改用 reconcile),以及 人拥有的问题关闭、范围、后续准入和自动化请求被拒绝。

身份验证、秘密、 持久授权、治理变更、预算增加和工具护栏仍然是人类独有的。 单独建立的人类预算权限可能允许有界托管的工人保留和 分配;切勿从活动名称推断它或使用无计量工人来逃避会计。 停止或重新启动会撤销该会话未消费的每个决策。重新启动后, 会话会收到一条 [Wollipog Session Restart] 消息,命名每个撤销的发生:不要对 其先前的批准采取行动,并重新请求您仍然需要的。 如果确切的武装 PR 合并命令已经成功,但其批准的 occurrence 仍然 未被消费,请使用 reconcile_workflow_decision(或 wollipog decision reconcile)并提供该 occurrence 的未更改资源快照。 它永远不会重新运行该命令。对于 Codex App Server 子项,它证明确切的已完成的准入、 提供者命令和合并的 forge head;首先恢复相同的 App Server 会话。一个 Claude Code 子项的入队在自动或完全访问模式下不会产生权限收据

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能