公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-25 14:44 UTC

yoloshii / ClawMem

On-device memory layer for AI agents. Claude Code, Hermes and OpenClaw. Hooks + MCP server + hybrid RAG search.

TypeScriptMIT★ 194 星标⑂ 32 复刻始于 2026年2月在 GitHub 上查看 ↗

yoloshii/ClawMem 的健康指数为 100 分中的 59 分,处于「中等」区间。 其得分最高的类别是Vitality(81/100),最低的是Security(42/100)。 最近一次更新在 5 天前。 近期的大部分工作由 1 位贡献者完成。

59
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

59
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

0 关注者34 个公开仓库始于 2017年4月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

81良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 5 天前
12.5/36提交节奏 — 52 周中有 18 周有提交
18/18提交量 — 最近一年 286 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year286
human_commit_share1
days_since_last_push5
active_weeks_last_year18

发布纪律

88优秀
评分方式
16.2/27有发布版本 — 69 个版本标签(无 GitHub 发布版本)
36/36发布时效 — 最近一次发布版本于 5 天前
27/27发布节奏 — 约每 1.4 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count69
latest_release_tagv0.28.0
releases_from_tags
days_since_latest_release5
mean_days_between_releases1.4
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

67中等 · 占总体的 18%
评分方式
37.1/60星标 — 194 个星标
12.4/25复刻 — 32 个复刻
1.7/15关注者 — 3 位关注者
所用输入
forks32
stars194
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

92优秀
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
18/18CONTRIBUTING 指南
13.5/13.5行为准则
0/7.2议题模板
6.3/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
47.3/80月度下载量 — npm 合计每月 3,556 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesclawmem
dependents
ecosystemsnpm
total_downloads
monthly_downloads3,556
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

51中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0.6/22.5提交分布 — 头号贡献者编写了 97% 的提交
8.1/13.5贡献者广度 — 6 位贡献者
0/10OpenSSF Scorecard:Contributors — project has 0 contributing companies or organizations -- score normalized to 0
所用输入
bus_factor1
contributors_sampled6
top_contributor_share0.972
评分方式
40.1/46.8议题解决 — 86% 的议题已关闭
21.2/38.3PR 接受 — 已裁定的 PR 中 5/9 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs5
open_issues1
closed_issues6
issue_closed_ratio0.857
closed_unmerged_prs4
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
0/25所有者影响力 — yoloshii 有 0 位关注者
23.2/25既往记录 — 34 个公开仓库,账户约 9 年
所用输入
followers0
owner_typeUser
is_verified
owner_loginyoloshii
public_repos34
account_age_days3,400
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — npm 上有 1 个软件包
35/35发布时效 — 最近一次发布于 5 天前
20/20版本历史 — 68 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesclawmem
ecosystemsnpm
any_deprecated
min_days_since_publish5

工程质量

基础的工程与文档实践是否到位?

52中等 · 占总体的 20%

工程实践

30存在风险
评分方式
0/24CI 工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
0/20OpenSSF Scorecard:CI-Tests — 无数据
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config
已排除计分(无数据或不适用):OpenSSF Scorecard:CI-Tests。 其余权重已重新归一化。

文档

85优秀
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 20 个主题标签
10/10Wiki
所用输入
topicsai-agent-memory, ai-agents, bun, claude-code, embeddings, hybrid-search, llama-cpp, local-first, mcp-server, mcp-tools, model-context-protocol, on-device-ai, rag, retrieval-augmented-generation, sqlite, typescript, vector-search, memory, plugin, hermes
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

42存在风险 · 占总体的 16%

安全态势

31存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 无数据
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — 无数据
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — 无数据
0/7.5Vulnerabilities — 91 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate3.1
已排除计分(无数据或不适用):ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
13.2/25间接依赖不含已知公告 — 1 个受影响:@hono/node-server 1.19.15 (moderate 5.9)
40/40没有长期未处理的公告 — 没有公告公开超过 90 天
所用输入
sourceosv
advisories1
affected_packages1
assessed_packages234
unassessed_packages0
affected_by_severitymoderate 1
direct_affected_packages0
比对的是 npm:clawmem@0.28.0 的运行时依赖闭包——安装已发布的软件包时真正被拉取进来的内容——共 234 个软件包。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

61中等 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 95 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.95
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes22,784
评分方式
0/18一条命令的引导启动
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — tsconfig.json
10/10可复现环境 — Dockerfile
2/10已体现的代理实践 — 最近 100 次提交中有 1 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configstsconfig.json
agent_commit_share0.01
toolchain_manifests
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — TypeScript(静态类型)
54.1/55可控的文件大小 — 采样的 180 个源文件中有 3 个超过 60KB
所用输入
primary_languageTypeScript
largest_source_bytes243,047
source_files_sampled180
oversized_source_files3
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
20/20MCP 服务器
0/40可运行示例
所用输入
example_dirs
has_mcp_signal
api_schema_files

关键数据

194GitHub 星标
6贡献者
286最近 12 个月提交数
5距最近推送天数
69发布版本数
1巴士系数(bus factor)
1开放议题
npm软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

更多细节

Star 与 Fork 历史 0 ★ / 32 ⇿
0Star
32Fork
61发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

01325383222026-032026-052026-07
主版本 0次版本 18修订 43
OpenSSF Scorecard 3.1 / 10
3.1综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-25 14:44 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
不适用CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
不适用Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
不适用Signed-Releasesno releases found
不适用Token-PermissionsNo tokens found
0Vulnerabilities91 existing vulnerabilities detected
直接依赖 6
注册表软件包版本约束清单文件
npm@modelcontextprotocol/sdk^1.25.1package.json
npmgray-matter^4.0.3package.json
npmnode-llama-cpp^3.14.5package.json
npmsqlite-vec^0.1.7-alpha.2package.json
npmyaml^2.8.2package.json
npmzod^4.2.1package.json
全部依赖 未采集

本报告未能采集到解析后的依赖集合:GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

依赖安全公告 1

安装 npm:clawmem@0.28.0 会引入 234 个包(直接与传递):其中 1 个存在已知公告,0 个为直接依赖。

软件包版本关系严重程度公告数修复版本
@hono/node-server1.19.15间接12.0.5

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "ai-agent-memory",
        "ai-agents",
        "bun",
        "claude-code",
        "embeddings",
        "hybrid-search",
        "llama-cpp",
        "local-first",
        "mcp-server",
        "mcp-tools",
        "model-context-protocol",
        "on-device-ai",
        "rag",
        "retrieval-augmented-generation",
        "sqlite",
        "typescript",
        "vector-search",
        "memory",
        "plugin",
        "hermes"
      ],
      "is_fork": false,
      "size_kb": 11405,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "HTML": 53,
        "Shell": 2560,
        "Python": 44953,
        "Dockerfile": 865,
        "TypeScript": 2726515
      },
      "pushed_at": "2026-07-19T15:51:47Z",
      "created_at": "2026-02-06T14:34:04Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T20:36:45Z",
      "description": "On-device memory layer for AI agents. Claude Code, Hermes and OpenClaw. Hooks + MCP server + hybrid RAG search.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Yoloshi Nomotomoro?",
      "type": "User",
      "login": "yoloshii",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/26873046?v=4",
      "created_at": "2017-04-03T13:02:46Z",
      "is_verified": null,
      "public_repos": 34,
      "account_age_days": 3400
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.28.0",
          "kind": "minor",
          "published_at": "2026-07-19T15:51:27Z"
        },
        {
          "tag": "v0.27.0",
          "kind": "minor",
          "published_at": "2026-07-18T08:02:00Z"
        },
        {
          "tag": "v0.26.0",
          "kind": "minor",
          "published_at": "2026-07-18T05:40:51Z"
        },
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2026-07-18T04:35:11Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2026-07-10T15:17:50Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-07-10T11:28:43Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-07-10T09:46:19Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2026-07-10T06:56:36Z"
        },
        {
          "tag": "v0.20.2",
          "kind": "patch",
          "published_at": "2026-07-07T08:03:13Z"
        },
        {
          "tag": "v0.20.1",
          "kind": "patch",
          "published_at": "2026-07-07T07:40:46Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2026-07-05T14:37:16Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-07-04T19:32:58Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-07-04T16:08:50Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-07-01T18:47:41Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-07-01T15:37:47Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-06-25T19:55:04Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-06-25T14:31:24Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-06-25T09:09:36Z"
        },
        {
          "tag": "v0.11.3",
          "kind": "patch",
          "published_at": "2026-06-24T17:13:16Z"
        },
        {
          "tag": "v0.11.2",
          "kind": "patch",
          "published_at": "2026-06-23T20:00:05Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2026-06-23T19:45:39Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-06-22T17:13:23Z"
        },
        {
          "tag": "v0.10.7",
          "kind": "patch",
          "published_at": "2026-05-20T19:22:28Z"
        },
        {
          "tag": "v0.10.6",
          "kind": "patch",
          "published_at": "2026-05-20T14:47:36Z"
        },
        {
          "tag": "v0.10.5",
          "kind": "patch",
          "published_at": "2026-05-15T09:37:36Z"
        },
        {
          "tag": "v0.10.4",
          "kind": "patch",
          "published_at": "2026-05-08T10:15:25Z"
        },
        {
          "tag": "v0.10.3",
          "kind": "patch",
          "published_at": "2026-05-04T10:40:26Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2026-04-28T12:38:49Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2026-04-19T03:52:58Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-04-13T13:42:06Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-04-13T04:02:25Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2026-04-13T00:08:15Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2026-04-11T14:26:26Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2026-04-10T03:57:01Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2026-04-10T01:11:51Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2026-04-09T22:50:15Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-04-09T22:09:06Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-04-09T21:11:44Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-04-09T19:56:40Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-04-08T10:58:11Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-04-08T07:51:21Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-04-08T05:59:49Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-04-08T04:03:51Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-04-04T19:12:43Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-04-04T18:49:34Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-04-04T18:42:47Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2026-04-02T14:30:16Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2026-04-02T13:59:14Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-04-02T13:20:03Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-04-02T12:43:16Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-03-31T09:41:07Z"
        },
        {
          "tag": "v0.2.9",
          "kind": "patch",
          "published_at": "2026-03-31T08:44:14Z"
        },
        {
          "tag": "v0.2.8",
          "kind": "patch",
          "published_at": "2026-03-30T14:24:06Z"
        },
        {
          "tag": "v0.2.7",
          "kind": "patch",
          "published_at": "2026-03-28T15:50:49Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2026-03-25T11:59:27Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2026-03-25T10:47:58Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2026-03-24T14:33:04Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-03-24T05:20:24Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-03-23T20:18:37Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-03-23T19:34:01Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-03-23T18:42:11Z"
        },
        {
          "tag": "v0.1.8",
          "kind": "patch",
          "published_at": "2026-03-20T12:52:59Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2026-03-17T08:08:41Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2026-03-17T06:25:46Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-03-17T00:11:40Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-03-16T23:48:32Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-03-16T22:43:28Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-03-16T06:46:37Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-03-16T01:24:05Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "41fd12153e23491921673cfe11aab017b8151078",
          "body": "…owed\n\nPhase 1 hardened what reached the mutation boundary. This repairs the boundary\nitself: two contract defects meant no classification could ever be applied.\n\nThe lookup was handed a virtual `clawmem://collection/path` URI where it matched\nthe bare `documents.path` column, so no candidate resolv\n[…]\non.\n\nSuite 1,775/0. Cross-model adversarial review (codex / GPT-5.6) across seven\nturns to zero findings; every regression claim mutation-verified by reverting\nthe fix and confirming which tests fail.",
          "is_bot": false,
          "headline": "v0.28.0 — repair the contradiction write path, ship invalidation shad…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-19T15:51:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ee715fb475a0691b91a5c705ad04d25ef15c90f5",
          "body": "Two Stop-hook write paths (A-MEM causal inference, contradiction detection)\nreported success while persisting nothing: counters incremented per candidate\nagainst INSERT OR IGNORE, so a total write failure was indistinguishable from a\nhealthy run. This makes the reporting truthful and hardens validat\n[…]\nrites .last-message and .turn-result\nsiblings the exact-name rule did not match.\n\nSuite 1751/0 (guard file 22 -> 45). Cross-model adversarial review to verbatim\n\"zero remaining findings\", nine rounds.",
          "is_bot": false,
          "headline": "v0.28.0 — hook write-path contracts: extraction guards, honest counters",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-19T13:49:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "905c2e962cf4ec1246f35a8e9eb13f6477a43752",
          "body": "…changed\n\nPre-registered ship-or-kill experiment (cross-model adversarial design pass,\n5 turns / 20 findings to CLEAR) adapting Sibyl-Memory's FTS5 proximity buckets\nto the `search` raw route, measured one-shot against the frozen s49.2 keyword\nbundle. Verdict on the frozen rule: KILL — three gates f\n[…]\nnow (applies to s49.3-bypass too)\n- tests/unit/proximity.test.ts — 25-test matrix keeps the record healthy\n- .gitignore — .codex-review/ (internal review artifacts) now actually ignored\n\nSuite 1706/0.",
          "is_bot": false,
          "headline": "§51.6 proximity-bucket re-rank experiment: KILL — search raw route un…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-18T10:15:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "93bd05ba1f4d53afedb22a9e6e12159d5e810f97",
          "body": "…ere written\n\nConfirmed recency-contamination fix: documents gain a nullable authored_at\naxis captured from transcript timestamps at mine time (strict per-format\nadapters, exchange-level stamping), inherited by synthesized facts,\nhonored from frontmatter vault-wide, and backfillable metadata-only\n(m\n[…]\nw tests). Design-first: adversarial DESIGN pass\ncleared in 6 turns (29 findings), implementation in 3 (7 findings),\nentity fix in 1 — cross-model (codex / GPT-5.6) to verbatim zero\nremaining findings.",
          "is_bot": false,
          "headline": "v0.27.0 — authorship time (authored_at): memories rank by when they w…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-18T08:02:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c51d525e9d0e3e11d9f1552054af205838ae4b6",
          "body": "…ry-query gate fix",
          "is_bot": false,
          "headline": "v0.26.0 — offline eval harness (evidence-overlap replay) + short memo…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-18T05:40:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc6589c1eb4e83854f052295b2df79331f67d745",
          "body": "… half-life (§36.11) + entity-neighbor hub-bias fix (BL-001)",
          "is_bot": false,
          "headline": "v0.25.0: extraction retry-with-error-feedback (§13.1) + decision 180d…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-18T04:35:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "580f3cbb8ae6dff3e0f8faa7abba371efd928079",
          "body": "…bypass A/B toolkit\n\nS49.2 judged keyword eval (pre-registered; 6-turn design gate + 4-turn\namendment gate, cleared to verbatim zero-findings): raw-BM25-primary beat\nthe shipping composite decisively — combined MRR 0.848 vs 0.415, hit@1\n33 vs 6, held-out 0.875/16-at-#1 vs 0.335/0 (composite missed i\n[…]\nding,\n  introduction, README, AGENTS, SKILL, RELEASE_NOTES\n\nSuite: 1,542 pass / 0 fail. Independent cross-model adversarial review:\ndesign T25-T30 + amendment T31-T34 + impl T35-T36, cleared verbatim.",
          "is_bot": false,
          "headline": "v0.24.0: raw-BM25-primary ranking for search (judged keyword eval) + …",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-10T15:17:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9205ac295132980115900f5f0fb9220651b9403",
          "body": "…a constant)\n\nFTS5 bm25() is negative-is-better (≤ 0 on every match; 0/4,962 positive rows\nmeasured on a production vault), so searchFTS's exposed score\n1/(1+Math.max(0,bm25)) was EXACTLY 1.0 for every result: composite ranking on\nthe FTS surfaces (search, REST keyword, CLI, memory_retrieve keyword \n[…]\nual golden and regression-sensitive deep-escalation\nblend arithmetic. Follow-on: BACKLOG 49.2 (judged keyword eval + bypass\nfiring report) and 49.3 (query-pipeline A/B before bypass-threshold tuning).",
          "is_bot": false,
          "headline": "v0.23.0 — monotonic BM25 exposed score (the FTS relevance signal was …",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-10T11:28:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96efe3580341c4db45fa796d27ebe8d4115d6dad",
          "body": "Rank vsearch and memory_retrieve semantic/discovery by RAW vector cosine on\nnon-recency queries (scoreBasis \"vector-cosine\"); document metadata — including\npin — breaks exactly-equal raw-score ties only (pinned, then legacy composite,\nthen path). Measured basis: raw cosine ranked 16/19 judged target\n[…]\n 0.870; held-out\nhit@1 17/20 hit@5 19/20 MRR 0.879 vs floors 12/17/0.75. Cross-model DESIGN\ngate (5 turns, 14 findings) + implementation review (2 turns, 5 findings) to\nzero findings; bun test 1507/0.",
          "is_bot": false,
          "headline": "v0.22.0 — raw-similarity-primary ranking for the direct vector routes",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-10T09:46:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e79ef17b24c172a9e31c5866be4ce89c3593b926",
          "body": "…nt tooling)\n\nRead-only evaluator that mirrors the MCP direct vsearch pipeline\n(searchVecDetailed with the production _clawmem exclusion → enrichResults →\ncomposite → minScore) and re-scores the same per-query candidate pool under\ntoggled configs (weights mix, length norm, quality, co-activation, fr\n[…]\nrs can never come from a stale copy. Reports hit@1/hit@5/MRR/\nmean-rank/below-minScore per config plus a no-target control row for\nfalse-positive pressure. eval-queries*.json stays local (gitignored).",
          "is_bot": false,
          "headline": "scripts: composite-multiplier ablation harness (Source 48.1 measureme…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-10T07:29:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7bcfc5a09c6b6b479f8a1b1ffbb76f3d4e1f8181",
          "body": "…metry canary, embed survivability\n\nExclude the system-internal _clawmem collection from the six MCP retrieval\nroutes by default (includeInternal opt-in; store-layer predicate, escalating\nvector MATCH depth, traversal pruning; explicit degraded markers on cap-limited\nunder-fills). Add an embedding-g\n[…]\n Opt-in\nretrieval.mcp_direct_tuned_weights knob (default off); 'latest' routes to\nrecency intent. Cross-model DESIGN gate (7 turns) + implementation review\n(4 turns) to zero findings; bun test 1492/0.",
          "is_bot": false,
          "headline": "v0.21.0 — vsearch trust hardening: internal-collection exclusion, geo…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-10T06:56:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "82c81c43dcbc3a2d5baa82353ad8089111448bbc",
          "body": "…, full-backlog + lease behavior documented)",
          "is_bot": false,
          "headline": "docs: v0.20.1/v0.20.2 release notes + beads-surface sync (bd link fix…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-07T08:34:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90b57476ab0bc95688eae71f476035a64bf2edc6",
          "body": "…) + BD_DISABLE_METRICS/BD_DISABLE_EVENT_FLUSH forced",
          "is_bot": false,
          "headline": "v0.20.2 — beads runBd hardening: execFileSync (no shell interpolation…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-07T08:03:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c69714836d851363f19748c57455c0687419070",
          "body": "…d list 50-cap (--limit 0), surface claim leases (lease_expires_at/heartbeat_at)",
          "is_bot": false,
          "headline": "v0.20.1 — beads v1.1.0 upstream sync: drop dead quality_score, lift b…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-07T07:40:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6783146b3c12fe96aba2a193d6347fd59e22870b",
          "body": "Move the blocking sqlite-vec MATCH off the context-surfacing hook's event loop into a per-vault unix-socket daemon hosted by the watcher, so the hook's real timeout fires and a cold scan falls back to FTS instead of blocking the turn. Opt-in (needs 'clawmem watch'); strict graceful degradation; single-flight + deadline-on-receipt. Split searchVec into searchVecMatch + hydrateVecResults. codex DESIGN gate + code review to zero findings; bun test 1447/0.",
          "is_bot": false,
          "headline": "v0.20.0 — vector-query daemon: hard cap on the cold synchronous MATCH",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-05T14:37:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78b6e9d58061b94757f5bb4a260505bc20cb1706",
          "body": null,
          "is_bot": false,
          "headline": "v0.19.0 — priority-based transcript formatting for session extraction",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-04T19:32:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ef9b97ec6ebfd9c42353569fedb807996c46688",
          "body": "…g, remote LLM/rerank auth\n\nW1 (contract change): searchVec now compares the endpoint-returned embedding model\nagainst the vault's stored model(s) after the query embed and throws\nVecReadModelMismatchError on a same-dimension model swap — exactly one stored model\nmust equal the active one. The check\n[…]\nlandmine; RELEASE_NOTES v0.18.0. bun test -> 1394 pass / 0 fail. Reviewed\nacross all three workstreams by an independent cross-model adversarial pass (codex /\nGPT-5.5-high) to zero remaining findings.",
          "is_bot": false,
          "headline": "v0.18.0 — read-path embedding-model guard, extraction parrot-hardenin…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-04T16:08:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "862dbd0590649f431e4748d32e1a1eaf7a0772ad",
          "body": "Follow-up to v0.16.0's context-surfacing hook-timeout fix, closing the residual\nwrite-contention and embed-cancellation gaps on the same hook path.\n\n- Best-effort hook writes fail fast under contention: the dedup UPSERT is now\n  fail-open, and the context-surfacing hook process caps its own busy_tim\n[…]\n synchronous scan needs process isolation (deferred).\n\nBug-first tests, each guard-verified (fails on pre-fix source). Cross-model\nreview (GPT-5.5 high) to zero findings. bun test: 1390 pass / 0 fail.",
          "is_bot": false,
          "headline": "harden context-surfacing hook budget + cancellable embeds (v0.17.0)",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-01T18:47:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dce5eced84713453543590177a230806f7bc68cb",
          "body": "…correct)\n\nBoth failed on a test-methodology defect, not a source bug — the source is\nunchanged and proven correct in each case (bug-first discipline).\n\n- topic-boost fail-open (§11.4): isolate the focus-topic variable with two\n  identically-seeded stores + hermetic skill-vault isolation. The prior \n[…]\n\n  meant \"any hour\", but isInQuietWindow is end-exclusive, so it failed during\n  the 23:00 local hour. Omit the window (always-open) and add a hermetic unit\n  guard pinning the end-exclusive boundary.",
          "is_bot": false,
          "headline": "test: fix two pre-existing red tests (methodology bug, source proven …",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-01T18:47:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d42d7f22377fd576ecdbca3eaa41a99dbfc8f41",
          "body": "… times out\n\nThe context-surfacing hook could intermittently exceed its UserPromptSubmit\nbudget (\"hook timed out — output discarded\"), especially on the first prompt\nafter a fresh boot and across concurrent sessions. The root cause was not\ninference or host memory: the vector leg ran a synchronous s\n[…]\n rounds to zero findings). New tests in\ntests/unit/hook-timeout-fix.test.ts. Docs/troubleshooting corrected — the prior\n\"give the host more RAM\" guidance was disproven (a 24GB reboot still timed out).",
          "is_bot": false,
          "headline": "v0.16.0 — Fix: context-surfacing UserPromptSubmit hook intermittently…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-07-01T15:37:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8fa0ef0d7ee99032ba11609ea659e542ca7829f5",
          "body": "…sue #20)\n\nmacOS's built-in SQLite (Bun's default) is compiled without extension\nloading, so sqliteVec.load() failed at bootstrap/doctor with \"does not\nsupport dynamic extension loading\". The prior handling probed only the\nApple-Silicon Homebrew path and swallowed the failure silently, so a fresh\nma\n[…]\nrap and doctor).\n- New bug-first test (tests/unit/store.macos-sqlite.test.ts, 5 cases);\n  bun test -> 1183 pass / 0 fail.\n- Troubleshooting entry under \"Bun runtime\"; bump 0.15.0 -> 0.15.1.\n\nRefs #20.",
          "is_bot": false,
          "headline": "v0.15.1 — Fix: macOS bootstrap fails to load sqlite-vec extension (Is…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-30T14:51:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f62830e2292b4bc63347c6a352e6a9c5fc7f8550",
          "body": "…attern durability fix\n\nAlign the agent-instruction surface to the AGENTS.md convention and fix a\nlatent scoring bug surfaced during review.\n\n- AGENTS.md -> lean root SSOT (72.6KB -> 17.7KB, under Codex's 32KiB cap)\n- CLAUDE.md -> @AGENTS.md import (ends the byte-identical 72KB twin)\n- SKILL.md -> o\n[…]\ntern\ndurability test); all relative links resolve; AGENTS.md < 32KiB; CLAUDE.md no longer\na byte-twin. Reviewed by codex GPT-5.5-high across the refactor and the source fix to\nzero remaining findings.",
          "is_bot": false,
          "headline": "v0.15.0 — Agent-instruction refactor (AGENTS.md as lean SSOT) + antip…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-30T12:56:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ebbe8f247fe3d0064228de65bbd2af0dc8e98aba",
          "body": "…t + memory-pressured host)\n\nThe 8s context-surfacing UserPromptSubmit hook can time out intermittently even on a healthy\nllama-server setup when the vault index is large and the host is memory-constrained: page-cache\neviction between turns causes a recurring cold-start (fresh Bun process + large in\n[…]\nxt-surfacing hook timeout\" section so an agent can\n  self-tune the settings.json value per host. No CLI knob added; 8s default unchanged.\n- SKILL.md: condensed mirror in the symptom block.\n\nDocs only.",
          "is_bot": false,
          "headline": "docs: cold-start cause for context-surfacing hook timeout (large vaul…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-30T09:21:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cccc66f1dad5581c01e507efd63466f2fb5d08c9",
          "body": "…leshooting + release notes\n\nPublic-exposure hygiene: generalize the sciros:sciros example install-user in\ndocs/troubleshooting.md to appuser:appuser, and remove the internal codex review\nsession UUIDs (019e...) from older RELEASE_NOTES entries (kept the review-turn\nnarrative). No code, behavior, or version change. The SECURITY.md / issue-template\ncontact email is intentional and unchanged.",
          "is_bot": false,
          "headline": "docs: scrub internal codename (sciros) + codex session IDs from troub…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-25T20:11:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec6d5a0eab619e73792cc56af05952f9d093dbde",
          "body": "…r (doctor + scheduled check + runtime emit)\n\nThe broken zerank-2 GGUF returned HTTP 200 + valid JSON + finite positive ~1e-11 scores\n— passing every liveness check — yet contributed nothing at weight 0.9 and silently\ncollapsed the final ranking to RRF. blendRerank's usability check was `score > 0`,\n[…]\nsc clean; full suite green (1 pre-existing unrelated failure). Reviewed\nacross design + implementation by an independent cross-model adversarial pass\n(codex / GPT-5.5-high) to zero remaining findings.",
          "is_bot": false,
          "headline": "v0.14.0 — Reranker health guard: detect a silently-degenerate reranke…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-25T19:55:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ad9c2e4186514a022be9e6749c31d472d8dcb3ad",
          "body": "The query tool now scores with QUERY_WEIGHTS {search:0.70, recency:0.15, confidence:0.15} (was 0.50/0.25/0.25), via an additive {weights,now,forceWeights} seam on applyCompositeScoring. Recency intent still wins RECENCY_WEIGHTS by construction; scoped to the query tool only.\n\nHeld-out judged-relevan\n[…]\nows newest-correct demotionRate 0 at 0.70 vs 2/19 at 0.80. Reviewed across design/results/hardening/impl by an independent cross-model adversarial pass (codex/GPT-5.5-high) to zero remaining findings.",
          "is_bot": false,
          "headline": "v0.13.0 — Query composite re-weight: search 0.70 for the query tool",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-25T14:31:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c7892bfde5a8fecc1373e62d7dd2997fbe6966e",
          "body": "…gnal (fixes immovable RRF #1)\n\nThe query tool's position-aware blend `w·(1/rrfRank) + (1-w)·rerank` (w 0.75/0.60/0.40) made\nRRF #1 mathematically immovable by the reranker (0.75·1 exceeds any rank-2 ceiling), so the\nnow-faithful zerank-2 reranker's largest win was discarded. Replace with `blendRera\n[…]\ndex/GPT-5.5-high) to zero\nfindings. Also folds the pending systemd-services.md doc fix and updates the pipeline docs\n(CLAUDE/AGENTS/README/SKILL, docs/internals, upgrading.md) to describe blendRerank.",
          "is_bot": false,
          "headline": "v0.12.0 — Query reranking: blend the cross-encoder as the dominant si…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-25T09:09:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01b21f2620bdc82b1c61b9a5fadf2135a13a3015",
          "body": "…-cls sidecar\n\nThe \"SOTA upgrade\" reranker (zerank-2-Q4_K_M.gguf under `llama-server\n--reranking`) was silently broken. zerank-2 is a Qwen3ForCausalLM that scores\na (query, document) pair on the logit of a single relevance token (\"Yes\",\nid 9454). llama.cpp's convert_hf_to_gguf.py only synthesizes a \n[…]\nNo\nsrc/ change, no schema migration, no config/env-var change, no public API\nchange. zerank-2 weights are CC-BY-NC-4.0 and are never bundled; the recipe\ndownloads them for your own non-commercial use.",
          "is_bot": false,
          "headline": "v0.11.3 — Reranker: deprecate broken zerank-2 GGUF; ship zerank-2 seq…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-24T17:13:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf0e6f07c82284b3489608c37b017c4feb552af7",
          "body": "…wmem command (npm 11)\n\nnpm 11 publish rejected the ./bin/clawmem form and dropped the bin entry from the tarball (older npm silently corrected it; live v0.11.0 ships bin/clawmem), so a global install would expose no clawmem command. bin → \"bin/clawmem\"; verified via npm publish --dry-run. No source change from v0.11.1 — v0.11.1 was git-tagged but never published to npm (publish failed on an expired token), so v0.11.2 carries the full v0.11.1 query-expansion fix and supersedes v0.11.0 on npm.",
          "is_bot": false,
          "headline": "v0.11.2 — Packaging: `bin` path so `npm install -g` registers the cla…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-23T20:00:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "663e183d7c1757cecc65f6af2bec33dd3e88207a",
          "body": "Fix two compounding query-expansion bugs that degraded query/intent_search recall:\n\n(1) The expansion prompt was out-of-distribution for the qmd-query-expansion-1.7B finetune (verbose prose, no format constraint) → bare question-stem lex terms, template echoes, </think> leakage. Now sends the terse \n[…]\nRRF doc correction).\n\nVerified: tsc clean on touched files, full unit suite green (187 pass), live end-to-end against the expansion server; codex impl-review session 019ef534 cleared to zero findings.",
          "is_bot": false,
          "headline": "v0.11.1 — Query expansion: typed lex/vec/hyde routing + terse qmd prompt",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-23T19:45:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9486a41a9649be6f36e52ccd1228957b87b31ec8",
          "body": "…vector writes\n\nensureVecTable throws (never drops) on a dimension/schema mismatch; embed detects dimension AND same-dimension model drift non-destructively and rebuilds only via --force (which probes the endpoint first); each run is bound to one (dimension, model) and validates every embedding befo\n[…]\nors_vec consistency (set-diff) and mixed-model detection; embed exits nonzero on abort. Validated by a 9-turn GPT-5.5-high adversarial codex review (findings 6->4->3->2->0). See RELEASE_NOTES v0.11.0.",
          "is_bot": false,
          "headline": "v0.11.0 — embedding dimension-migration safety + lease-fenced atomic …",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-22T17:13:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2746d959eff8234af343609e963afb2e37d076dc",
          "body": "Follow-up to #19. Adds two llm-remote-config cases: a full\n/v4/chat/completions URL passes through unchanged, and a trailing\nslash is stripped before the passthrough check.",
          "is_bot": false,
          "headline": "test: cover full chat/completions URL passthrough",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-20T11:57:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb370866875afa647a718d49b5f17c06f41b4184",
          "body": "Some LLM API endpoints use non-standard URL paths (e.g. /v4/chat/completions\ninstead of /v4/v1/chat/completions). buildRemoteChatCompletionsUrl always\nappended /v1/chat/completions, causing 404 errors.\n\nThis patch checks if the URL already ends with /chat/completions and returns\nit as-is.\n\nCo-authored-by: Oliver Sanctus Georgius <oliver@olivers-mac-mini.tail3eabaf.ts.net>",
          "is_bot": false,
          "headline": "fix: allow full chat/completions URL without /v1 appending (#19)",
          "author_name": "Oliverbot26",
          "author_login": "Oliverbot26",
          "committed_at": "2026-06-20T11:55:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3224f86e3c4996ea62cb893c61ba3d00497cf292",
          "body": "Prevents bun from recursing into vendored clones and running their suites\n(which lack our devDeps). ClawMem's own tests are unaffected: 1307 pass / 0 fail.",
          "is_bot": false,
          "headline": "test: scope `bun test` to the tests/ directory via bunfig",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-06-18T11:28:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8016a442b1b27af64f4a5912016dd2110aba8b89",
          "body": "…-derived state)\n\nImplement MemoryProvider.on_session_switch in src/hermes/__init__.py. Hermes\nv2026.5.16 wired this hook to fire on /new, /resume, /branch, and compression;\nClawMem previously left it the ABC no-op, so the cached _session_id and the\nsession-keyed _transcript_path ({session_id}.jsonl\n[…]\nPT-5.5 adversarial review (codex session\n019e46bc-0848-7540-a1ce-913000112da1): design review caught a reset-gated prefetch\nleak + an ABA generation-reset race; corrected design cleared zero findings.",
          "is_bot": false,
          "headline": "v0.10.7 — Hermes plugin: implement on_session_switch (refresh session…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-05-20T19:22:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7658f3cd292604d7d12c553ff69599e1fcc8c83a",
          "body": "…f stripping them\n\nbuildFTS5Query stripped _ - . / ' from query terms, concatenating word-parts into\ntokens the porter-unicode61 index never holds, so BM25 returned 0 rows for any\ncompound/path/snake_case/dotted query (before_compaction, src/store.ts, q4_k_m).\nReplace sanitizeFTS5Term with tokenizeF\n[…]\nn regression tests.\nFull suite 1298 pass / 0 fail. No reindex, no schema migration, no API change.\nCodex review session 019e4595 (4 turns; T2 caught the entity regression,\nT4 zero remaining findings).",
          "is_bot": false,
          "headline": "v0.10.6 — FTS keyword-search tokenization: split separators instead o…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-05-20T14:47:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f7c45dd5ee80efd397dba9c157bf256de1c03bf",
          "body": "* fix: harden pilot memory retrieval and fallback behavior\n\n* test: assert remote embed HTTP errors skip local fallback\n\n---------\n\nCo-authored-by: Nyx <nyx@local>",
          "is_bot": false,
          "headline": "fix: harden pilot memory retrieval and fallback behavior (#10)",
          "author_name": "Nova - Rey",
          "author_login": "nova-rey",
          "committed_at": "2026-05-15T12:15:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8aa1068bcd75fb604bb134fcc36551488a8343d1",
          "body": "src/store.ts:initializeDatabase() set PRAGMA busy_timeout = 15000 AFTER\nPRAGMA journal_mode = WAL. busy_timeout is a connection-level setting that\nonly governs *subsequent* statements (default busy callback is NULL →\nSQLITE_BUSY returns immediately), so concurrent Stop-hook subprocesses raced\nfor th\n[…]\nbefore_reset fan-outs). Both applied. Turn 2\nverbatim verdict: \"Zero remaining findings on the Issue #13 fix. Ship as\nis. Ready to tag v0.10.5.\"\n\nReporter: @jcgau (first-time contributor).\nCloses #13.",
          "is_bot": false,
          "headline": "v0.10.5 — Issue #13: SQLite PRAGMA ordering race fix",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-05-15T09:37:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0241190e8018575e9d2dc7d32bfd17c44218839",
          "body": "…#11)\n\nFixes yoloshii/ClawMem#11 (@elquercarlos):\n\n1. clawmem setup openclaw ignored OPENCLAW_STATE_DIR and OpenClaw's --profile\n   flag (hardcoded ~/.openclaw/extensions/clawmem). Custom profile installs\n   landed in the wrong directory.\n2. clawmem setup openclaw --help ran setup instead of printin\n[…]\nce/cli.md: setup openclaw flag block expanded, env-var\n  table added.\n- CLAUDE.md / AGENTS.md: v0.10.4 bullet under OpenClaw Integration\n  section.\n- README.md: quickstart + integration block updated.",
          "is_bot": false,
          "headline": "v0.10.4 — Profile-aware setup openclaw + --help short-circuit (issue …",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-05-08T10:15:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "529109ea2b27dec61030f93c7a463cd0dadbcd74",
          "body": "The clawmem-openclaw-plugin package declares \"type\": \"module\", but\nsrc/openclaw/shell.ts uses CommonJS __dirname to resolve the local\nbin/clawmem path. When OpenClaw loads the plugin via the plain\nNode.js ESM loader, __dirname is not defined and the import throws:\n\n  ReferenceError: __dirname is not\n[…]\nmport.meta.url using the canonical\nfileURLToPath shim. Behavior under Bun is unchanged; behavior under\nNode now matches what shell.ts intended.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(openclaw): shim __dirname for Node.js ESM plugin loader (#12)",
          "author_name": "Inire",
          "author_login": "inire",
          "committed_at": "2026-05-08T08:46:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "05e49e1037a4218032b182ff233e2fda5e3b3abe",
          "body": "…c maintenance\n\nBundles cymkd's PR #7 four-commit parser hardening (already merged via rebase\nabove this commit) with the batched-pending doc updates that were sitting in\nthe working tree across the v0.10.2 → v0.10.3 window.\n\nParser hardening (cymkd / Veljko Simakovic):\n- Prose-balanced literal no l\n[…]\nCLAUDE.md ≡ AGENTS.md byte-identical preserved\n\nNo schema migration. No vault format change. Pure git pull / bun add upgrade.\n\nRefs PR #7 (cymkd, A-MEM parser hardening for noisy llama-server output).",
          "is_bot": false,
          "headline": "chore(release): v0.10.3 — A-MEM parser hardening (PR #7) + batched do…",
          "author_name": "Yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-05-04T10:40:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6afa24bca866665e5fd92c91de5e1e53d82abecf",
          "body": "Small local models can echo prompt instructions and schema examples before the actual JSON answer. The parser now de-prefers prose-side balanced literals when a later fenced or line-start payload is present, and link generation returns to partial-valid insertion without requiring all neighbors.\n\nCon\n[…]\nnit/conversation-synthesis.test.ts tests/integration/conversation-synthesis-two-pass.integration.test.ts\n\nNot-tested: Full bun test remains blocked by unrelated cmdwatch heavy-lane integration failure",
          "is_bot": false,
          "headline": "fix(amem): prefer real JSON payloads",
          "author_name": "Veljko Simakovic",
          "author_login": "cymkd",
          "committed_at": "2026-05-04T10:31:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5cab8fee7e36b7aefba674d3d67817cc641394d3",
          "body": "The JSON salvage path now distinguishes fenced examples from real payloads,\nparses valid JSON followed by prose, and rejects malformed link batches\ninstead of partially accepting them. The follow-up also reverts the prompt\nwording drift so this stays a parser/validation fix.\n\nConstraint: Must preser\n[…]\nM precedence tests in sync with any future prompt/example formatting changes\nTested: bun test tests/unit/amem.test.ts\nNot-tested: End-to-end generateMemoryLinks DB write path with a live store fixture",
          "is_bot": false,
          "headline": "Preserve real A-MEM payloads when model outputs include examples",
          "author_name": "Veljko Simakovic",
          "author_login": "cymkd",
          "committed_at": "2026-05-04T10:31:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0439ea577f350f6e98a7396938c67b6fbc8f3a88",
          "body": "Real-corpus enrich runs reached the final documents without note failures,\nbut link generation still intermittently returned a top-level object with\na `result` array instead of an array at the top level. The parser now\nunwraps that shape and the memory-note salvage path remains intact.\n\nConstraint: \n[…]\nss), enrich smoke with local 8088/8089/8090 after wrapper fix showed note_invalid=0 and link_invalid=0 in sampled window\nNot-tested: Completed full corpus enrich after wrapper fix from start to finish",
          "is_bot": false,
          "headline": "Handle object-wrapped link generation results too",
          "author_name": "Veljko Simakovic",
          "author_login": "cymkd",
          "committed_at": "2026-05-04T10:31:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78f5bb593d2b56f25ca2b63357d29f9f0d511b4a",
          "body": "A-MEM note construction and link generation were fragile under the\nremote 8089 llama-server path: valid JSON wrapped in stray fence junk,\npartial JSON objects, and `lex/vec/hyde` fallback text all caused\nunparseable-note failures during enrich runs.\n\nThis patch tightens JSON extraction, adds lightwe\n[…]\nass), repeated enrich smoke on real corpus with local 8088/8089/8090 sampled through docId 160 with zero invalid JSON\nNot-tested: Completed end-to-end enrich pass across entire real corpus after patch",
          "is_bot": false,
          "headline": "Harden A-MEM parsing for noisy llama-server outputs",
          "author_name": "Veljko Simakovic",
          "author_login": "cymkd",
          "committed_at": "2026-05-04T10:31:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a74b7ed58c214d2db07251647d61785cf4b1adcd",
          "body": "…ntenance\n\nSmall patch release. No retrieval pipeline, composite scoring, vault format,\nhook set, agent tool surface, or OpenClaw plugin registration shape changes\nfrom v0.10.1. Vaults are byte-identical at rest. Pure git pull upgrade.\n\nConfigurable remote LLM endpoints (PR #8 by @DrJsPBs):\n  Three \n[…]\nview rounds (gpt-5.4 high reasoning each side); contributor folded\n  in fork-review extras within the same PR scope. Cross-validated in\n  their downstream DrJLabs/ClawMem fork before opening upstream.",
          "is_bot": false,
          "headline": "chore(release): v0.10.2 — Configurable remote LLM endpoints + doc mai…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-28T12:38:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fed517ae23e08708461ed8c195761f7957e3316a",
          "body": "Add configurable remote LLM model selection, reasoning effort passthrough, and /no_think controls while preserving existing qwen3 defaults.\n\nThread the settings through OpenClaw and Hermes, document the endpoint contracts, normalize /v1 chat-completions URLs, and cover the request-body behavior with focused tests.",
          "is_bot": false,
          "headline": "feat(llm): support remote model overrides",
          "author_name": "DrJsPBs",
          "author_login": "DrJsPBs",
          "committed_at": "2026-04-28T12:32:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a793b2ce52962e8e7d0b4d5c61c2d8eb4ebee48",
          "body": "…2026.4.18 / Hermes v2026.4.16+ doc maintenance\n\nSmall patch release. No retrieval pipeline, composite scoring, vault format,\nhook set, agent tool surface, or OpenClaw plugin registration shape changes\nfrom v0.10.0. Vaults are byte-identical at rest.\n\nHermes plugin (src/hermes/__init__.py) — agent_c\n[…]\n\n\nTests: 1204 pass / 0 fail / 2339 expect() calls across 66 files. No new\ntests in v0.10.1 — agent_context guard is observable only against a live\nHermes runtime, rest of the release is documentation.",
          "is_bot": false,
          "headline": "chore(release): v0.10.1 — Hermes agent_context isolation + OpenClaw v…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-19T03:52:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca85f85ee85b3f0b501885a0256316b4af0542c4",
          "body": "Adds an External credit subsection to v0.8.4 release notes, matching the\nv0.10.0 convention used for @withx. The PR was closed as superseded but\nthe gateway-restart-before-slot-assignment insight is preserved verbatim\nin v0.8.4. Will land with the next version bump.",
          "is_bot": false,
          "headline": "docs: retroactively credit @saschabuehrle for v0.8.4 PR #6",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-17T01:35:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85f2a8a760822e04a9f3d28422602309f6f62e2b",
          "body": "…0.0)\n\n§14.3 pure-memory migration\n---------------------------\nClawMem's OpenClaw plugin no longer registers as `kind: context-engine`\nwrapping a ClawMemContextEngine class. It is now a `kind: memory` plugin\nthat wires every lifecycle event through OpenClaw's plugin-hook bus:\n\n- before_prompt_build \n[…]\n026.4.11 install that did not share any state with the\nClawMem development environment. The external reproduction is what\nconfirmed this was a clean packaging gap, not a machine-specific\nconfig drift.",
          "is_bot": false,
          "headline": "feat: OpenClaw pure-memory migration + v2026.4.11 packaging fix (v0.1…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-13T13:42:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a9ae8c57aeebf8e079bec23086554f65c12f92b",
          "body": "\"Context engine\" has crystallized in the ecosystem as in-session\ntranscript management (Hermes ContextEngine ABC, Volt/LCM DAG).\nClawMem is a cross-session memory layer; the old framing was both\ncategorically wrong and inconsistent with the README's own description\nof the Hermes integration as a Mem\n[…]\nne slot registration as historical, with a forward\n  reference to dual-kind (memory + context-engine) migration\n- package.json description: sync the reframe and add Hermes to the\n  listed integrations",
          "is_bot": false,
          "headline": "docs: reframe ClawMem as a memory layer (not a context engine)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-13T06:17:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cd594f9da88204edbd74bb1d15270ddeb6ebe096",
          "body": "…v0.9.0)\n\nTwo context-surfacing upgrades. §11.1 adds a `<vault-facts>` SPO-triple\ninjection block inside `<vault-context>` so the model receives structured\n\"what is currently true about the entities in this prompt\" alongside the\nexisting `<facts>` (surfaced documents) and `<relationships>` (memory-g\n[…]\ntegration.test.ts:\n  3 tests (zero-match fail-open byte-equality × 2 variants, matching\n  topic observably changes output vs no-topic baseline).\n\nPublic test suite: 1025 → 1105 pass, zero regressions.",
          "is_bot": false,
          "headline": "feat: <vault-facts> KG injection + session-scoped focus topic boost (…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-13T04:02:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f1272e2bde5c3a52767a4e06343dad23b2a23870",
          "body": "Fixes a nine-bug cluster in the decision-extractor → observer →\nentity-resolution → triple-storage pipeline that left `entity_triples`\nstuck at zero rows on production vaults regardless of activity, causing\n`kg_query` to return empty for every entity and silently hollowing out\nWHY / ENTITY graph tra\n[…]\no schema migration, no hook reinstall. Optional\ncleanup of dead pre-v0.8.5 rows documented in docs/troubleshooting.md\nand docs/guides/upgrading.md. See RELEASE_NOTES.md for the full\nper-fix changelog.",
          "is_bot": false,
          "headline": "fix: SPO triple extraction bug cluster — KG populates now (v0.8.5)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-13T00:08:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "535baa9ae04d730e95a394ccbd172d37f58c5b1b",
          "body": "Replace all ./bin/clawmem references with clawmem across docs\n(quickstart, setup-hooks, setup-mcp, cli reference, CLAUDE.md,\nSKILL.md, README.md). Users install via npm, not source checkout.\n\nSync AGENTS.md with CLAUDE.md (was missing Active Memory coexistence\nnotes and v2026.4.10 recommendation from the earlier doc update).",
          "is_bot": false,
          "headline": "docs: normalize CLI paths and sync AGENTS.md",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-11T14:51:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06712b6cc7547e78bf21ac29be020f3dde158df5",
          "body": "clawmem setup openclaw now auto-creates the symlink at\n~/.openclaw/extensions/clawmem instead of only printing manual steps.\nHandles stale symlinks, existing directories, and file conflicts.\n--remove actually uninstalls. Fixes #5.\n\nPlugin manifest renamed from plugin.json to openclaw.plugin.json so\n\n[…]\nfor the contextEngine slot\nnormalization bug (openclaw/openclaw#64192), troubleshooting entry,\nand Active Memory coexistence documentation.\n\nCodex review: session 019d72d5, turns 25-27, ~4.32M tokens.",
          "is_bot": false,
          "headline": "fix: auto-install OpenClaw plugin + manifest rename (v0.8.4)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-11T14:26:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a862c9270de72fa8482ffab3d131305cd255407",
          "body": "…ig fix\n\nClawMem and OpenClaw's new Active Memory plugin (v2026.4.10) are fully\ncompatible — different plugin kinds, different injection targets, different\nmemory backends. Added coexistence section to the OpenClaw plugin guide\nand notes to README, CLAUDE.md, and SKILL.md.\n\nAlso documents the contextEngine slot normalization fix (#64192) that\nwas silently dropping plugins.slots.contextEngine during config processing.",
          "is_bot": false,
          "headline": "docs: document Active Memory coexistence and OpenClaw v2026.4.10 conf…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-11T07:19:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf3b68f820f1c41555edf3c143db2868018f3619",
          "body": "…ure (v0.8.3)\n\nv0.8.3 bundles two small quality fixes with a major documentation\nrestructure. Patch release — no schema changes, no migration required,\nno new env vars, no dependency changes.\n\n**Content-type-aware entity cap (§1.5)**\n\nA-MEM entity extraction used a flat `.slice(0, 10)` cap that sile\n[…]\n regressions, zero failures.\n\nNo breaking changes. No new env vars. No schema migration. Existing\ncallers that don't pass `contentType` get the default cap of 10,\nmatching pre-v0.8.3 behavior exactly.",
          "is_bot": false,
          "headline": "feat: content-type-aware entity cap + self-loop guard + docs restruct…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-10T03:57:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c5c20fc1d297e439c49677866b27757cfa893d4c",
          "body": "…her cleanup note\n\nThree follow-up doc edits to the v0.8.2 release. No code changes.\n\n1. New \"Background maintenance workers (v0.8.2)\" section in\n   docs/guides/systemd-services.md — the canonical operational reference\n   for enabling, tuning, and monitoring the v0.8.2 dual-host workers via\n   the e\n[…]\nked to the new systemd-services.md section so the upgrade\n   path stays focused on \"did the workers start?\" while the operational\n   detail (tuning, monitoring, rollback) lives in one canonical place.",
          "is_bot": false,
          "headline": "docs: operator guide for v0.8.2 background workers + skill-vault watc…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-10T01:11:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6c346c8525b1229c7dcd77c887434f17815b7d3",
          "body": "…se (v0.8.2)\n\nPure code release — no schema changes, no new dependencies, no new env vars.\nOperational behavior change only: the long-lived `clawmem watch` process now\nhosts the consolidation and heavy maintenance lane workers in addition to\n`cmdMcp`, and the light lane gained the same DB-backed `wo\n[…]\n5: 9 lease unit + 5 fast subprocess + 1 slow subprocess).\n\nCodex session: 019d72d5-adc8-7003-ba6a-9ef91786b1a0 (3 review turns,\n~3.59M cumulative tokens), closed with verbatim \"No remaining findings.\"",
          "is_bot": false,
          "headline": "feat: dual-host worker architecture with cross-process light-lane lea…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-10T01:01:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "102bda177399cb73d9a8b53f62bf2fc297ff8917",
          "body": "Covers the v0.7.0 → v0.8.1 upgrade path in one place, closing the gap\nbetween the generic README \"Upgrading\" section and the historical\nMIGRATION_GUIDE.md (which documents the original beads/MAGMA/A-MEM\nintegration and predates v0.7.0).\n\nThe new guide documents:\n- Quick path: git pull + restart long\n[…]\nion to the new guide. No other README content touched.\n\nMIGRATION_GUIDE.md left alone: the content is version-specific to the\noriginal graph integration and does not apply to the v0.7.x → v0.8.x\njump.",
          "is_bot": false,
          "headline": "docs: add docs/guides/upgrading.md — version-specific upgrade guide",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-09T23:39:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a85e86d69145aef6ed44f92b392d4284ee2630f9",
          "body": "Extends the `context-surfacing` hook to build its retrieval query from\nthe current prompt plus up to two recent same-session prior prompts, so\na short follow-up turn (\"do the same for X\", \"explain that rationale\")\ncan still inherit the vocabulary of earlier turns. The raw prompt is\npersisted in a ne\n[…]\nor-query lookback (v0.8.1)\" section covering schema\n  migration, privacy split, current-first truncation, SQL-level\n  self-match guard, and the per-retrieval-stage table of which\n  query is used where",
          "is_bot": false,
          "headline": "feat: multi-turn prior-query lookback in context-surfacing (v0.8.1)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-09T22:50:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a8c84490c1c4f593ad6fbad430c21f46e955811",
          "body": "Adds a second consolidation worker — the \"heavy maintenance lane\" — that\nruns on a longer interval than the existing 5-minute light lane, only\nduring configured quiet windows, with DB-backed exclusivity via\nworker leases and stale-first batching. Off by default behind\n`CLAWMEM_HEAVY_LANE=true`. The \n[…]\nst\n  ordering across decisions, two consecutive ticks with clean lease\n  teardown, null-LLM completion with null_call_count > 0)\n\nPublic repo test count: 936 pass / 0 fail (baseline 880/0, delta +56).",
          "is_bot": false,
          "headline": "feat: quiet-window heavy maintenance lane with worker leases (v0.8.0)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-09T22:09:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2fb1b04d9e5740a7c13318b24ca3d74489f11583",
          "body": "Adds an opt-in `clawmem mine <dir> --synthesize` post-import LLM fact\nextraction pass that walks the freshly indexed conversation documents\nand turns them into first-class searchable structured memory — decisions,\npreferences, milestones, problems, and cross-fact relations — alongside\nthe raw exchan\n[…]\ncs/reference/cli.md: new CLI usage examples and a\n  `--synthesize` subsection under Conversation Import with\n  a pointer to architecture.md.\n\n## Test count\n\n817/0 (v0.7.1) → 880/0 (v0.7.2). +63 tests.",
          "is_bot": false,
          "headline": "feat: post-import conversation synthesis pipeline (v0.7.2)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-09T21:11:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "62e26ae435efde8cea7eb3a227990f1135f7efee",
          "body": "Rewrites the assemble()-vs-before_prompt_build paragraph to document the\narchitectural reason for the split: assemble().systemPromptAddition and\nbefore_prompt_build's prependContext prepend to different prompt positions\n(system vs user) with different model semantics, and systemPromptAddition\ncan be clobbered by other plugins returning systemPrompt from hooks. The\nhybrid approach is correct by design, not a migration that never happened.",
          "is_bot": false,
          "headline": "docs: clarify why openclaw retrieval stays in before_prompt_build hook",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-09T20:01:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1279a77675e0e314a28f9538bccf51035ca394c",
          "body": "…nti-contamination synthesis, context framing (v0.7.1)\n\nFive independent safety gates around consolidation and context-surfacing, extracted from\nThoth's dream_cycle patterns and adapted to ClawMem's Phase 2/3 consolidation worker and\nUserPromptSubmit hook. Every extraction prevents a specific class \n[…]\ntion\nas the canonical deep dive.\n\nNew env vars: CLAWMEM_MERGE_SCORE_NORMAL, CLAWMEM_MERGE_SCORE_STRICT,\nCLAWMEM_MERGE_GUARD_DRY_RUN, CLAWMEM_CONTRADICTION_POLICY,\nCLAWMEM_CONTRADICTION_MIN_CONFIDENCE.",
          "is_bot": false,
          "headline": "feat: safety release — name-aware merge safety, contradiction gate, a…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-09T19:56:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22a316516b705e93552d857ab3f53d8145a1d676",
          "body": "…(v0.7.0)\n\nExtracts recall tracking patterns from OpenClaw's dreaming memory consolidation\nsystem. Tracks which documents are surfaced by retrieval, which queries surfaced\nthem, and whether the assistant cited them — per-turn, not per-session.\n\nSchema: recall_events (append-only event log), recall_s\n[…]\nsnooze candidates (high noise ratio), scoped to\n  active docs with collection/path in output\n\nNew files: src/recall-buffer.ts, src/recall-attribution.ts\nTests: 36 recall tracking tests, 659 total pass",
          "is_bot": false,
          "headline": "feat: recall tracking with per-turn attribution, cross-vault support …",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T10:58:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d6c76421bc57deebd5d4a08097532ebdbac88bc",
          "body": "…, LLM remote fallback (v0.6.0)\n\nDeductive observation synthesis: consolidation worker Phase 3 combines related recent\nobservations (decision/preference/milestone/problem, last 7 days) into first-class\ncontent_type='deductive' documents with source_doc_ids provenance and supporting edges\nin memory_r\n[…]\nnot. Concurrent race guard via\npre-fetch cooldown re-check.\n\nHoncho deep analysis informed deductive synthesis and surprisal patterns. GPT 5.4 Codex\nreviewed (4 turns, 5.2M tokens). 623 tests passing.",
          "is_bot": false,
          "headline": "feat: deductive observations, surprisal scoring, embed-state tracking…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T07:51:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c7de631220c6aa0a76d3a43b2c817e43e32942f1",
          "body": "\"silently falls back\" → describes cooldown mechanism, transport vs HTTP\nerror distinction, and that fallback is no longer silent.",
          "is_bot": false,
          "headline": "docs: update README fallback description for cooldown-based behavior",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T05:59:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca52896ea96acc21864c8d664342fa5d53ca3350",
          "body": "…bootstrap synthesis (v0.5.1)\n\nSession-bootstrap synthesis: getCurrentFocus() replaces getRecentDecisions() — surfaces\ndecisions, preferences, and active problems ranked by pinned + recency + access count.\n\nTemporal SPO knowledge graph: entity_triples table with valid_from/valid_to. Decision-extract\n[…]\ndo not. CLAWMEM_NO_LOCAL_MODELS=true prevents fallback. Concurrent race guard via pre-fetch\ncooldown re-check.\n\n31 MCP tools (was 28). 608 tests passing. GPT 5.4 Codex reviewed (5 turns, 3.5M tokens).",
          "is_bot": false,
          "headline": "feat: SPO knowledge graph, agent diary, LLM remote fallback, session-…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T05:58:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "133d6ef26069643087a3ae0f5d03f9d68bcc2f97",
          "body": null,
          "is_bot": false,
          "headline": "docs: add clawmem mine anti-pattern to SKILL.md",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T04:07:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e66981b2fdef30a4ccf471add2e1fe9727d82cf2",
          "body": null,
          "is_bot": false,
          "headline": "docs: add clawmem mine to anti-patterns (not for autonomous use)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T04:07:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a51c2722d92deeb778e19c1d153f2d29e77286d",
          "body": "New features:\n- `clawmem mine <dir>` imports conversation exports from Claude Code,\n  ChatGPT, Claude.ai, Slack, and plain text into the indexing pipeline\n- New `conversation` content type (45d half-life, 0.55 baseline)\n- Three new first-class observation types: `preference` (decay-exempt,\n  Infinit\n[…]\n chat formats\n\nGPT 5.4 reviewed (3 turns): 6 issues found and fixed (consecutive\nassistant loss, unawaited writes, permissive plain-text, Slack\nmulti-party, preference decay exemption, YAML escaping).",
          "is_bot": false,
          "headline": "feat: conversation import + broadened observation taxonomy (v0.5.0)",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-08T04:03:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99aceed60464fcab23fa01f17c25d1a2bb981924",
          "body": null,
          "is_bot": false,
          "headline": "docs: add frontmatter coercion fix to SKILL.md troubleshooting",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-04T19:30:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e37e7eb90e1b25d1088ed0e66893e50dd14df0a3",
          "body": "…ing crash\n\ngray-matter auto-coerces YAML values (title: 2023-09-27 → Date object,\ntitle: true → boolean). Bun's SQLite driver rejects these as bind params,\ncrashing `clawmem update` on Obsidian vaults with bare dates/booleans.\n\nFix: runtime str() helper in parseDocument() checks all frontmatter fields.\nDefense-in-depth safeTitle guards in insertDocument/updateDocument/reactivateDocument.\n\nCloses #3",
          "is_bot": false,
          "headline": "fix: sanitize gray-matter frontmatter coercion to prevent SQLite bind…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-04T19:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11af463a133ac3ea9490337c9d72ab7aa6128c0b",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.4.1",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-04T18:49:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad95eca3db855e9415bc698544edf4c2fdcc5bb6",
          "body": "- README: add Hermes to title, intro, quick start, Integration section\n  with install/configure/verify, Hermes-specific bootstrap, Multi-Framework\n  Operation section (replaces Dual-Mode)\n- docs/guides/hermes-plugin.md: full guide matching openclaw-plugin.md\n  (architecture, config, server modes, coexistence, lifecycle mapping)\n- SKILL.md: Hermes integration section + integration note\n- CLAUDE.md/AGENTS.md: integration note",
          "is_bot": false,
          "headline": "docs: comprehensive Hermes Agent integration documentation",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-04T18:49:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24f981c35174a296ee7ceea4089e407fe6feb64d",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.4.0",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-04T18:42:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfa375c15fe3ca47bd40e2915103ecb8052d1c15",
          "body": "Python plugin implementing Hermes's MemoryProvider ABC for ClawMem\nintegration. Symlink into hermes-agent/plugins/memory/clawmem/.\n\n- Shell-out hooks: session-bootstrap, context-surfacing, extraction\n- REST API tools: retrieve, get, session_log, timeline, similar\n- Plugin-managed transcript JSONL fo\n[…]\nLAWMEM_SERVE_MODE\n\nReviewed by GPT 5.4 High reasoning (5 turns, 1.95M tokens).\nTested against Hermes MemoryManager: discovery, registration,\nbootstrap, transcript sync, extraction hooks, tool routing.",
          "is_bot": false,
          "headline": "feat: add Hermes Agent MemoryProvider plugin",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-04T18:42:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "59ecd50811e8232b800a1099aafd59a9e7e642f9",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.3.4",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T14:30:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfd207a351c1a262cc2d5ca8776d1c3978a6093a",
          "body": null,
          "is_bot": false,
          "headline": "docs: restore inline comments for reflect/consolidate in CLAUDE.md",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T14:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdbcb3d3a6886c04fe9acce8b6356b96f779883e",
          "body": null,
          "is_bot": false,
          "headline": "docs: restore inline comments for reflect/consolidate in SKILL.md",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T14:09:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93161fbb1ab3f962823c935dde4888c265786273",
          "body": null,
          "is_bot": false,
          "headline": "docs: add clawmem list to README, CLAUDE.md, SKILL.md CLI references",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T14:09:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c7d741ccb13c4edf888df8b5ef6cb14672acc1d",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.3.3",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T13:59:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3788316c774257f29e27987e8894077a81800424",
          "body": "GPT 5.4 review nits: untitled docs showed untruncated paths,\n--limit alias was undiscoverable in help text.",
          "is_bot": false,
          "headline": "fix: truncate path fallback in list output, document --limit alias",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T13:58:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab5094c666b5b07bb675a634e004062545b401a8",
          "body": "Shows recent documents from the vault with metadata (docid, date,\ntype, collection, title). Supports --json for machine output,\n-n/--limit for count, -c/--collection to filter.\n\nCloses #1",
          "is_bot": false,
          "headline": "feat: add `clawmem list` CLI command to browse recent documents",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T13:43:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6be7279a68587307bbf7f43f8f8694846817ad5a",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.3.2",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T13:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db01cc9c3a94ea850f0aa01a310caa7ffc7c3455",
          "body": "…meout fix\n\nReverts condensed entries back to original detailed format.\nAppends shell timeout wrapper cause as new bullet under existing entry.",
          "is_bot": false,
          "headline": "docs: restore original troubleshooting detail, append v0.3.1 shell ti…",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T13:18:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c96efbf83d81ec086c2570e0c04303cb1ec3d52",
          "body": "- UserPromptSubmit error: add shell timeout as primary cause (v0.3.1)\n- Fix example code: use native timeout property, not shell wrapper\n- Update Stop hook default timeout: 10s → 30s (v0.3.1)\n- Keep all existing entries (SQLite contention, WAL bloat, busy_timeout)",
          "is_bot": false,
          "headline": "docs: consolidate hook error troubleshooting, fix stale timeout refs",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T13:16:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85d2af1b42d71e697e725d707dc49c33b776c979",
          "body": "Shell `timeout` kills processes with exit 124 (no stderr), causing\n\"Stop hook error: Failed with non-blocking status code\" in Claude Code.\n\n- setup hooks: generate native `timeout` property instead of shell wrapper\n- Stop hooks: increase timeout from 10s to 30s for LLM inference\n- Docs: update setup-hooks.md examples, add troubleshooting entry\n- All hooks: remove shell `timeout` from command strings",
          "is_bot": false,
          "headline": "fix: use native hook timeout instead of shell timeout wrapper",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-04-02T12:43:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6dac8843fa63cfee27ab6e192dd79d6a0c7d34e",
          "body": "Clarify that bootstrap context is cached from engine.bootstrap() and\nconsumed on first turn, not re-executed in the hook.",
          "is_bot": false,
          "headline": "docs: fix before_prompt_build description in openclaw plugin guide",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-31T09:46:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d66506f13cbd93450915a570a17450e83472ad2a",
          "body": "OpenClaw v2026.3.28+ no longer triggers legacy compaction fallback for\nengines with ownsCompaction=false. compact() now delegates to runtime\nvia delegateCompactionToRuntime() from openclaw/plugin-sdk/core.\n\n- compact(): precompact-extract then delegate to runtime (P0 fix)\n- bootstrap(): cache contex\n[…]\nsage\n- Add clearSession() for per-session cleanup\n- Remove unused bootstrappedSessions/isBootstrapped()\n- Update tests, docs, bump to v0.3.0\n\nReviewed by GPT 5.4 High reasoning (3 turns, 797K tokens).",
          "is_bot": false,
          "headline": "fix(openclaw): delegate compaction to runtime, fix bootstrap duplication",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-31T09:41:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af62042b449baeed81f146bd9219c58ad45919a1",
          "body": "Custom Stop hooks that exit 0 with no stdout cause Claude Code to report\n\"Failed with non-blocking status code: No stderr output\". Document the\nroot cause and fix pattern in troubleshooting.md and setup-hooks.md.",
          "is_bot": false,
          "headline": "v0.2.9: document Stop hook JSON output requirement",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-31T08:44:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b61e5217f4489412b370f9032e5c494a6a3dd040",
          "body": "readTranscript() now uses backward chunked reader for files >10MB instead\nof loading entire file. Reads 2MB chunks backwards until enough lines\nfound. Raw Buffer accumulation with single UTF-8 decode prevents\nmulti-byte char corruption at chunk boundaries.\n\n- Backward chunked reader: up to 5×2MB chunks with early exit on target line count\n- Single fd open with try/finally (no leak)\n- validateTranscriptPath() limit raised from 50MB to 1GB\n- Doc comment updated to match",
          "is_bot": false,
          "headline": "v0.2.8: fix Stop hooks on large transcripts",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-30T14:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83172d46b3aa2a1efc6c616ad2d5dca7469b0d3c",
          "body": null,
          "is_bot": false,
          "headline": "v0.2.7",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-28T15:50:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c946b9cf9cb8bcef0ec4801c0d3e3119651a4281",
          "body": "The title-token overlap query used HAVING without GROUP BY, causing\n\"HAVING clause on a non-aggregate query\" when BM25 returned no results\nand the cascade fell through to step 3. Fix: wrap in subquery and\nfilter with WHERE on the computed match_count column.",
          "is_bot": false,
          "headline": "Fix HAVING clause error in lifecycle search title-token fallback",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-28T15:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1a8ad018554350c119fd135af77d8da52acb164",
          "body": "memory_pin, memory_snooze, memory_forget now use a 4-stage search\ncascade instead of BM25-only: exact path match → BM25 → title-token\noverlap → vector similarity. Prevents \"No matching memory found\" when\nthe document exists but BM25 fails on multi-term queries.\n\n- findMemoryCandidates(): async casca\n[…]\n selectLifecycleTarget(): confidence gate — ambiguous matches return\n  candidates for memory_forget (destructive), top hit for pin/snooze\n- Update docs/reference/mcp-tools.md with search behavior note",
          "is_bot": false,
          "headline": "v0.2.6: resilient lifecycle tool search with cascade fallback",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-25T11:59:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "239e9cecd2d61ca837f649b04f1bed2909fc7b52",
          "body": "Hook's SQLite busy_timeout was 500ms while watcher/MCP use 5000ms.\nDuring A-MEM enrichment or heavy indexing, watcher write locks exceed\n500ms, causing the hook's DB open to fail with SQLITE_BUSY — surfaced\nas \"UserPromptSubmit hook error\" in Claude Code.\n\n- Raise hook busy_timeout from 500ms to 5000ms (matches MCP server)\n- Hook still completes within its 8s outer timeout\n- Append fix context to troubleshooting docs (preserving existing entries)",
          "is_bot": false,
          "headline": "v0.2.5: fix hook SQLITE_BUSY from tight busy_timeout",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-25T10:47:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a05fad4ede6e74a87e43c15209d17a77bc496096",
          "body": "Watcher used fs.watch(recursive: true) which registered inotify watches on\nevery subdirectory including excluded dirs (gits/, node_modules/, .git/).\nBroad collection paths like ~/Projects caused 200K+ FDs, hanging WSL.\n\n- Walk directory trees at startup, skip excluded subtrees (shared EXCLUDED_DIRS)\n[…]\n(non-recursive)\n- Safety cap: 500 dirs per collection path with warning log\n- Export EXCLUDED_DIRS from indexer.ts for watcher to share\n- Document in troubleshooting.md, CLAUDE.md, AGENTS.md, SKILL.md",
          "is_bot": false,
          "headline": "v0.2.4: fix watcher inotify FD exhaustion on large directory trees",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-24T14:33:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d13f1db3b5011f2b1b76182d83c28f19cda103cf",
          "body": "Entity resolution pipeline rewritten with quality filters, type-agnostic\ncanonical resolution, and IDF-based entity edge scoring.\n\n- isLowQualityEntity() filter: rejects title-as-entity (Levenshtein >0.85),\n  names >60 chars, template placeholders, trailing colons, invalid locations\n- Type-agnostic \n[…]\ntity.ts and intent.ts function signatures\n- Fix all test TS compilation errors (MockLLM compat, HookInput, type updates)\n- New docs/internals/entity-resolution.md with bucket system and model guidance",
          "is_bot": false,
          "headline": "v0.2.3: entity extraction quality overhaul",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-24T05:20:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "31ee1d05a071dc50a60ac0a341b7375a46c7df1b",
          "body": "Issue tracking is local-only work — doesn't belong in committed agent instructions.",
          "is_bot": false,
          "headline": "Remove operational issue tracking section from agent docs",
          "author_name": "yoloshii",
          "author_login": "yoloshii",
          "committed_at": "2026-03-23T20:59:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 69,
      "commits_last_year": 286,
      "latest_release_at": "2026-07-19T15:51:27Z",
      "latest_release_tag": "v0.28.0",
      "releases_from_tags": true,
      "days_since_last_push": 5,
      "active_weeks_last_year": 18,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 1.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "clawmem",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "mcp-server",
            "model-context-protocol",
            "claude-code",
            "ai-agent-memory",
            "retrieval-augmented-generation",
            "rag",
            "vector-search",
            "sqlite",
            "bun",
            "llama-cpp",
            "local-first",
            "context-engine",
            "openclaw",
            "mcp-tools",
            "hybrid-search"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/clawmem",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/yoloshii/ClawMem",
          "versions_count": 68,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3556,
          "first_published_at": "2026-03-15T11:39:45.209000Z",
          "latest_published_at": "2026-07-19T16:20:44.724000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 32,
      "stars": 194,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-15",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 1
          },
          {
            "date": "2026-03-18",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 1
          },
          {
            "date": "2026-03-30",
            "count": 1
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 2
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 2
          },
          {
            "date": "2026-04-12",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-04-14",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 2
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-06-11",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 2
          },
          {
            "date": "2026-06-21",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 2
          },
          {
            "date": "2026-07-09",
            "count": 2
          }
        ],
        "complete": true,
        "collected": 32,
        "total_forks": 32
      },
      "star_history": null,
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 243047,
      "source_files_sampled": 180,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 22784
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "@hono/node-server",
            "direct": false,
            "version": "1.19.15",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.9,
            "advisory_ids": [
              "GHSA-frvp-7c67-39w9"
            ],
            "fixed_version": "2.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 3
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "moderate": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 234,
        "malicious_count": 0,
        "assessed_package": "npm:clawmem@0.28.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.25.1"
        },
        {
          "name": "gray-matter",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.3"
        },
        {
          "name": "node-llama-cpp",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.14.5"
        },
        {
          "name": "sqlite-vec",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.1.7-alpha.2"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.2"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 5,
        "open_issues": 1,
        "closed_ratio": 0.857,
        "closed_issues": 6,
        "closed_unmerged_prs": 4
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "yoloshii",
          "commits": 278,
          "avatar_url": "https://avatars.githubusercontent.com/u/26873046?v=4"
        },
        {
          "type": "User",
          "login": "cymkd",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/737041?v=4"
        },
        {
          "type": "User",
          "login": "DrJsPBs",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/190931748?v=4"
        },
        {
          "type": "User",
          "login": "inire",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/12611289?v=4"
        },
        {
          "type": "User",
          "login": "nova-rey",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/227210143?v=4"
        },
        {
          "type": "User",
          "login": "Oliverbot26",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/287125334?v=4"
        }
      ],
      "contributors_sampled": 6,
      "top_contributor_share": 0.972
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "91 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "41fd12153e23491921673cfe11aab017b8151078",
        "ran_at": "2026-07-25T14:44:24Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T15:52:32Z",
      "oldest_open_prs": [
        {
          "number": 17,
          "created_at": "2026-06-18T03:10:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 18,
          "created_at": "2026-06-18T03:11:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-06-20T11:55:55Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 5,
          "created_at": "2026-04-11T06:21:40Z",
          "last_comment_at": "2026-04-23T08:45:47Z",
          "last_comment_author": "konradre"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/yoloshii/ClawMem",
    "host": "github.com",
    "name": "ClawMem",
    "owner": "yoloshii"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 42,
        "vitality": 81,
        "community": 67,
        "governance": 51,
        "engineering": 52
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 81,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 286,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 18
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "18/52 weeks with commits",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 18
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "286 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 286
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 69,
              "latest_release_tag": "v0.28.0",
              "releases_from_tags": true,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 1.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "69 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 69
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 67,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "forks": 32,
              "stars": 194,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "194 stars",
                "points": 37.1,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 194
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "32 forks",
                "points": 12.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "packages": [
                "clawmem"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3556
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,556 downloads/month across npm",
                "points": 47.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3556,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 51,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 6,
              "top_contributor_share": 0.972
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 97% of commits",
                "points": 0.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "6 contributors",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "merged_prs": 5,
              "open_issues": 1,
              "closed_issues": 6,
              "issue_closed_ratio": 0.857,
              "closed_unmerged_prs": 4
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "86% of issues closed",
                "points": 40.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 86
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "5/9 decided PRs merged",
                "points": 21.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 5,
                      "decided": 9
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 42,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "yoloshii",
              "public_repos": 34,
              "account_age_days": 3400
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of yoloshii",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "yoloshii"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "34 public repos, account ~9 yr old",
                "points": 23.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 34
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "clawmem"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "68 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 68
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 52,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "ai-agent-memory",
                "ai-agents",
                "bun",
                "claude-code",
                "embeddings",
                "hybrid-search",
                "llama-cpp",
                "local-first",
                "mcp-server",
                "mcp-tools",
                "model-context-protocol",
                "on-device-ai",
                "rag",
                "retrieval-augmented-generation",
                "sqlite",
                "typescript",
                "vector-search",
                "memory",
                "plugin",
                "hermes"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "91 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Matched the npm:clawmem@0.28.0 runtime dependency closure — what installing the published package pulls in — 234 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:clawmem@0.28.0",
                  "assessed": 234
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 234,
              "unassessed_packages": 0,
              "affected_by_severity": "moderate 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "1 affected: @hono/node-server 1.19.15 (moderate 5.9)",
                "points": 13.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "@hono/node-server 1.19.15 (moderate 5.9)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 234,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.95,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 22784
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "95 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 243047,
              "source_files_sampled": 180,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/180 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 180,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T14:44:30.870244Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/y/yoloshii/ClawMem.svg",
  "full_name": "yoloshii/ClawMem",
  "license_state": "standard",
  "license_spdx": "MIT"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计npm.