初始化
一个薄包装器。所有工作都在 scripts/init.sh 中;这个技能的存在是为了询问脚本无法自行回答的两个问题,然后运行它。
1. 询问
用一条简短消息向人类询问:
- 记忆目录 — 该仓库持久记忆所在的位置。如果他们没有理由使用其他名称,建议使用
.agent-memory。 - 记忆语言 — 笔记书写的语言。这与代理回复的语言无关(参见
agent-memory);如果他们没有偏好,建议使用en。
不要默不作声地猜测任一个值 — 错误的记忆目录后面移动起来很烦人,这只需要一个简短的问题。
2. 运行脚本
在运行之前 — 这是写入的一半,将文件放入 --repo . — 确认该目录是人类想要设置的仓库。几个项目可以同时在同一个工具中打开(尤其是Cursor),技能运行的shell不一定就是人类正在讨论的那个。一行命名它就足够了。
任何工具都不能信任会向技能传递插件根目录,因此不要仅依赖一个变量。Claude Code设置 CLAUDE_PLUGIN_ROOT,Cursor设置 CURSOR_PLUGIN_ROOT(2026年8月26日测量),但每个只在某些上下文中设置,而且工具未设置的变量在这里与已设置的变量无法区分。以 .floppy/run 在安装后定位插件的方式定位插件 — 两个工具变量,然后是用于开发的 AI_FLOPPY_HOME,然后是插件缓存下最新的检出 — 如果都没有解析出来,则大声失败,指出安装命令。这重复了 shim/run 的搜索(shim/run:11-26),而不是从那里读取它,因为 .floppy/run 在此仓库中尚不存在 — 下面的脚本做的第一件事就是创建它 — 而且该搜索通常位于此插件复制到消费者中的唯一文件中,该文件必须保持自包含。运行:
has_scripts() { [[ -n "${1:-}" ]] && ls "$1"/scripts/*.sh >/dev/null 2>&1; }
if has_scripts "${CLAUDE_PLUGIN_ROOT:-}"; then
floppy_root="$CLAUDE_PLUGIN_ROOT"
elif has_scripts "${CURSOR_PLUGIN_ROOT:-}"; then
floppy_root="$CURSOR_PLUGIN_ROOT"
elif has_scripts "${AI_FLOPPY_HOME:-}"; then
floppy_root="$AI_FLOPPY_HOME"
else
floppy_root="$(ls -d "$HOME"/.claude/plugins/cache/*/floppy/*/ 2>/dev/null | sort -V | tail -n1)"
fi
if ! has_scripts "$floppy_root"; then
echo "x floppy 插件未找到(没有 scripts/*.sh 的缓存目录算作未找到)。" >&2
echo " 安装它:/plugin marketplace add spscream/ai-floppy && /plugin install floppy" >&2
echo " 如果已安装,重新安装:`plugin update` 在版本未更改时是空操作。" >&2
exit 1
fi
bash "$floppy_root/scripts/init.sh" \
--repo . --memory-dir <他们的答案> --language <他们的答案>
只能以这种方式运行 — 直接通过脚本,而不是通过 .floppy/run — 因为 .floppy/run 在此仓库中尚不存在;创建它是脚本做的第一件事。
3. 报告
以简短形式回读脚本自身的输出:创建了什么,以及已经存在且未动的内容(脚本会按文件说明)。稍后在同一仓库上再次运行此脚本不会改变任何内容 — 这是设计使然,不是一个需要道歉的局限。
明确指出 quota.lock 没有 被创建 — 参见 agent-memory 了解原因,并提到一旦有值得测量的语料库,它将需要一个实际测量,而不是在此之前。