跳转到正文
报告库
用途分类 / 其他用途

Wayfinder Skill 安全审计

作者说它能做什么(原文)

Plan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.

第三方安全检查结论

先别安装或运行

已检查文件
2
发现的风险
5
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 1 项风险
中风险

自动选择的 Task ticket 可能触发账户、权限或数据变更

原文依据:2 处
发现了什么

Task 明确允许注册第三方服务、配置访问权限和移动数据,并要求代理在能做到时独立执行。由于未指定 ticket 时 Skill 会自动挑选 frontier 的第一个 ticket,用户可能只是在要求推进地图,并未单独批准具体外部操作。

为什么需要注意

可能创建非预期账户、改变访问控制、产生费用或把数据移到新的位置。

Task ticket 明确可包含注册服务、配置访问权限和移动数据,并要求代理在可行时独立执行。结合未指定 ticket 时自动选择首个 frontier ticket,推进地图可能触发账户、权限或数据状态变更,而没有针对该项操作的再次确认。用户可限制 Task 必须为 HITL,并要求外部账户、权限和数据移动逐项批准。

SKILL.md:80来自说明文档打开原文件
- **Grilling** (HITL): Conversation. The default case. Always call the Skill tool twice, for "grilling" and "domain-modeling".- **Task** (HITL or AFK): Manual work that must happen before a _decision_ can be made: nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that _does_ rather than decides, and it earns its place by unblocking a decision, not by delivering the destination. The agent drives it alone where it can (AFK); otherwise it hands the human a precise checklist (HITL). Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on.
查看另外 1 个位置
SKILL.md:120来自说明文档打开原文件
User invokes with a map (URL or number). A ticket is **optional**: without one, you pick the next decision, not the user.1. Load the **map**: the low-res view, not every ticket body.2. Choose the ticket. If the user named one, use it. Otherwise take the first frontier ticket in order. **Claim it**: assign it to yourself before any work.3. Resolve it. **Zoom as needed**: fetch the full body of any related or closed ticket on demand; call the Skill tool for whichever skills the `## Notes` block names. If in doubt, call the Skill tool twice, for "grilling" and "domain-modeling".4. Record the resolution: post the answer as a **resolution comment**, **close** the issue, and **append a context pointer** to the map's Decisions-so-far.
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 1 项风险
中风险

凭据位置可能被发布到 issue 评论

原文依据:2 处
发现了什么

Task 的答案被要求记录“credentials location”,而通用解决流程会把答案作为 resolution comment 发布。问题跟踪器的读者因此可能看到秘密文件、保管库条目或环境配置的位置。

为什么需要注意

即使没有直接公布秘密值,凭据位置也会帮助未授权读者定位敏感材料,并可能暴露内部目录、账户命名或密钥管理结构。

Task 的结果可包含凭据所在位置,而所有解决答案都会发布为 issue 的 resolution comment。文本并未要求发布凭据值,但路径、保管库条目名或配置位置本身可能帮助无关读者定位敏感材料;实际暴露范围取决于跟踪器可见性。用户可要求评论仅记录不敏感的引用,并限制 issue 访问权限。

SKILL.md:80来自说明文档打开原文件
- **Grilling** (HITL): Conversation. The default case. Always call the Skill tool twice, for "grilling" and "domain-modeling".- **Task** (HITL or AFK): Manual work that must happen before a _decision_ can be made: nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that _does_ rather than decides, and it earns its place by unblocking a decision, not by delivering the destination. The agent drives it alone where it can (AFK); otherwise it hands the human a precise checklist (HITL). Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on.
查看另外 1 个位置
SKILL.md:125来自说明文档打开原文件
3. Resolve it. **Zoom as needed**: fetch the full body of any related or closed ticket on demand; call the Skill tool for whichever skills the `## Notes` block names. If in doubt, call the Skill tool twice, for "grilling" and "domain-modeling".4. Record the resolution: post the answer as a **resolution comment**, **close** the issue, and **append a context pointer** to the map's Decisions-so-far.5. Add newly-surfaced tickets (create-then-wire); graduate any fog the answer has made specifiable, clearing each graduated patch from **Not yet specified** so it lives only as its new ticket. If the answer reveals that a ticket (this one or another) sits beyond the destination, **rule it out of scope** rather than resolving it on the route. If the decision invalidates other parts of the map, update or delete those tickets.
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 1 项风险
中风险

仅绘制地图也会创建研究分支并让子代理写入结果

原文依据:2 处
发现了什么

尽管该 Skill 声称默认做规划,Chart 流程会为每个研究 ticket 启动子代理,并在 `research/<name>` 分支上保存结果。文本没有规定分支只存在本地、禁止推送或何时清理。

为什么需要注意

仓库可能出现用户未预期的分支和研究文件;若分支被推送,共享仓库会持续保留这些内容,其中也可能包含从文档或知识库摘录的信息。

“只规划”的默认说明并不意味着只读:绘制地图时会为每个 research ticket 启动子代理,并要求把结果写到 `research/<name>` 分支。这会修改仓库,即使用户只要求 chart。源码称其为 throwaway branch,但没有说明是否推送或何时清理,因此不能据此断言远程发布;用户可要求仅本地创建、禁止推送并约定清理时间。

SKILL.md:11来自说明文档打开原文件
## Plan, don't doWayfinder is **planning** by default: each ticket resolves a decision, and the map is done when the way is clear, with nothing left to decide before someone goes and does the thing. The pull to just do the work is usually the signal you've reached the edge of the map and it's time to hand off. An effort can override this in its **Notes**, carrying execution into the map itself, but absent that, produce decisions, not deliverables.
查看另外 1 个位置
SKILL.md:113来自说明文档打开原文件
2. **Map the frontier.** Grill again, **breadth-first** this time: fan out across the whole space rather than deep on any one thread, surfacing the open decisions and the first steps takeable now. **If this surfaces no fog** (the way to the destination is already clear, the whole journey small enough for one session), you don't need a map. Stop and ask the user how they'd like to proceed.3. **Create the map** (label `wayfinder:map`): Destination and Notes filled in, Decisions-so-far empty, the fog sketched into **Not yet specified**.4. **Create the tickets you can specify now** as child issues of the map, then wire blocking edges in a **second pass** (issues need ids before they can reference each other). Wiring sorts them into the frontier and the blocked; everything you can't yet specify stays in the fog: the **Not yet specified** section.5. **Fire the research subagents.** For each `research` ticket you just created, spin up a subagent that calls the Skill tool with "research" to resolve it in parallel, capturing its findings on a throwaway `research/<name>` branch with a context pointer from the ticket.6. Stop: charting is one session's work; it hand-resolves nothing.
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
中风险

可在未逐项确认的情况下关闭、修改或删除协作 issue

原文依据:2 处
发现了什么

当用户只提供地图而未指定 ticket 时,Skill 会自行选择第一个可处理 ticket,分配给自己并关闭;后续还可更新或删除其他被认为失效的 ticket。说明同时承认其他会话可能正在并发编辑跟踪器。

为什么需要注意

可能改变任务归属和项目决策记录,或删除仍被协作者使用的 ticket;并发情况下还可能依据过期状态覆盖他人的工作。

当用户只给出地图时,流程会自行选择首个 frontier ticket、认领并在解决后关闭它;还允许更新或删除其他 ticket。其他会话可能同时编辑,因此自动删除或改写可能覆盖协作者的工作。用户可要求作者在关闭、删除或修改非当前 ticket 前逐项确认,并采用并发版本检查。

SKILL.md:120来自说明文档打开原文件
User invokes with a map (URL or number). A ticket is **optional**: without one, you pick the next decision, not the user.1. Load the **map**: the low-res view, not every ticket body.2. Choose the ticket. If the user named one, use it. Otherwise take the first frontier ticket in order. **Claim it**: assign it to yourself before any work.3. Resolve it. **Zoom as needed**: fetch the full body of any related or closed ticket on demand; call the Skill tool for whichever skills the `## Notes` block names. If in doubt, call the Skill tool twice, for "grilling" and "domain-modeling".4. Record the resolution: post the answer as a **resolution comment**, **close** the issue, and **append a context pointer** to the map's Decisions-so-far.5. Add newly-surfaced tickets (create-then-wire); graduate any fog the answer has made specifiable, clearing each graduated patch from **Not yet specified** so it lives only as its new ticket. If the answer reveals that a ticket (this one or another) sits beyond the destination, **rule it out of scope** rather than resolving it on the route. If the decision invalidates other parts of the map, update or delete those tickets.
查看另外 1 个位置
SKILL.md:128来自说明文档打开原文件
The user may run unblocked tickets in parallel, so expect other sessions to be editing the tracker concurrently.
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 1 项风险
高风险

可编辑的地图 Notes 和 ticket 内容可间接驱动其他 Skill

原文依据:3 处
发现了什么

处理流程要求读取相关 ticket 的完整正文,并调用 Notes 指定的任意 Skill。地图由 issue 构成且允许并发编辑,但没有要求验证编辑者、固定可信版本或把正文当作不可信数据。能编辑地图或 ticket 的人可加入 Skill 名称或诱导性内容,影响代理随后执行的工作。

为什么需要注意

恶意或被篡改的跟踪器内容可能把一次规划会话转向具有文件、网络、账户或权限能力的其他工作流,具体后果取决于被调用 Skill 和当前权限。

地图是可编辑的 issue,处理流程明确按其 Notes 调用其他 Skill,并可读取相关 ticket 正文;同时预期其他会话并发编辑。若不可信协作者能修改这些内容,就可能改变后续调用的 Skill 或影响代理决策。源码未要求核验编辑者或锁定版本。用户可限制地图写权限,并要求调用 Notes 新增的 Skill 前确认来源和变更。

SKILL.md:21来自说明文档打开原文件
The map is a single issue on this repo's issue tracker, labelled `wayfinder:map`, the canonical artifact. Its tickets are child issues of the map.The map is an **index**, not a store. It lists the decisions made and points at the tickets that hold their detail; a decision lives in exactly one place, its ticket, so the map never restates it, only gists it and links.**Where the map, its child tickets, blocking, and frontier queries physically live is tracker-specific.** The issue tracker should have been provided to you. If not, tell the user to run `/setup-matt-pocock-skills`. Consult the tracker doc's "Wayfinding operations" section for how _this_ repo expresses them. If no tracker has been provided, default to the local-markdown tracker.
查看另外 2 个位置
SKILL.md:122来自说明文档打开原文件
1. Load the **map**: the low-res view, not every ticket body.2. Choose the ticket. If the user named one, use it. Otherwise take the first frontier ticket in order. **Claim it**: assign it to yourself before any work.3. Resolve it. **Zoom as needed**: fetch the full body of any related or closed ticket on demand; call the Skill tool for whichever skills the `## Notes` block names. If in doubt, call the Skill tool twice, for "grilling" and "domain-modeling".4. Record the resolution: post the answer as a **resolution comment**, **close** the issue, and **append a context pointer** to the map's Decisions-so-far.5. Add newly-surfaced tickets (create-then-wire); graduate any fog the answer has made specifiable, clearing each graduated patch from **Not yet specified** so it lives only as its new ticket. If the answer reveals that a ticket (this one or another) sits beyond the destination, **rule it out of scope** rather than resolving it on the route. If the decision invalidates other parts of the map, update or delete those tickets.
SKILL.md:128来自说明文档打开原文件
The user may run unblocked tickets in parallel, so expect other sessions to be editing the tracker concurrently.
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

7 个说明模块

该 Skill 默认只做规划,但项目 Notes 可以明确覆盖这一限制,并把实际执行纳入地图。

查看原文
SKILL.md:11来自说明文档打开原文件
## Plan, don't doWayfinder is **planning** by default: each ticket resolves a decision, and the map is done when the way is clear, with nothing left to decide before someone goes and does the thing. The pull to just do the work is usually the signal you've reached the edge of the map and it's time to hand off. An effort can override this in its **Notes**, carrying execution into the map itself, but absent that, produce decisions, not deliverables.

它会在仓库的问题跟踪器中创建一个地图 issue、子 issue、标签和依赖关系;处理地图时还会分配、评论、关闭、修改或删除 issue。

查看原文
SKILL.md:21来自说明文档打开原文件
The map is a single issue on this repo's issue tracker, labelled `wayfinder:map`, the canonical artifact. Its tickets are child issues of the map.The map is an **index**, not a store. It lists the decisions made and points at the tickets that hold their detail; a decision lives in exactly one place, its ticket, so the map never restates it, only gists it and links.**Where the map, its child tickets, blocking, and frontier queries physically live is tracker-specific.** The issue tracker should have been provided to you. If not, tell the user to run `/setup-matt-pocock-skills`. Consult the tracker doc's "Wayfinding operations" section for how _this_ repo expresses them. If no tracker has been provided, default to the local-markdown tracker.
SKILL.md:123来自说明文档打开原文件
1. Load the **map**: the low-res view, not every ticket body.2. Choose the ticket. If the user named one, use it. Otherwise take the first frontier ticket in order. **Claim it**: assign it to yourself before any work.3. Resolve it. **Zoom as needed**: fetch the full body of any related or closed ticket on demand; call the Skill tool for whichever skills the `## Notes` block names. If in doubt, call the Skill tool twice, for "grilling" and "domain-modeling".4. Record the resolution: post the answer as a **resolution comment**, **close** the issue, and **append a context pointer** to the map's Decisions-so-far.5. Add newly-surfaced tickets (create-then-wire); graduate any fog the answer has made specifiable, clearing each graduated patch from **Not yet specified** so it lives only as its new ticket. If the answer reveals that a ticket (this one or another) sits beyond the destination, **rule it out of scope** rather than resolving it on the route. If the decision invalidates other parts of the map, update or delete those tickets.

Task 类型不仅做决策,还可能注册服务、配置访问权限或移动数据;能自动完成时由代理独立执行。

查看原文
SKILL.md:80来自说明文档打开原文件
- **Grilling** (HITL): Conversation. The default case. Always call the Skill tool twice, for "grilling" and "domain-modeling".- **Task** (HITL or AFK): Manual work that must happen before a _decision_ can be made: nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that _does_ rather than decides, and it earns its place by unblocking a decision, not by delivering the destination. The agent drives it alone where it can (AFK); otherwise it hands the human a precise checklist (HITL). Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on.

创建地图时,它会为每个研究 ticket 并行启动子代理,并让其在临时研究分支上保存结果。

查看原文
SKILL.md:113来自说明文档打开原文件
2. **Map the frontier.** Grill again, **breadth-first** this time: fan out across the whole space rather than deep on any one thread, surfacing the open decisions and the first steps takeable now. **If this surfaces no fog** (the way to the destination is already clear, the whole journey small enough for one session), you don't need a map. Stop and ask the user how they'd like to proceed.3. **Create the map** (label `wayfinder:map`): Destination and Notes filled in, Decisions-so-far empty, the fog sketched into **Not yet specified**.4. **Create the tickets you can specify now** as child issues of the map, then wire blocking edges in a **second pass** (issues need ids before they can reference each other). Wiring sorts them into the frontier and the blocked; everything you can't yet specify stays in the fog: the **Not yet specified** section.5. **Fire the research subagents.** For each `research` ticket you just created, spin up a subagent that calls the Skill tool with "research" to resolve it in parallel, capturing its findings on a throwaway `research/<name>` branch with a context pointer from the ticket.6. Stop: charting is one session's work; it hand-resolves nothing.
从这里开始 · 工作说明SKILL.md
wayfinder
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。
文件与检查记录2 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • agents/openai.yaml已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • agents/openai.yaml配套文件

代码和说明中提到的操作

读取密钥或账号配置
SKILL.md:80来自说明文档打开原文件
- **Grilling** (HITL): Conversation. The default case. Always call the Skill tool twice, for "grilling" and "domain-modeling".- **Task** (HITL or AFK): Manual work that must happen before a _decision_ can be made: nothing to decide, prototype, or research, but the discussion is blocked until it's done. Signing up for a service so its API can be judged, provisioning access, moving data so its shape can be seen. This is the one type that _does_ rather than decides, and it earns its place by unblocking a decision, not by delivering the destination. The agent drives it alone where it can (AFK); otherwise it hands the human a precise checklist (HITL). Resolved when the work is done; the answer records what was done and any resulting facts (credentials location, new URLs, row counts) later tickets depend on.
读取了多少行
135
文件校验值(用于核对版本)
1e067306ffb20753c836500ad47df3179d932d0c78afc44cccce8eee11d9a99b