Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 32 forkssince Feb 2026View on GitHub ↗

yoloshii/ClawMem holds a health index of 59 out of 100, placing it in the Moderate band. It scores highest on Vitality (81/100) and lowest on Security (42/100). It was last updated 5 days ago. A single contributor accounts for most of its recent work.

59
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

59
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

Yoloshi Nomotomoro?Personal account
0 followers34 public repossince Apr 2017

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

81Good · 22% of overall
How it's scored
36/36Push recency — last push 5 days ago
12.5/36Commit cadence — 18/52 weeks with commits
18/18Commit volume — 286 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year286
human_commit_share1
days_since_last_push5
active_weeks_last_year18
How it's scored
16.2/27Ships releases — 69 version tags (no GitHub releases)
36/36Release recency — latest release 5 days ago
27/27Release cadence — a release every ~1.4 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count69
latest_release_tagv0.28.0
releases_from_tagsyes
days_since_latest_release5
mean_days_between_releases1.4
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

67Moderate · 18% of overall
How it's scored
37.1/60Stars — 194 stars
12.4/25Forks — 32 forks
1.7/15Watchers — 3 watchers
Inputs used
forks32
stars194
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

92Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateyes
How it's scored
47.3/80Monthly downloads — 3,556 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesclawmem
dependents
ecosystemsnpm
total_downloads
monthly_downloads3,556
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

51Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.6/22.5Commit distribution — top contributor authored 97% of commits
8.1/13.5Contributor breadth — 6 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled6
top_contributor_share0.972
How it's scored
40.1/46.8Issue resolution — 86% of issues closed
21.2/38.3PR acceptance — 5/9 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs5
open_issues1
closed_issues6
issue_closed_ratio0.857
closed_unmerged_prs4
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
0/25Owner reach — 0 followers of yoloshii
23.2/25Track record — 34 public repos, account ~9 yr old
Inputs used
followers0
owner_typeUser
is_verified
owner_loginyoloshii
public_repos34
account_age_days3,400
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 5 days ago
20/20Version history — 68 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesclawmem
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Engineering Quality

Are baseline engineering and documentation practices in place?

52Moderate · 20% of overall
How it's scored
0/24CI workflows
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_cino
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

85Excellent
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 20 topics
10/10Wiki
Inputs used
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_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

42At risk · 16% of overall
How it's scored
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 — no data
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 — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — 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 — no data
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 — no data
0/7.5Token-Permissions — no data
0/7.5Vulnerabilities — 91 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate3.1
Excluded from scoring (no data or not applicable): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
13.2/25Indirect dependencies free of known advisories — 1 affected: @hono/node-server 1.19.15 (moderate 5.9)
40/40No advisories left outstanding — no advisory has been public longer than 90 days
Inputs used
sourceosv
advisories1
affected_packages1
assessed_packages234
unassessed_packages0
affected_by_severitymoderate 1
direct_affected_packages0
Matched the npm:clawmem@0.28.0 runtime dependency closure — what installing the published package pulls in — 234 packages. Reachability is not analyzed.

AI Readiness

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.

61Moderate · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 95 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.95
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes22,784
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
11/11Static type checking — tsconfig.json
10/10Reproducible environment — Dockerfile
2/10Demonstrated agent practice — 1 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0.01
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.1/55Manageable file sizes — 3/180 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes243,047
source_files_sampled180
oversized_source_files3
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalyes
api_schema_files

Key facts

194GitHub stars
6contributors
286commits, last 12 months
5days since last push
69releases
1bus factor
1open issues
npmpackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 32 ⇿
0Stars
32Forks
61Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

01325383222026-032026-052026-07
Major 0Minor 18Patch 43
OpenSSF Scorecard 3.1 / 10
3.1aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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
n/aCI-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
n/aDangerous-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
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
n/aToken-PermissionsNo tokens found
0Vulnerabilities91 existing vulnerabilities detected
Direct dependencies 6
RegistryPackageVersion constraintManifest
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
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Dependency advisories 1

Installing npm:clawmem@0.28.0 pulls in 234 packages, direct and transitive: 1 carry known advisories, of which 0 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
@hono/node-server1.19.15indirectmoderate12.0.5

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.