报告没了钱还在?解决 Shannon 运行完无 deliverables 文件夹
1. 案发现场:Token 烧了 50 刀,我的 deliverables 文件夹在哪?
我本以为看着 KeygraphHQ/shannon 终端里的进度条跳到 100% 是一场胜利,结果现实给了我一记响亮的耳光。
当我在 macOS 下跑完一轮完整的 AI 渗透任务,账户里的 Anthropic 额度少了 50 刀,心急火燎地想去翻看 deliverables 文件夹里的漏洞报告时,我发现我的工作区空空如也。不仅没有报告,连个 report.md 的影子都没见着。最让人抓狂的是,明明控制台显示所有 Agent 都完成了任务,却由于一个隐蔽的 deliverables folder not created 错误,让我的白盒扫描变成了彻头彻尾的“黑洞”。
[SUCCESS] [shannon.workflow] All activities completed.
[INFO] [shannon.output] Results are available in ./deliverables
# 现实是:ls ./deliverables 提示 "No such file or directory"
# 查看日志发现:
[ERROR] [shannon.io] Failed to persistence results: FileNotFoundError
[DEBUG] [shannon.agents.doc_recon] Missing: pre_recon_deliverable.md
这种钱花了、事办了、东西没落着的惨状,通常是因为 Shannon 底层那套漏洞百出的异步 IO 逻辑在文件路径映射上玩了“捉迷藏”。
💡 报错现象总结:在使用 Shannon 进行自动化审计时,任务显示 100% 完成但本地 deliverables folder not created。根本原因是
doc_recon与code_analysis阶段的文件命名硬编码冲突(Issue #124),导致后续 Agent 无法在指定路径获取中间交付物,最终工作流因找不到持久化对象而静默跳过输出步骤。
2. 深度排雷:解析 doc_recon 阶段的文件名硬编码“暗雷”
作为一个写了 10 年底层架构的码农,我极其反感官方文档里那种“全自动化”的画大饼。我们直接扒开 src/agents/ 目录下的源码,看看为什么你的报告会“人间蒸发”。
源码追溯:解析文件命名冲突导致的逻辑断层
Shannon 的 Agent 协作链路极其依赖 Temporal 的 Activity 状态传递。在 pre_recon 和 doc_recon 阶段,存在一个极其低级的文件名对不齐 Bug(Issue #124)。
// 模拟 src/agents/pre_recon.ts
// 预侦察 Agent 辛辛苦苦写出了这个文件
const outputFile = "code_analysis_deliverable.md";
await fs.writeFile(path.join(workspace, outputFile), result);
// ... 几分钟后,后续 Agent 启动了 ...
// 模拟 src/agents/doc_recon.ts
// 侦察 Agent 却在死磕这个名字,导致逻辑断裂
const inputFile = "pre_recon_deliverable.md";
const content = await fs.readFile(path.join(workspace, inputFile));
// 这里抛出异常,导致最后的 deliverables 文件夹根本没机会被创建
技术对照:官方默认实现 vs 实际发生的逻辑死锁
| 阶段 | 官方逻辑 (README) | 实际发生的情况 (Trace) | 结果 |
|---|---|---|---|
| Pre-recon | 输出 code_analysis_deliverable.md |
写入成功,占用大量 Token 资源 | ✅ 正常 (但名字错了) |
| Doc-recon | 读取 pre_recon_deliverable.md |
FileNotFoundError | ❌ 逻辑崩溃 |
| Report Gen | 聚合所有 .md 文件至 deliverables |
检查前置依赖失败,静默退出 | ❌ deliverables folder not created |
| IO 映射 | Docker 卷挂载同步 | 容器内路径与宿主机映射权限冲突 | ❌ 报告无法落盘 |
最硬核的真相是,Shannon 官方为了追求所谓的“异步解耦”,在各个 Agent 之间使用了硬编码的字符串来传递文件名。只要其中一个 Agent 的开发者手抖写错了一个字母,你的 50 刀 API 费就相当于打了水漂。
3. 填坑实战:在环境崩溃边缘手动 Patch 的笨办法
如果你非要头铁,打算自己动手修复这个 deliverables folder not created 痛点,你得准备好经历一段极其繁琐的“手术”。
首先,你得钻进 Docker 容器,或者直接修改 src/agents/ 下所有的 Python 和 TypeScript 源码。你需要像个校对员一样,把所有涉及到 deliverable.md 的文件名全部统一。接着,你得在宿主机上手动执行 mkdir deliverables && chmod 777 deliverables,因为 Shannon 的底层 IO 模块在某些 Linux 发行版(如 Ubuntu 22.04)下,并没有权限自动创建该文件夹。
话术铺垫:这一套操作下来,你不仅要精通 Node.js 和 Python 的异步文件操作,还得在 Docker 的权限泥潭里反复横跳。最惨的是,由于官方正在 Sunset Router Mode(Discussion #301),你现在的每一行手动 Patch,可能在下个版本升级时就会因为架构大改而彻底失效。这种“原生态”的修补方式,既低效又容易出错,完全背离了 AI 自动化提效的初衷。
4. 降维打击:一键化解药,让你的报告不再“失踪”
老弟,听哥一句一针见血的话:你的时间应该花在分析漏洞报告上,而不是花在研究为什么文件夹没创建这种低级 Bug 上。
既然我已经把 KeygraphHQ/shannon 所有的文件路径映射逻辑都扒光了,就没必要让你在那儿重复造轮子。我已经把针对 Issue #124 的文件名对齐补丁、以及自动化的目录权限修正脚本全都打包好了。
我已经在 GitCode 为你准备了:
- 文件自动同步修正补丁 patch:一键修复
doc_recon与code_analysis之间的命名冲突,确保报告闭环。 - Shannon 环境增强包:自动检测并修复
deliverables文件夹权限问题,支持本地路径自定义映射。 - Token 节约版调度逻辑:在中间交付物丢失时立即中断并报警,不再白白燃烧你的 API 额度。
Action: 别再让你昂贵的 Token 费变成一堆无法落盘的虚无代码了。想要真正拿到那份属于你的渗透报告?
👉 [点击前往 GitCode 获取文件自动同步修正补丁 patch,一键救回你的报告]
解决 deliverables folder not created 并不是什么高深莫测的技术活,但它是你通往安全审计自动化的最后一道门槛。去 GitCode 拿走这套现成的解药,你会发现,所谓顶级的架构师,其实就是把那些别人还在踩的坑,替你提前填平。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust059
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Hy3-previewHy3 preview 是由腾讯混元团队研发的2950亿参数混合专家(Mixture-of-Experts, MoE)模型,包含210亿激活参数和38亿MTP层参数。Hy3 preview是在我们重构的基础设施上训练的首款模型,也是目前发布的性能最强的模型。该模型在复杂推理、指令遵循、上下文学习、代码生成及智能体任务等方面均实现了显著提升。Python00