关于 craft-anything
Craft Anything 是用于调查已构建软件产物的证据优先技能,涵盖可执行文件、应用、库和捕获数据。它通过记录假设、证据支持的发现与交接来组织分析,并区分观察和推断。
主要功能
- 01调查已发布的软件产物
- 02记录问题简报、计划和交接
- 03跟踪假设与证据支持的发现
- 04区分观察、推导和推断
- 05支持按格式启用工具集
适用场景
- 01调查可执行文件或库
- 02分析应用包或 APK
- 03比较应用的两个版本
- 04检查崩溃转储或网络捕获
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ storytold/ craft-anything --skill craft-anything安装后在 Claude Code 中输入/craft-anything确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
clients.rsconfig.rsdoctor.rslib.rsplan.rsskill_recovery.mdskill.rstests.rstools.rsyaml.rs详细介绍
Craft Anything:以证据为先的调查
当答案取决于某个已构建并发布的产物时,使用 Craft Anything:例如可执行文件、库、应用包、APK、Electron 应用、WebAssembly 模块、固件、崩溃转储或网络捕获。如果你有源代码,而且问题与源代码有关,直接阅读源代码;这样更快、更直接。
仅在需要时连接
- 如果你的工具列表中已经有
craft-anything工具,直接开始工作。不要先运行设置或诊断。 - 相信实时工具列表及其架构,而不是此文件;服务端的版本可能较新或较旧。
- 如果缺少工具或工具无法启动,请运行
craft-anything-cli doctor,然后运行craft-anything-cli setup --dry-run,并在应用任何更改前向用户展示计划。设置成功后,用户必须重启或重新连接其应用。 - 初始列表只包含少量核心工具。调用
list_toolsets查看其他工具集,并调用enable_toolset启用其中一个(原生代码、Android、Apple、Web、运行时等)。 - 在 Clean room(默认关闭 Deep 模式)下,不会读取目标内部的任何内容:只会列出可从外部工作的工具,其他工具会因
details.reason为clean_room而被拒绝。请告知用户此问题需要 Deep 模式(应用中的开关、settings_set deep_mode true,或以--deep启动服务端),而不是设法绕过限制。
工作记忆:保持最新
长期调查往往超出单个上下文窗口。项目会保存简报、计划、假设、发现和交接说明;每次都要使用它们。
- 开始或继续。 先调用
core_investigation_show。如果有交接说明,就从交接说明和计划继续,而不是从头开始。还要调用core_session_show查看当前打开的内容。 - 有新问题? 进行任何分析调用之前,先用
core_brief_write编写简报(问题、提出问题的原因、目标、诸如“不要运行程序”的限制,以及完成后的答案应是什么样),再用core_plan_update编写初始计划(简短的编号步骤,每步标记为todo/doing/done/blocked,并说明原因)。 - 每批工具调用之后: 更新计划步骤的状态。形成值得验证的主张时,用
core_hypothesis_record记录假设及其预测的验证或证伪结果。获得证据后,用core_hypothesis_update更新状态(supported、refuted、abandoned),并附上证据 ID。 - 结论确定时: 用
core_finding_record记录结论,并附上至少一个证据 ID。报告以发现为依据编写,而不是以聊天文本为依据。 - 每轮结束时: 调用
core_handoff_write,说明当前进展、接下来要做什么,以及需要避免的陷阱(无效路径、耗时工具、误导性字符串)。写得要让不熟悉情况的人也能接手。 - 需要了解之前已经尝试过什么时,
core_journal_read会显示每一次先前的工具调用和模型轮次。
方法
- 观察、推导、推断,并注明属于哪一类。 观察事实直接来自字节数据或采集结果。推导事实根据观察结果计算得出(例如控制流图、调用图)。推断则属于判断(例如名称、意图、对模型的解读)。请为每条结论标注类别。
- 为每条结论引用证据 ID(
ev_…)。没有证据 ID 的结论属于假设。 - 缺失不代表证明。“未找到字符串”或“未找到调用方”只涵盖实际搜索过的范围。请说明搜索边界和工具报告的覆盖范围,并为任何重要但尚未确定的事项记录一条未知项(
core_unknown_add)。 - 先预测,再验证。 在运行工具检验假设之前,先写下预期会看到什么。如果结果不符,请更新假设,而不是找借口解释结果。
- 先看摘要,再翻页。 大型结果会以摘要和证据 ID 的形式返回。请按需请求页面(
offset/limit)或具体条目,而不是一次性获取全部内容。不要重复已经成功或被拒绝的相同调用。 - 依据格式判断,而非文件名。 让解析器判断文件类型。
按目标类型选择起点
| 目标 | 第一步 |
|---|---|
| 原生可执行文件或库(ELF、PE、Mach-O) | 调用 core_target_open,然后使用概览、搜索和函数工具 |
Electron 应用、.asar 或 JavaScript 包 | 对应用或归档调用 core_target_open,然后使用 JavaScript 工具集 |
| Android APK / DEX | 调用 core_target_open,然后使用 Android 工具集 |
| .NET 程序集 | 调用 core_target_open,然后使用托管代码工具集 |
| WebAssembly、Go、PE 资源、固件、崩溃转储 | 使用格式工具集 |
| 实时网页或 Electron 窗口 | 使用浏览器工具集(仅观察) |
| 同一应用的两个版本 | 同时打开两者,然后使用应用工具集中的比较工具 |
如果用户只说“我的应用”而未说明具体是哪一个,请询问。切勿用示例文件猜测。
同意与安全
- 运行目标代码或更改已连接设备的工具,需要用户明确同意。如果调用返回
consent_required,请说明该操作会做什么并征求同意;切勿设法绕过。 - 静态分析不会运行目标。仅凭静态证据,不要声称目标具有某种运行时行为;请说明这是推断。
- 切勿在笔记、发现或交接内容中写入机密、Cookie 或个人数据。
出错时
| 错误代码 | 处理方法 |
|---|---|
not_found | 先打开目标(core_target_open),或检查路径或名称 |
feature_missing / engine_missing | 阅读解决方法说明;其中会列出所需的工具集、引擎或设置 |
over_limit | 结果过大,无法发送;请分页查看,或通过证据 ID(evidence://<id> 资源)读取 |
stale_revision | 使用 core_investigation_show 重新读取,合并后重试 |
consent_required | 征求用户同意 |
结束前:将计划中的每个步骤标记为已完成或受阻,确保回答中的每条结论都与已记录的发现一致,列出尚未确定的事项,并撰写交接内容。
评论
支持 Markdown