ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

MemPalace × Antigravity 手工接线指南:hooks.json 与 mcp_config.json 独立配置实战

MemPalace × Antigravity 手工接线指南:hooks.json 与 mcp_config.json 独立配置实战 MemPalace × Antigravity 手工接线指南hooks.json 与 mcp_config.json 独立配置实战【免费下载链接】mempalaceThe best-benchmarked open-source AI memory system. And its free.项目地址: https://gitcode.com/GitHub_Trending/me/mempalaceMemPalace 为 Google Antigravity IDE 提供了一等公民的插件集成通过生命周期钩子Stop 事件后台挖掘会话、PreInvocation 事件注入记忆和 MCP 服务器实现“对话结束自动入库、新对话自动召回”。本文聚焦仓库中 examples/antigravity 目录提供的两套独立配置文件讲解不想运行安装脚本的用户如何手工把 MemPalace 接入 Antigravity覆盖 hooks.json、mcp_config.json 的完整 JSON 结构、落盘位置、验证方法并结合 hooks/antigravity 下的 hook 脚本与公共库源码深入解释钩子的触发门控、stdout 契约、kill switch 与 Python 解释器解析机制。读完本文你将掌握手工接线与自动安装两条路径并具备独立排障能力。一、两套集成方案的定位仓库对 Antigravity 的接入有两种粒度完整插件运行 hooks/antigravity/install.sh一次性注册 MCP 服务器、skill 与两个生命周期钩子安装到~/.gemini/config/plugins/mempalace/。独立配置本文主角examples/antigravity/目录下的 hooks.json 与 mcp_config.json —— 面向“不想使用安装器”的用户提供的两套standalone配置。原文档用一张表界定了两个文件的分工文件用途examples/antigravity/hooks.json独立 hooks.json注册Stop与PreInvocation两个生命周期钩子examples/antigravity/mcp_config.json独立 MCP 配置条目注册mempalace-mcpstdio 服务器从源码目录结构看examples/antigravity/与hooks/antigravity/真实 hook 脚本与安装器分开存放前者是“可复制到 IDE 配置目录的成品片段”后者是“仓库内维护的源实现”。二者最终都会被 Antigravity 发现只是走的路不同。二、手工接线 hooks.json注册 Stop 与 PreInvocation 钩子examples/antigravity/hooks.json 的完整内容如下{ mempalace-save: { Stop: [ { type: command, command: /ABSOLUTE/PATH/TO/mempalace/hooks/antigravity/mempal_save_hook_antigravity.sh, timeout: 30 } ] }, mempalace-wake: { PreInvocation: [ { type: command, command: /ABSOLUTE/PATH/TO/mempalace/hooks/antigravity/mempal_wake_hook_antigravity.sh, timeout: 5 } ] } }两个命名空间对应两类钩子mempalace-save→Stop事件每次 Agent 执行循环终止时触发负责把会话转录后台挖掘进记忆库。mempalace-wake→PreInvocation事件每次模型调用前触发负责注入唤醒记忆。2.1 必须改写占位绝对路径示例使用占位绝对路径/ABSOLUTE/PATH/TO/mempalace/...。原文档明确警告必须把两个command字段改写为克隆仓库中 hook 脚本的真实绝对路径或你存放这些脚本的位置因为Antigravity 不会可靠地解析相对路径。两个脚本的真实位置是hooks/antigravity/mempal_save_hook_antigravity.shhooks/antigravity/mempal_wake_hook_antigravity.sh例如把仓库克隆在/home/me/projects/mempalace则command应写成/home/me/projects/mempalace/hooks/antigravity/mempal_save_hook_antigravity.sh。2.2 两种落盘位置改写路径后将文件放到以下任一位置~/.gemini/config/hooks.json——全局配置对所有 workspace 生效workspace/.agents/hooks.json——workspace 级配置仅对当前工程生效。放置后重启 Antigravity才会被拾取。与官方用户指南 website/guide/antigravity.md 描述的插件路径~/.gemini/config/plugins/mempalace/hooks.json不同手工配置写入的是 hooks.json 自身的发现位置等价于只注册钩子、不注册 skill 与 MCP 的“轻量模式”。2.3 两个 timeout 的语义示例中mempalace-save的 Stop 钩子 timeout 为30 秒mempalace-wake的 PreInvocation 钩子 timeout 为5 秒。结合 hooks/antigravity/STDIN_SHAPE.md 的说明钩子执行超时默认 30 秒MemPalace 插件在渲染出的 hooks.json 里把 Stop 设为 30s、把 PreInvocation 收紧到 5s实际运行中 wake 内部还叠加了 500ms 硬超时见下文。2.4 想自动绝对化路径直接用安装器如果希望路径自动绝对化而不手工编辑可运行安装器bash hooks/antigravity/install.sh它会渲染一份完整的hooks.json到~/.gemini/config/plugins/mempalace/hooks.json。渲染模板即仓库中的 .antigravity-plugin/hooks.json.tmpl——安装脚本在安装期把占位符__PLUGIN_DIR__替换为安装目录的绝对路径逻辑见 install.sh 的render_template函数从而规避了相对路径无法解析的问题。这也是插件版与手工版 hooks.json 的唯一本质差异手工版要求你亲手填绝对路径安装器替你填。三、钩子背后的事件模型与 stdout 契约理解手工接线“为什么这么写”需要先掌握 Antigravity 的 wire format。hooks/antigravity/STDIN_SHAPE.md 完整记录了该契约核心要点通用输入字段每个事件都有全部为camelCaseJSON经 stdin 传入、以 JSON 输出到 stdout字段类型说明conversationIdstring当前 Agent 会话的 UUIDworkspacePathsarray工作区绝对路径首元素为 canonicaltranscriptPathstringtranscript.jsonl的绝对路径artifactDirectoryPathstring会话产物与截图的存放路径Stop 事件附加字段executionNum执行序号、terminationReason如model_stop、max_steps_exceeded、error、error可选、fullyIdle必填后台命令与异步任务是否全部完成。PreInvocation 事件附加字段invocationNum当前模型调用序号从 1 起、initialNumSteps当前轨迹的步数。stdout 契约与 MemPalace 策略——这是整个集成里最重要的一条安全红线Stop 事件的 stdout 可携带decision若值为continue会强制 Agent 继续运行。MemPalace 的 save 钩子永远输出{}并以 0 退出在任何代码路径上都不会构造含continue的 decisionmempal_save_hook_antigravity.sh 中有显式拒绝逻辑否则会造成 Agent 无限循环。PreInvocation 事件的 stdout 可携带injectSteps数组每个元素形如{ephemeralMessage: ...}。MemPalace 的 wake 钩子用这一形式把mempalace wake-up的逐字输出注入首轮且不落盘到转录避免后续调用重复注入。wake 钩子绝不输出decision字段——那是 Stop 事件的专属字段。若只想快速体验手工接线的效果这份契约无需深究但了解它对你判断“钩子是否工作正常”至关重要。四、手工接线 mcp_config.json注册 mempalace-mcpexamples/antigravity/mcp_config.json 内容极简{ mcpServers: { mempalace: { command: mempalace-mcp } } }它注册的是名为mempalace的 stdio MCP 服务器启动命令为mempalace-mcp。这意味着mempalace-mcp可执行文件必须位于 Antigravity 进程可见的$PATH上安装方式见“验证”一节。原文档给出两种接入选项选项 A —— 合并进用户级 Antigravity MCP 配置Antigravity 的用户级 MCP 配置位于~/.gemini/antigravity/mcp_config.json。把本示例中的mcpServers.mempalace条目合并进该文件注意是合并键而不是覆盖整个文件然后重启 Antigravity。选项 B —— 放进插件目录如果你已按官方插件规范创建了自定义插件目录直接把本mcp_config.json复制到插件根目录即可plugin-root/mcp_config.jsonAntigravity 在启动时会自动合并插件级 MCP 条目与用户级配置。这与安装器把 .antigravity-plugin/mcp_config.json内容与本示例完全一致复制到~/.gemini/config/plugins/mempalace/mcp_config.json的行为等价。两种选项可以只选其一也可以都做——Antigravity 会做合并去重。五、验证接线是否生效按原文档的步骤接线完成后无论 hooks、MCP 或两者都做了执行mempalace-mcp --version # 确认二进制在 PATH 上 ls ~/.mempalace/ # 确认 palace 已存在不存在则先运行 mempalace init随后重启 AntigravitymempalaceMCP 服务器应出现在 MCP store工具面板中Stop 与 PreInvocation 钩子应自动开始触发。补充一点更深的验证手段源自 website/guide/antigravity.md检查~/.mempalace/hook_state/antigravity_hook.log——每次钩子触发都会写一行日志。开始新会话应看到[eventpreInvocation]结束一轮对话应看到[eventstop]。若日志为空说明钩子根本没被 IDE 调用应回头检查 hooks.json 的路径与放置位置。运行钩子脚本所需的mempalace包安装可用uv tool install mempalace或pip install mempalace。六、底层行为解析两个钩子究竟做了什么手工接线只是把两个脚本挂到了事件上脚本本身的行为值得展开因为它们决定了“何时挖矿”“何时注入”“何时静默”。6.1 save 钩子Stop 事件触发流程对应 mempal_save_hook_antigravity.shkill switch 检查任一 kill switch 生效则输出{}直接退出见下文表格。解析 stdin用公共库 hooks/antigravity/lib/common.sh 中的mempal_parse_stdin把 camelCase JSON 解析为带哨兵标记的多行字段bash 3.2 安全不依赖mapfile/readarray。解析失败时把原始输入截断 4KB、权限 0600落盘到antigravity_last_input.log便于排障。defer 判定fullyIdle false后台任务还在跑转录仍在变化或terminationReason error转录可能损坏时跳过本次保存。计数每会话计数器antigravity_save_count_conversationId加 1原子写同目录临时文件 mvrename。模运算门控仅当count % MEMPAL_SAVE_INTERVAL 0默认 interval 15即每 15 次 Stop 触发一次挖矿才真正保存。pending 去重若该会话已有进行中的保存marker 文件存在且 1 小时跳过本次过期 marker1 小时会被回收后重试。校验转录路径必须是以.json/.jsonl结尾且不含..穿越的现有文件mempal_is_valid_transcript_path与mempalace.hooks_cli校验一致。后台挖矿派生一个完全脱离前台的后台子 shell执行$MEMPAL_PYTHON_BIN -m mempalace mine $TRANSCRIPT_DIR \ --mode convos \ --wing $WING其中 wing 由 workspace 首路径推断mempal_infer_wing取路径叶子目录小写化、连字符/空格转下划线前缀wing_空输入回退wing_sessions。前台随即输出{}并退出——整个前台耗时控制在毫秒级挖矿在后台不阻塞用户。之所以把可运行性探测-m mempalace --version也放进后台子 shell是因为该探测要付出 chromadb/onnx 冷启动导入成本放前台会打爆 500ms 保存预算源码注释对此有专门说明。6.2 wake 钩子PreInvocation 事件门控流程对应 mempal_wake_hook_antigravity.shkill switch 检查同 save。解析 stdin 取得conversationId、workspace 路径与invocationNum。invocationNum 1门控PreInvocation 在每次模型调用前都触发若不门控每轮对话都会重复注入记忆。只在会话首次模型调用时注入——这是 Antigravity 场景下最接近 CursorsessionStart语义的时机。原子 mkdir 循环守卫antigravity_woke_conversationId目录作为“已唤醒”标记mkdir原子性保证同一会话只注入一次。调用mempalace wake-up --wing inferred以500ms 硬超时Pythonsubprocess.run(timeout0.5)实现跨平台不依赖 GNUtimeout运行。超时、非零退出、空输出任一情况都输出{}会话正常开始、只是无注入——fail-open 是硬性要求。成功时输出{ injectSteps: [ { ephemeralMessage: mempalace wake-up 的逐字输出 } ] }ephemeralMessage只对当前这一轮模型可见、不写入持久转录所以同一会话后续调用不会看到重复记忆。输出前还有一层保险若 stdout 含decision键则拒绝输出防未来改动误把 Stop 形状的对象泄漏给 PreInvocation。6.3 两个钩子的共同基础设施所有状态与日志位于~/.mempalace/hook_state/可用$MEMPAL_STATE_DIR覆盖并以antigravity_前缀命名与 Claude Code、Cursor、Codex 的钩子状态同目录共存文件作用antigravity_hook.log全部钩子活动日志ISO8601Z 时间戳antigravity_save_count_conversationId每会话 Stop 计数antigravity_pending_conversationId进行中挖矿的 markerantigravity_woke_conversationId目录唤醒注入的原子 mkdir markerantigravity_last_input.log解析失败时的原始输入转储4KB 上限、0600antigravity_last_python_err.logJSON 解析器 stderr0600陈旧状态有自动 GCmempal_gc_stale_state每 24 小时至多清扫一次MEMPAL_STATE_TTL_DAYS默认 30 天只清理计数器、pending marker、woke 目录这三类 glob绝不触碰共享日志文件。6.4 kill switch一键静默禁用任一条件成立即静默禁用两个钩子stdout 输出{}、退出码 0相当于 no-op 通过而不卸载插件开关取值MEMPAL_DISABLE_HOOK1、true、yesMEMPALACE_HOOKS_AUTO_SAVEfalse、0、no~/.mempalace/config.json{hooks: {auto_save: false}}删除整个~/.mempalace/相当于核平 palace钩子自动变 no-op逻辑在 common.sh 的mempal_kill_switch_tripped中实现palace 目录不存在是最强信号最先检查。6.5 钩子如何找到你的 mempalace 安装钩子以$MEMPAL_PYTHON_BIN -m mempalace方式运行 CLI因此需要一个能 import mempalace 包的 Python 解释器。mempal_resolve_python的解析顺序首中即停$MEMPAL_PYTHON显式指定读$PATH上mempalace-mcp/mempalaceconsole script 的shebang从中提取解释器——覆盖uv tool install/pipx install的隔离环境这正是 MCP 服务器用的同一个解释器MCP 能起来钩子就能用$PATH上的python3覆盖已激活的 venv 或 editable 开发安装裸python3兜底。仅当 GUI 启动的 Antigravity 无法继承 shell PATH 导致上述启发式失效时才需要显式导出例如export MEMPAL_PYTHON$(uv tool dir)/mempalace/bin/python并加入~/.bashrc/~/.zshrc使 GUI 应用可见。七、常见故障排查速查综合原文档与仓库内两份排障材料hooks/antigravity/README.md、website/guide/antigravity.md常见问题如下钩子完全不触发打开 IDE 的 Customizations 页面确认mempalace出现在插件列表手工接线时确认 hooks.json 落在~/.gemini/config/hooks.json或workspace/.agents/hooks.json。查看~/.mempalace/hook_state/antigravity_hook.log——每次触发都会写行无日志即未被调用。验证渲染后的 hooks.json 里command路径指向可执行文件bash -n ~/.gemini/config/plugins/mempalace/hooks/*.sh。save 触发了但没有挖矿日志中应见count与interval挖矿只在count % interval 0时发生测试期可设MEMPAL_SAVE_INTERVAL1每次触发。若日志出现ERROR: mempalace is not runnable via python -m mempalace; install mempalace or set MEMPAL_PYTHON说明解析到的解释器里没有该包按 6.5 节设置MEMPAL_PYTHON后重启。wake 注入不出现wake 只在invocationNum 1注入注入成功后存在~/.mempalace/hook_state/antigravity_woke_conversationId目录删除它可手动重测mempalace wake-up --wing inferred返回空通常是因为 wing 尚不存在运行mempalace status核实。仓库另有自动测试覆盖这两套钩子的安装与执行语义tests/test_antigravity_hooks_install.py、tests/test_antigravity_hooks_shell.py可作为行为契约的参考实现。八、深入阅读hooks/antigravity/README.md——Antigravity 钩子脚本的完整说明安装产物布局、workspace 级安装进阶用法、排障全表hooks/antigravity/STDIN_SHAPE.md——两个事件的精确 wire format 与逐步示例hooks/antigravity/lib/common.sh——共享工具库解析器、kill switch、wing 推断、解释器解析hooks/antigravity/install.sh——一键安装器模板渲染、绝对化、幂等性、卸载安全护栏website/guide/antigravity.md——面向用户的完整接入指南含共享大脑/多 Agent 章节【免费下载链接】mempalaceThe best-benchmarked open-source AI memory system. And its free.项目地址: https://gitcode.com/GitHub_Trending/me/mempalace创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表