Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 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 Sterne⑂ 32 Forksseit Feb. 2026Auf GitHub ansehen ↗

yoloshii/ClawMem erreicht einen Gesundheitsindex von 59 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (81/100) ab, am schwächsten bei Security (42/100). Zuletzt vor 5 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

59
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

59
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Yoloshi Nomotomoro?Persönliches Konto
0 Follower34 öffentliche Reposseit Apr. 2017

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

81Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 5 Tagen
12.5/36Commit-Rhythmus — 18/52 Wochen mit Commits
18/18Commit-Volumen — 286 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year286
human_commit_share1
days_since_last_push5
active_weeks_last_year18
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 69 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1,4 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count69
latest_release_tagv0.28.0
releases_from_tagsja
days_since_latest_release5
mean_days_between_releases1,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

67Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
37.1/60Stars — 194 Stars
12.4/25Forks — 32 Forks
1.7/15Watcher — 3 Watcher
Verwendete Eingangsdaten
forks32
stars194
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja
Wie die Bewertung erfolgt
47.3/80Downloads pro Monat — 3.556 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesclawmem
dependents
ecosystemsnpm
total_downloads
monthly_downloads3.556
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

51Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 97 % der Commits
8.1/13.5Breite der Beitragenden — 6 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled6
top_contributor_share0,972
Wie die Bewertung erfolgt
40.1/46.8Issue-Lösungsquote — 86 % der Issues geschlossen
21.2/38.3PR-Annahme — 5/9 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs5
open_issues1
closed_issues6
issue_closed_ratio0,857
closed_unmerged_prs4
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
0/25Reichweite des Inhabers — 0 Follower von yoloshii
23.2/25Kontohistorie — 34 öffentliche Repos, Kontoalter ca. 9 Jahre
Verwendete Eingangsdaten
followers0
owner_typeUser
is_verified
owner_loginyoloshii
public_repos34
account_age_days3.400
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 68 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesclawmem
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

52Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.

Dokumentation

85Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 20 Topics
10/10Wiki
Verwendete Eingangsdaten
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_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

42Gefährdet · 16 % des Gesamtindex

Sicherheitslage

31Gefährdet
Wie die Bewertung erfolgt
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 — keine Daten
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 — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — 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 — keine Daten
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 — keine Daten
0/7.5Token-Permissions — keine Daten
0/7.5Vulnerabilities — 91 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate3,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
13.2/25Indirekte Abhängigkeiten ohne bekannte Advisories — 1 betroffen: @hono/node-server 1.19.15 (moderate 5.9)
40/40Keine offenen Advisories — kein Advisory ist länger als 90 Tage öffentlich
Verwendete Eingangsdaten
sourceosv
advisories1
affected_packages1
assessed_packages234
unassessed_packages0
affected_by_severitymoderate 1
direct_affected_packages0
Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:clawmem@0.28.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 234 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

61Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 95 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,95
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes22.784
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile
2/10Belegte Agentenpraxis — 1 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configstsconfig.json
agent_commit_share0,01
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.1/55Handhabbare Dateigrößen — 3/180 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes243.047
source_files_sampled180
oversized_source_files3
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
20/20MCP-Server
0/40Lauffähige Beispiele
Verwendete Eingangsdaten
example_dirs
has_mcp_signalja
api_schema_files

Eckdaten

194GitHub-Sterne
6Mitwirkende
286Commits, letzte 12 Monate
5Tage seit letztem Push
69Releases
1Bus-Faktor
1offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 32 ⇿
0Sterne
32Forks
61Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

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

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
0Vulnerabilities91 existing vulnerabilities detected
Direkte Abhängigkeiten 6
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Abhängigkeits-Advisories 1

Die Installation von npm:clawmem@0.28.0 zieht 234 Pakete nach sich, direkt und transitiv: 1 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
@hono/node-server1.19.15indirektmittel12.0.5

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.