Communitygithub.com

spscream/ai-floppy

编码代理的会话仪式:持久的Git提交记忆、启动仪式、结束仪式以及确保它们诚实的守卫。适用于Claude Code和Cursor插件。

ai-floppy 是什么?

这个技能为AI编码代理(如Claude Code和Cursor)提供了一种结构化的会话仪式,确保代理的持久记忆通过Git提交得到可靠管理。它包括一个初始化脚本,用于设置记忆目录和记忆语言,以及启动和结束仪式,帮助代理在会话之间保持上下文。该技能自动检测插件安装位置(通过`CLAUDE_PLUGIN_ROOT`、`CURSOR_PLUGIN_ROOT`或`AI_FLOPPY_HOME`变量,或插件缓存),并在找不到时给出清晰错误。初始化脚本创建所需的文件结构,但不会覆盖已有内容,而`quota.lock`文件不会被创建——用户需要在实际语料库足够大时自行测量。这有助于保持代码库的整洁和记忆的持久性,避免重复设置。

兼容平台✓Claude Code~Codex CLI✓Cursor
npx skills add spscream/ai-floppy

在你喜欢的 AI 中提问

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

文档

初始化

一个薄包装器。所有工作都在 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 了解原因,并提到一旦有值得测量的语料库,它将需要一个实际测量,而不是在此之前。

相关技能