Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 01:37 UTC

holt-os / holt

An open-source personal agent OS - any LLM, private memory you can see and walk.

TypeScriptMIT★ 3 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

holt-os/holt tiene un índice de salud de 49 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (69/100) y la más baja, Sustainability & Governance (32/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

49
global / 100
En riesgo

Í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.

49
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

holt-osOrganización
0 seguidores4 repositorios públicosdesde jul 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@holt-os/holt0.14.3404724hace 5 díasaiagentagent-ospersonal-assistantllmmcpmemoryragknowledge-graphself-hostedlocal-firstagentskills

Métricas por categoría

Vitalidad

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

69Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
2.8/36Cadencia de commits — 4/52 semanas con commits
18/18Volumen de commits — 99 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year99
human_commit_share1
days_since_last_push5
active_weeks_last_year4
Cómo se puntúa
16.2/27Publica versiones — 11 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,5 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count11
latest_release_tagv0.14.3
releases_from_tags
days_since_latest_release5
mean_days_between_releases1,5
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?

42En riesgo · 18% del índice global
Cómo se puntúa
4.9/60Estrellas — 3 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars3
watchers0
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
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
48.1/80Descargas mensuales — 4047 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@holt-os/holt
dependents
ecosystemsnpm
total_downloads
monthly_downloads4047
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?

32En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de holt-os
5.2/25Trayectoria — 4 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginholt-os
public_repos4
account_age_days22
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 — 24 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@holt-os/holt
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

66Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
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_ci
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.
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
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
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?

35En 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
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,4
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, signed_releases. Los pesos restantes se han renormalizado.

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.

47En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
12.9/40Historial de commits legible — 24 de 99 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,242
agent_instruction_files
agent_instruction_max_bytes
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 — lockfile
8.1/10Práctica demostrada con agentes — 4 de los últimos 99 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0,04
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 0/58 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes31.111
source_files_sampled58
oversized_source_files0

Datos clave

3estrellas de GitHub
1contribuidores
99commits en los últimos 12 meses
5días desde el último push
11versiones publicadas
1factor bus
0issues 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

OpenSSF Scorecard 3.4 / 10
3.4agregado

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 01:37 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
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 873,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Shell": 2637,
        "JavaScript": 48170,
        "TypeScript": 463246
      },
      "pushed_at": "2026-07-19T04:02:45Z",
      "created_at": "2026-07-02T06:02:28Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-20T08:10:32Z",
      "description": "An open-source personal agent OS - any LLM, private memory you can see and walk.",
      "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": null,
      "type": "Organization",
      "login": "holt-os",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/298986272?v=4",
      "created_at": "2026-07-02T05:57:39Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 22
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.14.3",
          "kind": "patch",
          "published_at": "2026-07-19T04:02:41Z"
        },
        {
          "tag": "v0.14.2",
          "kind": "patch",
          "published_at": "2026-07-10T14:40:40Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2026-07-09T18:37:48Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-07-09T16:01:21Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-07-08T11:49:48Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2026-07-08T05:44:18Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-07-06T07:56:25Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-07-06T07:33:04Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-07-06T07:08:28Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-07-05T20:09:56Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2026-07-04T08:13:09Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "4f4e160a0325836ce7f7ed84092239af849b6fdd",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.14.3",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-19T04:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dda716975504042693bd2a1819653660bf0a389",
          "body": null,
          "is_bot": false,
          "headline": "docs: turbovec-style README with banner, badges, and highlights",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-19T03:54:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e807a819e19b16d97b7316cd74b4d1cbadfa0bd0",
          "body": "…ommands (skill compiler)",
          "is_bot": false,
          "headline": "Merge feat: compile enabled skills into the launched brain's native c…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-13T18:33:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a36217f215fe77f45966e7ecdc381e265e87761d",
          "body": "Add a cross-brain skill compiler (src/skillcompiler.ts) that turns every\nenabled Holt skill into the active brain's own custom-command format, so\nskills show up as real slash commands inside the launched session.\n\n- Claude Code: copy each skill folder verbatim into project\n  .claude/skills/<name>/ (\n[…]\n A skill that cannot be\nexpressed for a prompt-only brain is skipped, never emitted broken; nothing\nthrows out of the launch path.\n\nAdd scripts/skillcompiler.test.ts (9 checks) and an npm test script.",
          "is_bot": false,
          "headline": "Compile enabled skills into the launched brain's native commands",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-13T18:29:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "215f25aeeb37e24ce606c6063ddeb46ab8c38cc9",
          "body": null,
          "is_bot": false,
          "headline": "readme: link the holt-jobsearch skill suite",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-10T15:35:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c75347aa2056dbce4a83a381fa652925b5ad5ad3",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.14.2",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-10T14:40:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d23ea029c411a44153d083596a566287d78faa13",
          "body": null,
          "is_bot": false,
          "headline": "docs: lead README with bare holt launch, not holt chat",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-10T14:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a4767ad862f226d2e7a0f7135bb00b7882334b8",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.14.1",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T18:37:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30c66fad9b7e2ea7f1fc39467ec97e2feee97c16",
          "body": null,
          "is_bot": false,
          "headline": "Merge: richer Holt launch box + holt statusline (0.14.1)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T18:34:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e2ac270e7196b183960f2fd9cdd10ee29a7af8f",
          "body": "…sline command + quiet repeat launches",
          "is_bot": false,
          "headline": "Launch: richer Holt intro box (with tips, no brain name) + holt statu…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T18:34:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfc789f1febdd528e827be839ac2dcaad7b756e7",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.14.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T16:01:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b517f438c62b7242ace7264e3a074f495ac03ff9",
          "body": "…launch)",
          "is_bot": false,
          "headline": "Merge feat: bare holt launches the real brain, branded as Holt (holt …",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T15:58:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "274c02bab43f067c5edb7590cfae960c1120f615",
          "body": "Add src/commands/launch.ts: bare holt (and holt launch) now ensures\nsetup (trust, memory dir, memory hooks), resolves the default brain, and\nhands the terminal to the brain's own interactive session (claude/codex/\ngemini, no -p, no prompt) branded as Holt: a banner, a you-are-Holt\nidentity (--append\n[…]\nusLine. API-brain defaults fall\nback to holt chat. Wire cli.ts (bare -> launch, explicit launch case,\nhelp unchanged), point the launch alias/shim at bare holt, and document\nin README + CONFIGURATION.",
          "is_bot": false,
          "headline": "Bare holt launches the real interactive brain, branded as Holt",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T15:56:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "51a4fa2cdcb8117f916ccda81aece60583f7a8e5",
          "body": "…igned-out loop)",
          "is_bot": false,
          "headline": "Merge fix (F7): brain auth-error guidance + /login in chat (no more s…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T15:52:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3a2a6d1a4d2af59ace792fe2ebe9a635a7006ec",
          "body": "Add looksLikeAuthError() in brains.ts and use it in chat.ts and runner.ts\nto catch signed-out/auth-failure replies (even on exit 0) before storing, so\nHolt shows its own guidance instead of relaying loop-inducing model text.\n\nAdd /login [brain] to the in-chat command set: for a CLI brain it detaches\nthe status bar, closes the reader, hands off to the brain's own sign-in, and\nexits cleanly; for an API brain it points at holt setting.\n\nDocument in README and CONFIGURATION.md.",
          "is_bot": false,
          "headline": "Fix signed-out brain loop: detect auth errors and add /login in chat",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-09T15:51:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f171d4732a81de241121f3dc6c7171c40998b82c",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.13.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-08T11:49:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91ce32f23bebc183315f1770576e1e4078c27599",
          "body": "…rmission-gated external file access",
          "is_bot": false,
          "headline": "Merge feat: slash-command gate (F6) + Holt-branded thinking line + pe…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-08T09:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55ccf3dc17de542f418c65595286a17e3501ea46",
          "body": null,
          "is_bot": false,
          "headline": "Merge fix: throttle capture hook re-distillation per session",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-08T09:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ecd30297fa83b9195e33baf09e9a54b02d71d1b",
          "body": "…external file access\n\n- Fix F6: a line starting with / is a command only when its first token is a\n  known command; otherwise the whole line (leading / included) goes to the brain\n  instead of being dropped as 'unknown command'. Fixes paths/URLs being eaten.\n- Brand the pre-reply status line as 'Ho\n[…]\nadic flags do not swallow the prompt). Other CLI/API brains get a note.\n  Grants are in-memory only, never persisted. runBrain gains an optional\n  extraArgs param (defaults to [], API path unchanged).",
          "is_bot": false,
          "headline": "chat: known-command gate, Holt-branded thinking line, session-scoped …",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-08T09:13:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "62aadb7a98053843759c008aa4883657b68d1ef9",
          "body": "…onse\n\nClaude Code fires Stop after every assistant response, so past the\n3-exchange minimum capture() re-ran full fact extraction (a brain call)\non every turn. Add a per-session throttle: only re-distill once a session\ngains at least 2 new exchanges since the last capture. State lives in\n~/.holt/hook-state.json; missing/corrupt file reads as empty. Sessions\nwith no session_id are processed but not tracked. New hooks.log line:\n'-> throttled (exchanges=N lastProcessed=M, need +2)'.",
          "is_bot": false,
          "headline": "Throttle the capture (Stop) hook to avoid re-distilling on every resp…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-08T09:05:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "672943000c2f4d961ea1a464592fe4d9242aaeed",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.12.1",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-08T05:44:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2746024c850bb0b0fc895dc03f0c2f3638fe61d4",
          "body": "…+ inject wording (F5/F4)",
          "is_bot": false,
          "headline": "Merge fix: capture hook robustness (parser + brain path) + hooks.log …",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-07T14:06:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbe6ddb0cf659262825702646d20370df908b7bd",
          "body": "Capture silently did nothing on real Claude Code. Now:\n- Append one outcome/skip-reason line per capture() to ~/.holt/hooks.log\n  (plus a raw-fields line); inject logs only under HOLT_HOOK_DEBUG.\n- Harden readTranscript for Claude Code v2.x shapes: a record is a turn\n  if top-level type OR nested me\n[…]\nok's\n  reduced PATH (login shell command -v, then common install dirs) and run\n  the brain via a per-call command override.\n- Reword the inject block as known background so the model uses it silently.",
          "is_bot": false,
          "headline": "fix(hooks): make Stop-hook capture robust and observable",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-07T14:05:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "981667022357db4fdfdeb57f9350e4c99a43a69a",
          "body": null,
          "is_bot": false,
          "headline": "README: refresh the Status section to the current feature set (0.12.x)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-07T13:56:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d2c26be97a4de62d18a64e969c737bb4c377832",
          "body": null,
          "is_bot": false,
          "headline": "Merge fix: honest status bar label (F3) + persistent bottom bar",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T17:54:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee1dca47fc3f14777fcd187be2ec2fa8f172b432",
          "body": null,
          "is_bot": false,
          "headline": "Merge fix: voice interview skip (F2) + brain assistant identity (F1)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T17:54:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9de063e6aa39b7d583bd2766d21ec2c51061e93",
          "body": "Relabel the chat status bar from a misleading 'NN% context' (users read it\nas the model context window filling up) to 'recent N/12', the true recent\nreplay-window count, plus memory size. The fill bar now maps directly to it.\n\nPin the bar to the last terminal row Claude-Code style: a DEC scroll regi\n[…]\nY (piped/CI)\nkeeps the exact old print-once-per-reply behavior with no escape codes.\nRedraws on SIGWINCH, and detaches cleanly (reset region, clear bar, show\ncursor) on /exit, EOF, and SIGINT/SIGTERM.",
          "is_bot": false,
          "headline": "chat: honest status label + sticky bottom status bar",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T17:53:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f23afa5df4c257a19f4923f4b2f520912a79904a",
          "body": "…tant identity\n\nFix A (voice): treat n/no/skip/cancel/q/quit/empty/EOF at the interview\nentry and depth prompts as a clean cancel. Abort without writing a\nprofile, print a short skip notice. Safety net: if no real answers and\nno samples were gathered, do not synthesize a junk profile. Genuine\ninterv\n[…]\nged.\n\nFix B (brains): prepend one neutral assistant-identity line in\nrenderPrompt, only inside the existing history-or-memory intro block, so\ncold one-shots stay bare and there is no double injection.",
          "is_bot": false,
          "headline": "fix(voice,brains): clean-cancel voice interview on skip + light assis…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T17:52:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8be802f4cfcfadc59befdfa9b80ed1be4e68f9f9",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.12.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:56:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba3467ec8ae6e27e362bf87044416f2e19ddd66d",
          "body": "…epo skills",
          "is_bot": false,
          "headline": "Merge skill subpath install: holt skill add <repo>#<subdir> for monor…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:51:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1d94d7ecfcc974fbfb69bdbdbefbd5c0fbcbbdc",
          "body": "holt skill add now accepts <source>#<subdir> pointing at a skill folder\ninside a repo or path. Split on the first #, clone/resolve the base as\nbefore, then narrow to the subdir (validated for existence + SKILL.md).\nGuard against traversal (absolute or .. subpaths are refused) since a\nregistry entry is remote-controlled. Registry install-by-name benefits\nwith no change: a resolved source may already carry #subdir.",
          "is_bot": false,
          "headline": "feat(skill): subpath install so a registry can be one monorepo",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:50:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30f1097b0dd84242b018515e5eb6de1711bb1d20",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.11.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:33:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95eec76c4a4794a31f1c8c2463e977d1c0d344a4",
          "body": "…shipped in the package",
          "is_bot": false,
          "headline": "Merge built-in skills: 10 curated SKILL.md + read-only builtin scope …",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:31:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a77d3ef094593d6b1d524b34d8f2647b460e3563",
          "body": "Add a third read-only 'builtin' skill scope that ships inside the Holt\npackage, so a curated set of general-purpose skills is available in every\nfolder out of the box. Precedence is workspace > global > builtin, so a\nuser can override any built-in by creating a same-named workspace or\nglobal skill. \n[…]\nev. Publish the skills/ directory\nto npm via the files array.\n\nAuthor the 10 built-in SKILL.md files: summarize, explain, action-items,\nbrief, code-review, explain-code, commit, plan, rewrite, decide.",
          "is_bot": false,
          "headline": "Add built-in skills scope with 10 curated skills",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:30:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99195052c243b47513b32d5242546e8c7eeee643",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.10.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:08:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51406147d64708b117b69d3ac2fef4c32205621f",
          "body": null,
          "is_bot": false,
          "headline": "Fix: avoid raw NUL bytes in ingest edge key (use a printable escape)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:06:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f3dcc3a1b975a5c26137699f1a4faea7d784c7f",
          "body": null,
          "is_bot": false,
          "headline": "Merge holt richer graph: code/docs ingest, communities, GRAPH_REPORT",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:03:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24e3ecce661afac61d432561212901375fe921cc",
          "body": "…es + holt wiki auto",
          "is_bot": false,
          "headline": "Merge holt wiki autopilot: autoSync at session end + lint --fix appli…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:02:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4300130ac2beecfa9aed2adc26c8df467f337563",
          "body": "Extend holt graph to ingest the folder's code and docs into the graph,\ncluster nodes into communities via label propagation, and emit a\nGRAPH_REPORT.md god-node report.\n\n- src/ingest.ts: walk folder (skip node_modules/.git/.holt/dist/build/\n  dotdirs, cap 2000 files / 400KB), per-language import + d\n[…]\n) unchanged (memory + optional wiki).\n- scripts/graph-smoke.mjs: isolated smoke tests (ingest, communities,\n  report, XSS safety, default unchanged).\n- README.md / CONFIGURATION.md: richer-graph docs.",
          "is_bot": false,
          "headline": "Richer graph: ingest code + docs, detect communities, god-node report",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:01:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0cb4fc83951002421c903033eeb711dd18704836",
          "body": "- Extract syncWiki()/foldFacts() into src/wiki.ts as the single reusable\n  sync engine; holt wiki sync, chat session-end, and the capture hook all\n  call it (no duplicated sync logic). holt wiki sync output is unchanged.\n- Auto-sync when wiki.autoSync is true: fires after fact extraction at the\n  en\n[…]\n Shared resolveBrainMaintainer() moved into wiki.ts.\n- Docs: README + CONFIGURATION cover autoSync, holt wiki auto, lint --fix.\n- Tests: extend fake-brain for the fix format; add wiki-autopilot smoke.",
          "is_bot": false,
          "headline": "wiki autopilot: auto-sync at session end + lint --fix that applies",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:01:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8accb1daf42ec00a6e55e68fb1ffd136d706b91c",
          "body": null,
          "is_bot": false,
          "headline": "Merge holt skill registry: search, install-by-name, publish",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T07:00:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4b0aca28dbfdf68ad08c23396f56b2a4caa1054",
          "body": "- src/registry.ts: registry types, fetch+cache (1h TTL, --refresh), tolerant\n  JSON parse, search/rank, resolveByName, buildPublishEntry. HOLT_REGISTRY_URL\n  override (URL, file://, or path) with a graceful-degrade default; zero deps.\n- skill.ts: 'skill search' and 'skill publish' subcommands; 'skil\n[…]\n  clone/copy install path. URLs and local paths behave exactly as before.\n- README + CONFIGURATION: registry format, HOLT_REGISTRY_URL, search, install-\n  by-name, and the git-based (PR) publish flow.",
          "is_bot": false,
          "headline": "Add git-based skill registry: search, install-by-name, publish",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-06T06:59:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b10b23b7666aff02f24d58c6846368c5e9708c7d",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.9.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T20:09:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "079ad03365032ea1610be05478db3e99bb4a6aaa",
          "body": "…ed, tagged by folder)",
          "is_bot": false,
          "headline": "Merge holt memory global: opt-in cross-workspace memory (facts promot…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T20:02:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70c0b9333d43726ca2816a500dc4d54bd4763d21",
          "body": "Add an opt-in global layer over the default per-folder memory. A folder\nthat opts in contributes its distilled facts to a shared store at\n~/.holt/global/turns.jsonl (tagged with the folder path) and reads that\nstore during recall, merging cross-folder facts with local hits. Per-folder\nisolation stay\n[…]\n\n  and registry, and that isolation is the default.\n\nDedup by normalized content + workspace; corrupt/missing store degrades\nto local-only; never throws. No config.json schema change, no version bump.",
          "is_bot": false,
          "headline": "Add opt-in global memory: cross-folder fact sharing tagged by workspace",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T20:01:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6799928fb532a1ae3d375db1bbd68248aff96a8e",
          "body": "…I content generation\n\n# Conflicts:\n#\tREADME.md\n#\tsrc/cli.ts",
          "is_bot": false,
          "headline": "Merge holt voice + write: onboarding interview, voice profile, anti-A…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:55:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4603e02551fd41025aa1bffcbca5c839a3afd091",
          "body": "…AI generation",
          "is_bot": false,
          "headline": "Add writing-voice interview, voice profile, and holt write with anti-…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:52:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d228187036bda9d5cb7993813a4aab780c39c7b",
          "body": "…) + graph view",
          "is_bot": false,
          "headline": "Merge holt wiki: LLM-maintained knowledge layer (derived, regenerable…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:51:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17819cc76d177c137bccd2f1ce4764841b7a580a",
          "body": "… memory\n\nLayer 3 memory: cross-linked, Obsidian-compatible Markdown pages synthesized\nfrom facts.md + turns.jsonl. Derived and regenerable (provenance in frontmatter),\nnever a sole source of truth.\n\n- src/wiki.ts: page model, routing (local embeddings + cosine), maintainer\n  abstraction (brain defa\n[…]\n-> v5 migration adding the wiki block (maintainer/localModel).\n- docs: README + CONFIGURATION knowledge-wiki sections.\n- scripts/wiki-smoke.mjs + fake-brain.mjs: isolated-HOME smoke suite (38 checks).",
          "is_bot": false,
          "headline": "Add holt wiki: derived, LLM-maintained knowledge wiki over per-folder…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:50:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e9a7799ea06b2a9c26af55744a55e6174b38aa6",
          "body": "# Conflicts:\n#\tCONFIGURATION.md\n#\tREADME.md",
          "is_bot": false,
          "headline": "Merge holt doctor: machine-spec detection and recommendations",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:48:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de05988253a71b16abc199ea083d7bb150cf5814",
          "body": "# Conflicts:\n#\tCONFIGURATION.md",
          "is_bot": false,
          "headline": "Merge holt routine: named jobs (skill/task + schedule + output routing)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:47:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "643dc96a27231f043f02756b13cb5e2901e92343",
          "body": "…de Code",
          "is_bot": false,
          "headline": "Merge holt hook: ambient memory (auto-inject + auto-capture) for Clau…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:46:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcb3841aa534f85987f611a85bc83c9be8844d99",
          "body": null,
          "is_bot": false,
          "headline": "Add holt doctor: detect machine and recommend how to run Holt",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:45:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dfced698c12e102571e77cb1b2ea2b921b1ec99",
          "body": "A routine bundles a task source (installed skill or inline prompt), an\noptional daily schedule, and output routing (stdout, file, or Telegram)\ninto one named object. Adds src/routines.ts (store + templates) and\nsrc/commands/routine.ts (add/run/list/show/remove), reuses runTask,\nloadSkill, sendMessag\n[…]\n pure plist/cron builders.\nGeneralizes scheduler buildCommand additively via an optional runArgs so\na scheduled routine fires 'holt routine run <name> --quiet'. Docs added\nto README and CONFIGURATION.",
          "is_bot": false,
          "headline": "Add holt routine: named, reusable, scheduled jobs",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:44:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3fcc0d6fccc54589776b060feba5afcc87463f8",
          "body": "… Code\n\nWire Holt's per-folder memory into Claude Code as two hooks so it works\nambiently with no holt chat and no manual tool call:\n\n- inject (UserPromptSubmit): recall the folder's most relevant notes and\n  print a compact context block for Claude Code to inject.\n- capture (Stop): read the transcr\n[…]\ntime hooks are\ndefensive: trusted-folder + .holt/memory guard, stdout discipline on\ninject, silent best-effort, always exit 0. Wired into cli.ts and help.\nDocs added to README.md and CONFIGURATION.md.",
          "is_bot": false,
          "headline": "Add holt hook: ambient memory (auto-inject + auto-capture) for Claude…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-05T19:20:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dede41a02745838167992672c99158ffa9e85010",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.8.4",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-04T08:13:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a134b0cfa994f71918c2f79d9ee4794a8644a06a",
          "body": "Cutting a release is now one command. scripts/release.sh bumps the version in\npackage.json and src/version.ts, runs the CI checks locally, then commits, tags,\nand pushes. .github/workflows/release.yml fires on the version tag: it verifies\nthe tag matches the code, publishes to npm with an automation\n[…]\nomebrew-tap.\n\nRemoves the manual three-step release (passkey npm publish + hand-edited brew\nformula + sha256). Needs two repo secrets: NPM_TOKEN and HOMEBREW_TAP_TOKEN\n(documented in CONTRIBUTING.md).",
          "is_bot": false,
          "headline": "Add release automation: npm run release + Release workflow",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T18:36:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04962280224a895c214c0653412c6f079cd983b1",
          "body": "Security / correctness (high):\n- output.ts: block javascript:/data:/vbscript: hrefs in saved HTML (stored XSS); handle balanced parens in link URLs\n- output.ts: /save (saveReply) now confined to the trusted folder; reject absolute paths, separators, and \"..\"\n- graphview.ts: \"<!--\" in memory produced\n[…]\ns now exit non-zero\n- cli.ts: unknown-command message goes to stderr\n\nHousekeeping:\n- version.ts: single source of truth for the version, shared by the CLI and the MCP serverInfo (was hardcoded 0.7.0)",
          "is_bot": false,
          "headline": "Fix 21 bugs found in end-to-end audit; v0.8.3",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T15:30:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b5159c26c9d01a163e96ceabf781dae0731a011",
          "body": null,
          "is_bot": false,
          "headline": "Document Homebrew install (brew install holt-os/tap/holt)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T14:26:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bd2a9041b40be5b0f0bc3ef4cf27c7d7a4b1bf2",
          "body": null,
          "is_bot": false,
          "headline": "Chat status bar: brain, live-context fill bar, and memory size, v0.8.2",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T14:13:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0010f13e026a915ce9b3dc0580baa5297d8b83c8",
          "body": "…, v0.8.1",
          "is_bot": false,
          "headline": "Telegram setup from holt init and holt setting (shared setupTelegram)…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T14:10:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b54831f6d25d2cde0a5f4c1feeebc193064ee0ca",
          "body": "list is read-only (reads the JSON job store); only add/remove write launchd/\ncron entries and need the trust gate. Previously every subcommand ran\nensureTrusted first, so 'holt schedule list' hung on the stdin trust prompt\nin an untrusted folder (and non-interactively).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix: holt schedule list no longer requires trust or blocks on a prompt",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T14:05:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e3e34e48e754c950dfc9daa19a077e11cfbeefc8",
          "body": null,
          "is_bot": false,
          "headline": "Document holt run, schedule, telegram, notify; update roadmap for v0.8.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T14:00:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1801c595d6b3cb065c77e9010749f53c1e646b8f",
          "body": null,
          "is_bot": false,
          "headline": "Merge Telegram bot + holt notify",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3c5f74366089d3d54ab26b88d5ca568ebd9d3dc",
          "body": null,
          "is_bot": false,
          "headline": "Merge holt schedule",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aa11c8ab3e9316ef55017408146647ad767f452",
          "body": null,
          "is_bot": false,
          "headline": "Merge runTask engine + holt run",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe4bfed6b10a034dd895d3200e5a9edf4172f763",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "holt schedule: launchd/cron entries that fire holt run on a timer",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:57:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "efd96b0d175ff4262d0c8ef4381c3f91a9ca334c",
          "body": "…emory\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "runTask engine + holt run: recall context, brain executes, store to m…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:57:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5e93f1a2f15fc2ce1c60e7bfd0114a490aafc072",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Telegram bot + holt notify: chat with Holt from your phone",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:57:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6012dcca949a695929267717e79475e876c22b6",
          "body": null,
          "is_bot": false,
          "headline": "Automation contract seam: runTask signature",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:49:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35dbbf5a83dc8589011f312662716dfa3763f003",
          "body": null,
          "is_bot": false,
          "headline": "Integrate MCP server: wire holt mcp command, v0.7.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2eb1837e13900f93fb396a7aa37ab84f06c42269",
          "body": null,
          "is_bot": false,
          "headline": "Merge MCP tools and command",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08e4fbe7d556b915c8798bc3a1eb79d9f55a00ab",
          "body": null,
          "is_bot": false,
          "headline": "Merge MCP protocol engine",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0094b0158bb2f290966d0210ebb560412a0da98",
          "body": "…lt mcp command + docs",
          "is_bot": false,
          "headline": "MCP tools (recall/remember/list_skills/get_skill/memory_stats) and ho…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:18:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2a0e00e3257a97fec5199756a139bcf08208cc1",
          "body": null,
          "is_bot": false,
          "headline": "MCP protocol engine: JSON-RPC 2.0 stdio server, pure dispatcher",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:18:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e91a66db63a4c7066030e8b2249ff8c086a8f607",
          "body": null,
          "is_bot": false,
          "headline": "MCP contract seam: McpTool and runMcpServer signature",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T13:12:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d26d06d08f195a8d3a57675c98f6754673239c14",
          "body": null,
          "is_bot": false,
          "headline": "Integrate deeper memory loop, README + roadmap, v0.6.0",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T10:19:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9af1898831fe376c022d1a69e61372402191d758",
          "body": null,
          "is_bot": false,
          "headline": "Merge deeper memory loop",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T10:17:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31bf5ffa723c24d714228aaca530b12af3186e45",
          "body": "…ted recall, holt memory facts",
          "is_bot": false,
          "headline": "Deeper memory loop: distill facts at session end, facts.md, fact-boos…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-03T10:17:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "371e47e6adc8b3079127dbab629add6366252e7f",
          "body": "…rce step needed",
          "is_bot": false,
          "headline": "Launch command as instant bin launcher with rc-alias fallback, no sou…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:35:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cb169f859d2970e299337479513ad5b557332ee",
          "body": "…issable source hint after alias setup",
          "is_bot": false,
          "headline": "Friendlier API brain connect (default provider, re-ask, skip) and unm…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:31:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f3e5960494c3f149823cc69e4252288c4d83978",
          "body": "…a v3, add @types/node, v0.5.0",
          "is_bot": false,
          "headline": "Integrate skills and graph into CLI and chat, reconcile docs to schem…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:18:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2211d8d677444265f27440cda0bcea09e28657a",
          "body": null,
          "is_bot": false,
          "headline": "Merge knowledge graph view",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:10:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ab2d837da833257f251774a6f01d3a191cffca1",
          "body": null,
          "is_bot": false,
          "headline": "Merge skills system",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:10:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e95985a3e7620a85d72153b1473bf5cb7e0a853",
          "body": "…derer, holt graph command",
          "is_bot": false,
          "headline": "Knowledge graph view: buildGraph, self-contained interactive HTML ren…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:10:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98e42a0a05e1feb693a54cc1771076907190b955",
          "body": null,
          "is_bot": false,
          "headline": "Skills: SKILL.md discovery, list/show/create/add/remove, prompt helpers",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:10:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72b5cdef9767402d11f92fc8bd960d1c442e0959",
          "body": null,
          "is_bot": false,
          "headline": "Merge direct API brains and output format",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:10:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4067ca6ddb2aa2cb8035a7021d20cdbd73d59c3a",
          "body": "…ey storage, output format toggle, and /save",
          "is_bot": false,
          "headline": "Direct API brains for Anthropic, OpenAI, and Gemini with streaming, k…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:10:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba71111d59ce43af36517e750d08301a4667ced5",
          "body": null,
          "is_bot": false,
          "headline": "Merge docs reconciliation and CI",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdf329c9f59826c260e83a9981b36f6c26344597",
          "body": "…, add CI with em-dash guard",
          "is_bot": false,
          "headline": "Rewrite architecture and add configuration docs to match v0.4 reality…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T12:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae3ae5fa0fe7c6f7d6665ebc7c9c8e9428733a8a",
          "body": "…ed backfill, coverage hints",
          "is_bot": false,
          "headline": "Memory setup in init (Ollama install and model pull), holt memory emb…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T11:54:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44975687dff3947698795c7b3a1b5cd436a1bdb6",
          "body": "…ama) and keyword fallback, streaming replies, context cap, holt memory command",
          "is_bot": false,
          "headline": "Phase 1: persistent per-folder memory with semantic recall (local Oll…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T11:49:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5720d59a3cb9f61963f68e91205e6f62482b46c0",
          "body": "…workspace config, holt login",
          "is_bot": false,
          "headline": "Onboarding: per-folder trust, brain auto-install, login handoff, per-…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T11:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af2415392c68fc7d5a9d836a4d18ec84e275fe4a",
          "body": "…ttings, and custom launch alias",
          "is_bot": false,
          "headline": "Phase 0: real init, chat with context-preserving /brain switching, se…",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T11:04:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bdf5d6bc1a1a277795758213c76d0c5441661fa",
          "body": null,
          "is_bot": false,
          "headline": "Remove remaining em-dashes from package metadata, config, and CLI",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T07:09:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6df2c6b3fec1fab807d86b6a6055566c4aa3830b",
          "body": null,
          "is_bot": false,
          "headline": "docs: polish README and remove em-dashes",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T07:07:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c7fe4b60c25ae5828bb857b0e3ec1ea2a98bece",
          "body": null,
          "is_bot": false,
          "headline": "Scope npm package as @holt-os/holt (unscoped name blocked by npm)",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T06:45:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d6e22eac07848e7f82d7e5b4b59a50ab254077d",
          "body": null,
          "is_bot": false,
          "headline": "Scaffold Holt: CLI skeleton, config, architecture, contributing docs",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T06:11:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef48e9c6addee436998870935b434551d00fb1ed",
          "body": null,
          "is_bot": false,
          "headline": "Initial commit",
          "author_name": "Debashis Nayak",
          "author_login": "debashisn94",
          "committed_at": "2026-07-02T06:02:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 11,
      "commits_last_year": 99,
      "latest_release_at": "2026-07-19T04:02:41Z",
      "latest_release_tag": "v0.14.3",
      "releases_from_tags": true,
      "days_since_last_push": 5,
      "active_weeks_last_year": 4,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 1.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@holt-os/holt",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "agent",
            "agent-os",
            "personal-assistant",
            "llm",
            "mcp",
            "memory",
            "rag",
            "knowledge-graph",
            "self-hosted",
            "local-first",
            "agentskills"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@holt-os/holt",
          "is_deprecated": false,
          "latest_version": "0.14.3",
          "repository_url": "https://github.com/holt-os/holt",
          "versions_count": 24,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 4047,
          "first_published_at": "2026-07-02T06:50:27.786000Z",
          "latest_published_at": "2026-07-19T04:03:00.296000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 3,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 31111,
      "source_files_sampled": 58,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [],
      "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": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "debashisn94",
          "commits": 99,
          "avatar_url": "https://avatars.githubusercontent.com/u/16542883?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 10,
            "reason": "no dangerous workflow patterns detected",
            "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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "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": 0,
            "reason": "security policy file not 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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "4f4e160a0325836ce7f7ed84092239af849b6fdd",
        "ran_at": "2026-07-25T01:37:03Z",
        "aggregate_score": 3.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T04:03:05Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/holt-os/holt",
    "host": "github.com",
    "name": "holt",
    "owner": "holt-os"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 49,
      "inputs": {
        "security": 35,
        "vitality": 69,
        "community": 42,
        "governance": 32,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 69,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "commits_last_year": 99,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 4
            },
            "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": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "99 commits in the last year",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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": 11,
              "latest_release_tag": "v0.14.3",
              "releases_from_tags": true,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 1.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "11 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "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.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.5
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 42,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 5,
            "inputs": {
              "forks": 0,
              "stars": 3,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "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": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "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": 60,
            "inputs": {
              "packages": [
                "@holt-os/holt"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4047
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,047 downloads/month across npm",
                "points": 48.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4047,
                      "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 32,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "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": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "holt-os",
              "public_repos": 4,
              "account_age_days": 22
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of holt-os",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "holt-os"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~0 yr old",
                "points": 5.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@holt-os/holt"
              ],
              "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": "24 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "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": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "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": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 35,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.4
            },
            "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 dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "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": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 47,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.242,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "24 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 12.9,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 24,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.04,
              "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": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "4 of the last 99 commits agent-authored or agent-credited",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 4,
                      "sampled": 99
                    }
                  }
                ],
                "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 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 31111,
              "source_files_sampled": 58,
              "oversized_source_files": 0
            },
            "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": "0/58 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 58,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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-25T01:37:08.271505Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/holt-os/holt.svg",
  "full_name": "holt-os/holt",
  "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.