
Hindsight 集成 ZCode为 Z.ai GLM 桌面编程代理接入持久化长期记忆【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight导读本文介绍如何通过 Hindsight 为 ZCodeZ.ai 推出的 GLM 桌面编程代理接入持久化长期记忆。ZCode 内嵌 Claude Code 代理运行时并原生支持进程钩子hooks因此无需启动任何 MCP 服务器、也无需改变既有工作流——只需安装一次 Python 钩子脚本Hindsight 就会在每个提示词之前自动召回相关记忆、在每轮对话结束后自动留存对话。读完本文你将掌握hindsight-zcode的完整安装、卸载、配置、连接模式与运行原理并了解三个核心钩子SessionStart / UserPromptSubmit / Stop的底层调用链。Quick Start一分钟接入Hindsight 为 ZCode 提供了独立的 Python 安装包hindsight-zcode安装后通过一次性安装器把钩子脚本写入 ZCode 的配置目录。方式一Hindsight Cloud推荐注册获取 Hindsight Cloud API Key 后执行# 安装 CLI pip install hindsight-zcode # 安装钩子默认连接 Hindsight Cloud hindsight-zcode install --api-url https://api.hindsight.vectorize.io --api-token your-api-key # 重启 ZCode —— 记忆即刻生效方式二本地自托管hindsight-embed不传任何参数即可让插件连接本地的hindsight-embed守护进程hindsight-zcode install卸载hindsight-zcode uninstall卸载会删除钩子脚本并从~/.zcode/cli/config.json中剥离 Hindsight 的条目该文件中其他键与其他第三方钩子以及~/.hindsight/zcode.json个人配置都会被保留。安装器到底做了什么从 install.py 的实现看hindsight-zcode install依次完成四件事复制钩子负载把包内hindsight_zcode/hooks/scripts/整棵脚本树含lib/包复制到~/.zcode/hooks/hindsight/scripts/写入默认配置把settings.json部署到~/.zcode/hooks/hindsight/settings.json并打上安装时的包版本号注册钩子读取包内的 hooks.json 模板把__SCRIPTS_DIR__占位符替换为绝对路径后合并进~/.zcode/cli/config.json的hooks.events块同时强制hooks.enabled: trueZCode 默认关闭配置钩子并设置maxOutputBytes为 32768超过该字节数的钩子 stdout 会被丢弃播种用户配置若~/.hindsight/zcode.json不存在则创建之存放hindsightApiUrl与hindsightApiToken已存在则绝不覆盖。合并逻辑是幂等的通过HOOK_MARKER hooks/hindsight识别既有 Hindsight 条目并替换而非重复追加同时保留 config.json 中的其他键与第三方钩子见 install.py。值得强调的是安装器只会写 ZCode 自己的配置命名空间~/.zcode/cli/config.json绝不会触碰你的 Claude Code 配置~/.claude/settings.json。方式三以 ZCode 插件方式安装免 pipZCode 支持从插件市场直接安装 Hindsight钩子脚本以仅含 hooks 的 Claude Code 插件形式hindsight-zcode发布# 在 ZCode 中添加 Hindsight 市场然后安装插件 zcode plugins add-marketplace vectorize-io/hindsight zcode plugins install hindsight-zcode以插件方式安装时ZCode 会自动注册钩子无需编辑配置文件。凭据通过环境变量HINDSIGHT_API_URL、HINDSIGHT_API_TOKEN或~/.hindsight/zcode.json提供{ hindsightApiUrl: https://api.hindsight.vectorize.io, hindsightApiToken: hsk_your_token }功能总览自动召回Auto-recall每个提示词提交前向 Hindsight 查询相关记忆并作为额外上下文注入对模型可见不写入会话转录自动留存Auto-retain每次回复结束后把该轮对话存入 Hindsight供未来召回无需 MCP纯 Python 钩子脚本直接调用 Hindsight 的 REST API无需任何常驻旁进程跨工具记忆同一 Hindsight bank 可被 Claude Code、Cursor 等其他集成共享记忆跟随你在工具间流动动态 Bank ID支持按工作目录做项目级记忆隔离零运行时依赖钩子脚本是纯 Python 标准库实现pip install只携带一次性安装器pyproject.toml中dependencies []要求 Python 3.11见 pyproject.toml。架构三个钩子事件驱动记忆闭环ZCode 内嵌 Claude Code 代理运行时从自己的配置命名空间~/.zcode/cli/config.json读取标准的 Claude Code 钩子 schema要求hooks.enabled: true。插件接通三个钩子事件钩子脚本事件作用session_start.pySessionStart预热 —— 验证 Hindsight 是否可达recall.pyUserPromptSubmit自动召回—— 查询记忆作为additionalContext注入retain.pyStop自动留存—— 组装本轮对话POST 到 Hindsight三个钩子注册时的超时配置见 hooks.jsonSessionStart 5000ms、UserPromptSubmit 12000ms、Stop 15000ms全部以python3作为process类型钩子命令运行。召回UserPromptSubmitrecall.py在用户点击发送之后、后端请求发出之前触发实现见 recall.py流程如下从 stdin 读取钩子输入prompt、session_id/sessionId、transcript_path、cwd 等对prompt与user_prompt两个字段做防御性兼容把用户提示词暂存到状态文件last_prompt_session_id.json供后续 Stop 钩子配对解析 API 地址外部 API / 本地 daemon 二选一派生 Bank ID 并确保 mission 已设置当recallContextTurns 1时从transcript_path读取转录并组装多轮查询再按recallMaxQueryChars默认 800截断调用 Hindsight recall API携带maxTokens、budget、types、timeout参数格式化记忆并输出符合 Claude CodeUserPromptSubmitschema 的 JSONhookSpecificOutput.additionalContext。注入给模型的上下文块形如hindsight_memories Relevant memories from past conversations (prioritize recent when conflicting). Only use memories that are directly useful to continue this conversation; ignore the rest: Current time - 2026-03-27 09:14 - Project uses FastAPI with asyncpg — not SQLAlchemy [world] (2026-03-26) - Preferred testing framework: pytest with pytest-asyncio [experience] (2026-03-26) /hindsight_memories无论召回成功与否该钩子始终以退出码 0 结束优雅降级绝不阻塞代理主流程。留存StopZCode 没有提供SessionEnd钩子事件因此留存寄生在Stop事件上——每轮对话完成后即存储每一轮是独立的记忆独立document_id。实现见 retain.pyZCode 的 Stop 载荷携带完整助手回复responseText和一个仅含助手消息的临时转录文件transcript_path钩子运行后即被删除不携带用户提示词——所以 retain 依赖 recall 钩子暂存的last_prompt_session_id.json来配对完整的一轮对话助手文本按responseText→ 解析转录中最后一条 assistant 消息 →responsePreview的顺序解析组装[user, assistant]消息列表按retainRoles过滤角色剥离记忆标签后格式化转录应用retainEveryNTurns频率门控默认 1即每轮都存解析 API 地址并派生 Bank ID生成document_id f{session_id}-{ms_timestamp}保证每轮独立、旧轮不被覆盖解析标签模板变量{session_id}、{conversation_id}、{bank_id}、{timestamp}后连同retained_at、message_count、session_id等元数据 POST 到 Hindsight retain API。同样的retain 失败也只写 stderr 日志并以 0 退出代理永不阻塞。连接模式连接模式的选择由hindsightApiUrl是否配置决定优先级逻辑在 daemon.py 中清晰可见外部 API → 已存在的本地服务 → 自动管理的 daemon。模式一外部 API推荐通过~/.hindsight/zcode.json连接运行中的 Hindsight 服务云或自托管{ hindsightApiUrl: https://api.hindsight.vectorize.io, hindsightApiToken: hsk_your_token }hindsightApiUrl必须是http/https协议HindsightClient构造时校验请求带Authorization: Bearer token头并携带自定义User-Agent: hindsight-zcode/version避免自托管环境反向代理按 UA 拦截标准库 urllib 请求见 client.py。模式二本地 Daemon本地运行hindsight-embed。session_start.py钩子会在apiPort默认9077上检测它。守护进程不会由插件自动启动——需要单独启动uvx hindsight-embed然后在配置中留空hindsightApiUrl插件自动连接http://localhost:9077。值得注意的是retain 钩子调用get_api_url(..., allow_daemon_startTrue)即没有外部 API 且本地服务不可达时retain 会尝试自动拉起 daemon而 recall 钩子allow_daemon_startFalse此时 session_start 钩子会在后台预先预热 daemonprestart_daemon_background非阻塞。Daemon 以zcode命名 profile 启动支持daemonIdleTimeout空闲退出、macOS 上强制本地 embedding/reranker 使用 CPU 等细节。配置详解默认配置随安装部署在~/.zcode/hooks/hindsight/settings.json。需要跨版本稳定的个人覆盖请在~/.hindsight/zcode.json中配置。绝大多数设置也可通过环境变量覆盖。加载顺序后加载者生效见 config.py内置默认值插件settings.json~/.zcode/hooks/hindsight/settings.json用户配置~/.hindsight/zcode.json环境变量连接配置配置项环境变量默认值说明hindsightApiUrlHINDSIGHT_API_URLHindsight API 服务器地址。留空 本地 daemon。hindsightApiTokenHINDSIGHT_API_TOKENnullAPI 认证令牌。Hindsight Cloud 必填。apiPortHINDSIGHT_API_PORT9077本地hindsight-embeddaemon 端口。daemonIdleTimeoutHINDSIGHT_DAEMON_IDLE_TIMEOUT0daemon 空闲退出超时秒。embedVersionHINDSIGHT_EMBED_VERSIONlatestdaemon 模式使用的hindsight-embed版本。记忆 Bank 配置配置项环境变量默认值说明bankIdHINDSIGHT_BANK_IDzcode读写使用的 bank。未开启dynamicBankId时所有会话共享。bankMissionHINDSIGHT_BANK_MISSION编码助手提示词描述代理用途创建/更新 bank 时发送。dynamicBankIdHINDSIGHT_DYNAMIC_BANK_IDfalse为true时按dynamicBankGranularity字段派生唯一 bank ID用于项目级隔离。agentNameHINDSIGHT_AGENT_NAMEzcode动态 bank ID 派生中使用的代理名。dynamicBankGranularity—[agent, project]动态 bank ID 的构成字段合法值agent、project、gitProject、session、user。bankMission与retainMission的默认值来自 settings.json前者聚焦技术决策、代码变更、调试会话与项目上下文后者指导记忆引擎提炼技术决策、代码模式、调试方案、用户偏好与架构选择忽略例行寒暄与瞬时操作信息。Mission 只在首次使用时通过set_bank_mission写入一次bank_missions.json状态去重见 bank.py。动态 Bank ID 的项目名解析优先级为ZCODE_PROJECT_DIR环境变量 →workspace_roots[0]→ 钩子载荷中的cwdClaude Code 运行时每个钩子都会设置均缺失时回退为unknown。默认粒度会生成形如zcode::my-project的 bank。自动召回配置配置项环境变量默认值说明autoRecallHINDSIGHT_AUTO_RECALLtrue自动召回总开关。recallBudgetHINDSIGHT_RECALL_BUDGETmid搜索深度low快、mid均衡、high彻底。recallMaxTokensHINDSIGHT_RECALL_MAX_TOKENS1024注入记忆块的 token 预算。recallTimeoutHINDSIGHT_RECALL_TIMEOUT10recall API 调用超时秒。recallTypes—[world, experience]召回的记忆类型。recallContextTurnsHINDSIGHT_RECALL_CONTEXT_TURNS1组成召回查询时参考的历史对话轮数。recallMaxQueryCharsHINDSIGHT_RECALL_MAX_QUERY_CHARS800召回查询的最大字符数。recallRoles—[user, assistant]组装多轮查询时包含的角色。recallPromptPreamble—内置提示语注入上下文块开头的前缀说明。自动留存配置配置项环境变量默认值说明autoRetainHINDSIGHT_AUTO_RETAINtrue自动留存总开关。retainEveryNTurnsHINDSIGHT_RETAIN_EVERY_N_TURNS1每 N 轮留存一次。默认1表示每轮在Stop时都存储。retainRoles—[user, assistant]留存时包含的消息角色。retainContext—zcode留存时上报的上下文标识。retainTags—[{session_id}]留存标签支持{session_id}、{conversation_id}、{bank_id}、{timestamp}模板变量。retainMetadata—{}附加元数据值同样支持模板变量。debugHINDSIGHT_DEBUGfalse向 stderr 输出调试日志。与 ZCode 内置记忆的关系ZCode 自带本地的、按项目隔离的记忆~/.zcode/cli/memories/。Hindsight 与其是互补关系Hindsight 把记忆存放在云端或自托管的 bank 中跨工具共享——同一个 bank 同时支撑 Claude Code、Cursor 及其他 Hindsight 集成——因此你的上下文跟随你跨越不同的代理与机器而不是局限在某个 ZCode 项目的本地目录里。常见问题排查记忆不出现开启debug: true或HINDSIGHT_DEBUGtrue检查HINDSIGHT_API_URL指向的服务器是否可达调试日志通过 stderr 输出。钩子不触发检查~/.zcode/cli/config.json是否为合法 JSON、hooks.enabled是否为true、hooks.events下是否存在 Hindsight 条目ZCode 需要重启会话才能加载新钩子同时确认 shell 的$PATH中能找到python3。本地 daemon 未就绪确认已单独启动uvx hindsight-embed且hindsightApiUrl留空或直接配置外部 API 地址。附仓库中的验证与扩展资源安装/合并/卸载逻辑install.py三个钩子实现recall.py、retain.py、session_start.py配置解析与环境变量映射lib/config.py连接模式与 daemon 生命周期lib/daemon.pyBank ID 派生与 mission 管理lib/bank.pyREST API 客户端纯标准库lib/client.py完整配置默认值settings.json、hooks.json测试hindsight-integrations/zcode/tests/下的test_hooks.py、test_install.py、test_client.py、test_bank.py等mock HTTP 客户端与 stdin/stdout 管道无需真实 Hindsight 服务器即可运行集成包本身零依赖、采用 MIT 许可见 pyproject.toml其 CLI 入口hindsight-zcode暴露install与uninstall两个子命令cli.py其中--api-url与--api-token也支持从环境变量直接读取方便脚本化安装。【免费下载链接】hindsightHindsight: Agent Memory That Learns项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考