MemHub 是一个无服务端、Git-first 的个人 AI 记忆协议。本 Skill 让 Agent 能够读取、写入和同步符合 MemHub Protocol v0.1 的记忆仓库。
使用本 Skill 当:
推荐设置(唯一需要的一项):
bash
export MEMHUB_REPO=/path/to/memhub-data
GitHub 默认使用官方 Device Flow。Gitee OAuth 可使用内置 Broker,但 CLI 会先展示固定 Broker 域名并要求用户确认;非交互环境必须显式传入可信 Broker 或自己的 OAuth 配置。
可选配置项只写在进程环境或显式 --env-file 中,不要写进 Skill、仓库或聊天:
MEMHUB_OAUTH_BROKER_URL:明确选择的通用 Broker;MEMHUB_GITEE_OAUTH_BROKER_URL:仅用于 Gitee 的可信 Broker;MEMHUB_GITHUB_CLIENT_ID、 MEMHUB_GITEE_CLIENT_ID:自有 OAuth App client id;MEMHUB_GITEE_CLIENT_SECRET:Gitee 直连模式的 client secret;MEMHUB_GITHUB_TOKEN、 MEMHUB_GITEE_TOKEN:token fallback。必须通过 --repo 或 MEMHUB_REPO 明确指定专用记忆仓库;CLI 不会把当前目录隐式当作记忆仓库。
CLI 不会自动读取当前目录或 home 目录的通用 .env。如确需文件配置,显式传入
--env-file /path/to/memhub.env;只会加载受支持的 MEMHUB_* 键。
机器可读版本见同目录 permissions.json;下面的散文说明与它一致。
context、 search、 inbox list/show、 doctor 是只读操作; doctor 默认完全离线,只有显式加 --network 才会探测已配置的 broker。remember、 forget --apply、 promote --apply、 init 会修改记忆仓库;只有用户当前请求明确要求对应写入时才执行。sync、 sync setup、 onboard 会访问网络或修改 Git 状态;只有用户当前请求明确要求同步或配置时才执行。sync setup/ onboard 是用户明确发起的同步授权,完成后保留原有节流自动同步;用户可传 --manual-sync 关闭。.. 越界。git 一个外部命令会被调用,且不经过 shell;凭据只经子进程环境传递,不出现在 argv。sync setup / onboard / sync 被用户显式调用时发生。forget 是软归档,不删文件、不改写 Git 历史。本 Skill 提供一个 Python CLI: scripts/memhub.py。
bash
# 初始化仓库
python scripts/memhub.py --repo ~/memhub-data init --name dateng --role "Product Manager"
# 读取上下文
python scripts/memhub.py --repo ~/memhub-data context
python scripts/memhub.py --repo ~/memhub-data context --pack brief
# 记忆:默认直写 canonical 并本地提交;是否自动推送取决于同步配置
python scripts/memhub.py --repo ~/memhub-data remember "用户偏好结构化直接的回答" --type preference --source agent
python scripts/memhub.py --repo ~/memhub-data remember "MemHub 采用 Git-first 架构" --type decision --project memhub --source agent
# 低置信/待人工复核的内容才进 inbox 审计缓冲
python scripts/memhub.py --repo ~/memhub-data remember "也许该支持 Notion 导出" --type fact --inbox --source agent
# 检索与遗忘
python scripts/memhub.py --repo ~/memhub-data search "Git-first"
python scripts/memhub.py --repo ~/memhub-data search "决策" --type decision --project memhub
python scripts/memhub.py --repo ~/memhub-data search "旧偏好" --include-archived # 含已归档
python scripts/memhub.py --repo ~/memhub-data forget "过时的偏好" # 预览
python scripts/memhub.py --repo ~/memhub-data forget "过时的偏好" --apply # 软归档(status=archived)
# 将 inbox 缓冲项归档到 canonical(仅 --inbox 写入的内容才需要)
python scripts/memhub.py --repo ~/memhub-data promote --dry-run
python scripts/memhub.py --repo ~/memhub-data promote --apply
python scripts/memhub.py --repo ~/memhub-data promote --status all --apply # 扫全部 inbox 项
# 检查 inbox
python scripts/memhub.py --repo ~/memhub-data inbox list
python scripts/memhub.py --repo ~/memhub-data inbox list --status all
python scripts/memhub.py --repo ~/memhub-data inbox show <filename-or-id-fragment>
# 将 inbox 半自动归档到 canonical memory
python scripts/memhub.py --repo ~/memhub-data promote --dry-run
python scripts/memhub.py --repo ~/memhub-data promote --apply
python scripts/memhub.py --repo ~/memhub-data promote <filename-or-id-fragment> --apply
# 导出给 chatbot 的上下文
python scripts/memhub.py --repo ~/memhub-data export chatbot
# 首次接入(推荐):授权 + 自动判断拉取已有记忆 / 初始化新仓库
python scripts/memhub.py --repo ~/memhub-data onboard github --repo-name mymemhub
python scripts/memhub.py --repo ~/memhub-data onboard gitee --repo-name mymemhub --broker-url https://<trusted-broker>
# 同步 GitHub/Gitee(手动分步)
python scripts/memhub.py --repo ~/memhub-data sync setup github --repo-name mymemhub
python scripts/memhub.py --repo ~/memhub-data sync setup gitee --repo-name mymemhub --broker-url https://<trusted-broker>
python scripts/memhub.py --repo ~/memhub-data sync setup github --auth token --repo-name mymemhub
python scripts/memhub.py --repo ~/memhub-data sync setup github --auth ssh --remote-method ssh --owner <login> --repo-name mymemhub --no-create
python scripts/memhub.py --repo ~/memhub-data sync status
python scripts/memhub.py --repo ~/memhub-data sync
# 自检:确认本机/本仓库的自动同步是否就绪(remote/token/merge driver/MEMHUB_REPO 等)
python scripts/memhub.py --repo ~/memhub-data doctor
context --pack 有四档,逐档累加内容:
brief:用户画像、最重要的偏好、当前项目及最近决策(用于注入 chatbot)。standard(默认):brief + 约束、惯例、未完成任务。project:聚焦默认/指定项目,决策与任务更全。full:standard + knowledge、relations、最近 timeline。export chatbot 默认用 brief;若存在 .memhub/templates/context-pack.md.j2,则用该模板渲染(支持 {{ name }} 等占位符)。
MEMHUB_REPO 是用户记忆仓库;不要把用户记忆写入代码仓库。--inbox。sync setup 会触发授权、创建仓库、修改 remote; 只有用户明确要求配置/切换同步时才执行。本会话首次涉及记忆时,先跑一次自检确认自动同步就绪(每个会话只需一次,不要每轮都跑):
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" doctor
NOT ready(有 ✗),说明自动同步未生效。按提示补齐:缺 remote → 提示用户
sync setup;缺 token(常见于新机器)→ 引导用户重新授权;其余 ✗ 同理。 不要静默忽略,
否则用户会误以为在自动同步,实际没有。! 提示,继续正常流程。--network 才探测 broker),开销很小;但仍只需每会话首次跑一次即可。.memhub/secrets.yaml,会提示可以删除。确认就绪后,直接读取 context。仅当用户已通过 setup/onboard 授权自动同步时,
context 才会按节流阈值从远端拉取最新记忆:
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" context --pack brief
pull_throttle_seconds, context 会自动 pull --rebase 再输出。sync 后再读。当用户明确要求记忆,或已经明确启用了对应自动记忆策略时,默认 直写 canonical:
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" remember "内容" --type fact --source agent
--inbox 进审计缓冲,之后再 promote。类型建议:
decision:明确决策preference:稳定偏好fact:事实knowledge:可复用知识/结论event:重要事件relation:人物/组织/工具关系constraint:约束convention:惯例只有用户明确执行 setup/onboard 后才会配置 remote;此后保留原有的节流自动同步。
若用户传入 --manual-sync,则关闭自动 pull/push,只保留显式 sync:
remember / forget --apply / promote --apply 后,CLI 会
自动尝试推送。距上次推送不足 sync.push_throttle_seconds(默认 3600 秒)时只在本地提交,
超过阈值才真正 pull+push。 记忆始终立即落本地,绝不丢失。context 命令会在 sync.pull_throttle_seconds(默认 3600 秒)阈值外
自动 pull --rebase 拉取其它设备的最新记忆;拉取失败则用本地并在 stderr 提示可能不是最新。显式 sync 命令 忽略节流,立即 pull+push,适合在对话收尾兜底,确保本次所有记忆都已上远端:
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" sync
节流阈值与开关都在 .memhub/config.yaml 的 sync 段( auto_push/ auto_pull /
push_throttle_seconds / pull_throttle_seconds);节流时间戳记在本机 .memhub/cache/sync.yaml
(git 忽略,每台设备独立)。单次写入若想跳过自动推送,加 --no-sync。
init/ sync 会自动注册结构化 merge 驱动(local git config 不随 clone 走,故每台设备首次
sync 会自愈补注册),多设备对同一记忆文件的并发追加可自动合并,不会冲突。
换新机器/新 Agent 时:凭据存在记忆仓库 之外 的机器本地目录(macOS 默认
~/Library/Application Support/memhub/secrets/,Linux 默认~/.local/state/memhub/secrets/, 可用MEMHUB_SECRETS_DIR覆盖),因此不随 clone 或同步走,新机器需要 重新授权一次。 先跑doctor自检,按提示补齐 remote/token 即可——全绿后自动同步即就绪。
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" search "关键词" --type decision --project memhub
python scripts/memhub.py --repo "$MEMHUB_REPO" forget "过时内容" # 预览
python scripts/memhub.py --repo "$MEMHUB_REPO" forget "过时内容" --apply # 软归档
forget 默认 dry-run; --apply 把命中条目 status 置为 archived,使其从 context pack
消失但保留在 Git 历史中,可审计、可回滚。forget 旧条目 + remember 新条目。新 agent / 新机器第一次接入时, 用 onboard 一条命令完成全流程,它会自动判断该
"拉取已有记忆"还是"初始化新仓库",避免用默认数据污染你已有的真实记忆:
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" onboard gitee --repo-name mymemhub --broker-url https://<trusted-broker>
python scripts/memhub.py --repo "$MEMHUB_REPO" onboard github --repo-name mymemhub
onboard 的流程:
授权(GitHub 默认走官方 Device Flow;Gitee Broker 必须显式指定)。
探测远端 是否已有 MemHub 记忆仓库(含 .memhub/config.yaml):
注册 merge 驱动,并按用户选择启用节流 auto-sync 或 --manual-sync。
打印 doctor 自检结果。
完成 setup/onboard 后,默认维持原有节流自动同步;如果用户选择 --manual-sync,则只在
显式执行 sync 时联网。新机器换设备时优先用 onboard,不要先 init 再 sync setup
(那会先播种默认数据,可能污染远端真实记忆)。
onboard 内部会调用 setup。只有当你想单独配置/切换 remote、且明确知道本地数据状态时,
才直接用 sync setup。当用户说“配置同步”、“连接 GitHub/Gitee”、“换成 Gitee/GitHub 同步”时,
优先用 onboard。
GitHub 默认走官方 Device Flow。Gitee 交互式配置会先展示内置 Broker 域名并请求确认;
非交互环境必须通过 --broker-url 或 MEMHUB_GITEE_OAUTH_BROKER_URL 明确指定,
也可以使用自己的 client secret 直连。
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" sync setup github --repo-name mymemhub
python scripts/memhub.py --repo "$MEMHUB_REPO" sync setup gitee --repo-name mymemhub --broker-url https://<trusted-broker>
显式选择 Broker 时的授权流程:
auth_url。MEMHUB_SECRETS_DIR 覆盖)。无浏览器环境:加 --no-browser,CLI 会打印 URL 由用户手动打开。
--broker-url https://your-broker 或设 MEMHUB_OAUTH_BROKER_URL /
MEMHUB_GITEE_OAUTH_BROKER_URL。MEMHUB_GITEE_CLIENT_SECRET;
GitHub 会回退到 Device Flow。bash
python scripts/memhub.py --repo "$MEMHUB_REPO" sync setup github --auth token --repo-name mymemhub
python scripts/memhub.py --repo "$MEMHUB_REPO" sync setup github --auth ssh --remote-method ssh --owner <login> --repo-name mymemhub --no-create
inbox、canonical 文件或 .git 历史。git pull --rebase 冲突,停止自动处理,报告冲突文件,让用户/Agent 单独修复。remember 默认直写 canonical,无需 promote。只有用 --inbox 缓冲过的低置信/待复核内容
才需要 promote。整理 inbox 时先预览:
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" inbox list
python scripts/memhub.py --repo "$MEMHUB_REPO" promote --dry-run
确认归档目标合理后再执行(默认 dry-run,须显式 --apply;已启用 auto-sync 时才按节流自动推送):
bash
python scripts/memhub.py --repo "$MEMHUB_REPO" promote --apply
promote 默认只扫 pending 的 inbox 项,可用 --status all 扫全部。归档路由规则:
decision → projects/<project>/decisions.yamlpreference → identity/preferences.yamlconstraint → identity/constraints.yamlconvention → identity/conventions.yamlknowledge → knowledge/product.yamlrelation → relations/people.yamlfact / event → timeline/YYYY-MM.yaml不要写入:
如果用户明确要求保存重要决策、偏好或事实,或已经明确启用了对应自动记忆策略:
remember 直写记忆(低置信内容用 --inbox,必要时 promote)。sync。permissions.json 是本 Skill 的权限边界声明(文件/网络/凭据/变更),供扫描器与人工复核直接读取:
MEMHUB_REPO 内;绝对路径与 .. 越界一律拒绝。MEMHUB_REPO 之外的本机目录,文件 0600、目录 0700。sync setup / onboard / sync 被显式调用后才访问 github.com / gitee.com。repo);Gitee 直连 OAuth 每次生成并校验 state,防止把别人的账号绑定到本仓库。--broker-url 或 MEMHUB_*_OAUTH_BROKER_URL 明确指定主机。doctor 默认离线;需要探测 broker 时显式加 --network。SKILL.md、README、示例或提交历史。.memhub/secrets.yaml 只作为一次性读取的迁移来源。SKILL.md、 README.md、 permissions.json、 scripts/memhub.py、 templates/context-pack.md.j2。__pycache__、 .pyc、 .git 或用户个人记忆数据。