Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 32 forksdesde feb 2026Ver en GitHub ↗

yoloshii/ClawMem tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (81/100) y la más baja, Security (42/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

59
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

59
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Yoloshi Nomotomoro?Cuenta personal
0 seguidores34 repositorios públicosdesde abr 2017

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

81Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
12.5/36Cadencia de commits — 18/52 semanas con commits
18/18Volumen de commits — 286 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year286
human_commit_share1
days_since_last_push5
active_weeks_last_year18
Cómo se puntúa
16.2/27Publica versiones — 69 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~1,4 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count69
latest_release_tagv0.28.0
releases_from_tags
days_since_latest_release5
mean_days_between_releases1,4
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

67Moderado · 18% del índice global
Cómo se puntúa
37.1/60Estrellas — 194 estrellas
12.4/25Forks — 32 forks
1.7/15Observadores — 3 observadores
Datos de entrada utilizados
forks32
stars194
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template
Cómo se puntúa
47.3/80Descargas mensuales — 3556 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesclawmem
dependents
ecosystemsnpm
total_downloads
monthly_downloads3556
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

51Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.6/22.5Distribución de commits — el principal contribuyente firma el 97% de los commits
8.1/13.5Amplitud de contribuyentes — 6 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled6
top_contributor_share0,972
Cómo se puntúa
40.1/46.8Resolución de issues — 86% de issues cerradas
21.2/38.3Aceptación de PR — 5/9 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs5
open_issues1
closed_issues6
issue_closed_ratio0,857
closed_unmerged_prs4
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de yoloshii
23.2/25Trayectoria — 34 repos públicos, cuenta de ~9 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginyoloshii
public_repos34
account_age_days3400
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 68 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesclawmem
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

52Moderado · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 20 topics
10/10Wiki
Datos de entrada utilizados
topicsai-agent-memory, ai-agents, bun, claude-code, embeddings, hybrid-search, llama-cpp, local-first, mcp-server, mcp-tools, model-context-protocol, on-device-ai, rag, retrieval-augmented-generation, sqlite, typescript, vector-search, memory, plugin, hermes
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

42En riesgo · 16% del índice global
Cómo se puntúa
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 — sin datos
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 — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — 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 — sin datos
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 — sin datos
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 91 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate3,1
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
13.2/25Dependencias indirectas libres de avisos conocidos — 1 afectados: @hono/node-server 1.19.15 (moderate 5.9)
40/40Sin avisos pendientes — ningún aviso lleva público más de 90 días
Datos de entrada utilizados
sourceosv
advisories1
affected_packages1
assessed_packages234
unassessed_packages0
affected_by_severitymoderate 1
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de npm:clawmem@0.28.0 —lo que arrastra la instalación del paquete publicado—: 234 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

61Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 95 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,95
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes22.784
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — Dockerfile
2/10Práctica demostrada con agentes — 1 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0,01
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.1/55Tamaños de archivo manejables — 3/180 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes243.047
source_files_sampled180
oversized_source_files3
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

194estrellas de GitHub
6contribuidores
286commits en los últimos 12 meses
5días desde el último push
69versiones publicadas
1factor bus
1issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

Historial de estrellas y forks 0 ★ / 32 ⇿
0Estrellas
32Forks
61Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

01325383222026-032026-052026-07
Mayor 0Menor 18Parche 43
OpenSSF Scorecard 3.1 / 10
3.1agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-25 14:44 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities91 existing vulnerabilities detected
Dependencias directas 6
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Avisos de dependencias 1

Instalar npm:clawmem@0.28.0 arrastra 234 paquetes, directos y transitivos: 1 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
@hono/node-server1.19.15indirectamoderada12.0.5

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm.