Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 12:19 UTC

brunoborges / ghx

GitHub CLI Cache Proxy. Caching daemon for the gh CLI to prevent API rate limiting.

GoMIT★ 94 estrellas⑂ 7 forksdesde abr 2026Ver en GitHub ↗

brunoborges/ghx tiene un índice de salud de 65 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (83/100) y la más baja, Community & Adoption (44/100). Se actualizó por última vez hace 9 días. Una sola persona concentra la mayor parte del trabajo reciente.

65
global / 100
Moderado

Índice de salud del software

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

65
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

Bruno BorgesCuenta personal
1082 seguidores314 repositorios públicosdesde sept 2009@Microsoft

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/brunoborges/ghxv1.5.4-15hace 9 días

Métricas por categoría

Vitalidad

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

73Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 9 días
4.2/36Cadencia de commits — 6/52 semanas con commits
18/18Volumen de commits — 107 commits en el último año
10/10OpenSSF Scorecard: Maintained — 9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year107
human_commit_share0,87
days_since_last_push9
active_weeks_last_year6
Cómo se puntúa
27/27Publica versiones — 13 versiones publicadas
36/36Recencia de las versiones — última versión hace 9 días
27/27Cadencia de publicación — una versión cada ~10,4 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count13
latest_release_tagv1.5.4
releases_from_tagsno
days_since_latest_release9
mean_days_between_releases10,4

Comunidad y Adopción

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

44En riesgo · 18% del índice global
Cómo se puntúa
31.9/60Estrellas — 94 estrellas
6.5/25Forks — 7 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks7
stars94
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)
0/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_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

64Moderado · 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
10/10OpenSSF Scorecard: Contributors — project has 8 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
34.8/38.3Aceptación de PR — 10/11 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/26 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs10
open_issues0
closed_issues8
issue_closed_ratio1
closed_unmerged_prs1
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
21.8/25Alcance del propietario — 1082 seguidores de brunoborges
25/25Trayectoria — 314 repos públicos, cuenta de ~16 años
Datos de entrada utilizados
followers1082
owner_typeUser
is_verified
owner_loginbrunoborges
public_repos314
account_age_days6152
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 9 días
20/20Historial de versiones — 15 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/brunoborges/ghx
ecosystemsgo
any_deprecatedno
min_days_since_publish9

Calidad de Ingeniería

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

77Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://brunoborges.github.io/ghx/
10/10Descripción del repositorio
10/10Topics — 2 topics
0/10Wiki
Datos de entrada utilizados
topicscli, github
has_wikino
homepagehttps://brunoborges.github.io/ghx/
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?

62Moderado · 16% del índice global
Cómo se puntúa
6.8/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/26 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 8 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
5/5SAST — SAST tool is run on all commits
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
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_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,3
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories1
affected_packages1
assessed_packages3
unassessed_packages0
affected_by_severityunknown 1
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 3 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

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

83Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .github/copilot-instructions.md
0/15Documentación legible por máquinas (llms.txt)
39.2/40Historial de commits legible — 64 de 87 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,736
agent_instruction_files.github/copilot-instructions.md
agent_instruction_max_bytes5091
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 78 de los últimos 100 commits con autoría o crédito de agente
5/8Mantenimiento automatizado — automatización de dependencias configurada, no observada en los commits muestreados
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,78
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/38 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes12.994
source_files_sampled38
oversized_source_files0

Datos clave

94estrellas de GitHub
1contribuidores
107commits en los últimos 12 meses
9días desde el último push
13versiones publicadas
1factor bus
0issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

Historial de estrellas y forks 0 ★ / 7 ⇿
0Estrellas
7Forks
1Versiones

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

12345532026-042026-052026-05
Mayor 0Menor 0Parche 1
OpenSSF Scorecard 5.3 / 10
5.3agregado

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-27 12:19 UTC

9Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/26 approved changesets -- score normalized to 0
10Contributorsproject has 8 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
10SASTSAST tool is run on all commits
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 2
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/Microsoft/go-winiov0.6.2go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Todas las dependencias 3

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 2 paquetes directos y 1 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Gogithub.com/microsoft/go-winiov0.6.2directa
Gogopkg.in/yaml.v3v3.0.1directa
Gogolang.org/x/sysv0.10.0indirecta
Avisos de dependencias 1

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 3 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 1 tienen avisos conocidos, de los cuales 0 son directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
golang.org/x/sysv0.10.0indirectadesconocida10.44.0

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "cli",
        "github"
      ],
      "is_fork": false,
      "size_kb": 6266,
      "has_wiki": false,
      "homepage": "https://brunoborges.github.io/ghx/",
      "languages": {
        "Go": 134978,
        "Shell": 7620,
        "Makefile": 164,
        "Batchfile": 3027,
        "PowerShell": 3470
      },
      "pushed_at": "2026-07-18T04:11:35Z",
      "created_at": "2026-04-15T14:35:08Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T08:50:38Z",
      "description": "GitHub CLI Cache Proxy. Caching daemon for the gh CLI to prevent API rate limiting.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "http://brunoborges.io",
      "name": "Bruno Borges",
      "type": "User",
      "login": "brunoborges",
      "company": "@Microsoft",
      "location": "Montreal, Canada",
      "followers": 1082,
      "avatar_url": "https://avatars.githubusercontent.com/u/129743?v=4",
      "created_at": "2009-09-22T01:06:33Z",
      "is_verified": null,
      "public_repos": 314,
      "account_age_days": 6152
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.5.4",
          "kind": "patch",
          "published_at": "2026-07-18T04:13:33Z"
        },
        {
          "tag": "v1.5.3",
          "kind": "patch",
          "published_at": "2026-06-22T15:13:24Z"
        },
        {
          "tag": "v1.5.2",
          "kind": "patch",
          "published_at": "2026-05-04T22:27:40Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-04-17T01:36:28Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-04-16T20:33:57Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-04-16T18:09:41Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-04-16T17:14:40Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-04-16T16:47:39Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-04-16T16:19:20Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-04-15T20:27:14Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-15T20:13:56Z"
        },
        {
          "tag": "v0.0.2",
          "kind": "patch",
          "published_at": "2026-04-15T18:53:37Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2026-04-15T17:56:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "6584e26b9a98512d9b8f7bfa5c28846edc98c403",
          "body": "* Initial plan\n\n* fix: single-instance guard and loud fallback for ghxd socket conflicts\n\n- Add ensureSingleInstance() to platform_unix.go: reads the PID file,\n  checks if the previous ghxd process is alive (signal 0), sends SIGTERM\n  (with 500ms grace period), then SIGKILL if still alive. This prev\n[…]\nagent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: Bruno Borges <bruno.borges@gmail.com>\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(ghxd): single-instance guard + loud cache-bypass warnings (#19)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-07-18T04:08:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aeaac4c303be1aafa0b7df5c68295718854ee63f",
          "body": "* Fix per-request GitHub authentication\n\nForward each client's GitHub authentication environment to daemon executions, strip stale daemon credentials, and isolate cache and singleflight entries by full token fingerprint.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>\n\nCopi\n[…]\n-by: Copilot App <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 785a2ead-f377-43ea-b336-95b28beaa2d9\n\n---------\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix per-request authentication for multi-account use (#18)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-07-18T03:38:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ff4c0321b8c60465f3db4b4bd45782b61b4d5f4a",
          "body": "…g gh commands (#17)\n\n* Initial plan\n\n* Fix socket I/O timeout and silent double execution on long-running commands\n\n- Client: use SetWriteDeadline (30s) for sending the request only; clear all\n  deadlines before reading the response so long-running gh commands (multi-minute\n  GraphQL queries, large\n[…]\ntSent sentinel and its errors.As chain.\n\nFixes #14\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: Bruno Borges <bruno.borges@gmail.com>",
          "is_bot": false,
          "headline": "Fix socket I/O timeout causing silent double execution on long-runnin…",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-06-22T15:03:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb05b5af31e03c9c0cc03b7e4ec522b63cf3b45e",
          "body": "…on `gh auth login` (#16)\n\n* Initial plan\n\n* fix: short-circuit passthrough commands to bypass daemon IPC\n\nCommands classified as Passthrough (auth, config, codespace, etc.) are\ninteractive and unsuitable for the daemon, which captures stdout/stderr\nand has a fixed 60-second IPC deadline. Running gh\n[…]\n() immediately (syscall.Exec),\ngiving the process full TTY access and avoiding any IPC timeout entirely.\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: bypass daemon for passthrough commands to eliminate IPC timeout …",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-06-22T15:03:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7d70f4896333a6ff06c320d5bf68ef072c0d9e31",
          "body": "* Initial plan\n\n* Move Go source into src/ folder and update references\n\n* Move ADR.md, DOCS.md, SPEC.md into specs/ folder\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move Go source into src/ folder and docs into specs/ folder (#12)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-06-02T21:47:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0bc38991c68be285f2c87431528df9a32269ee30",
          "body": "…g binary (#10)\n\n* fix: daemon periodically re-resolves gh path and falls back on missing binary\n\nThe daemon previously resolved the gh binary path once at startup and never\nupdated it. This caused two problems:\n\n1. After upgrading gh (e.g., brew upgrade), ghx continued using the old version\n   unti\n[…]\n75728472+Copilot@users.noreply.github.com>\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: daemon periodically re-resolves gh path and falls back on missin…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-05-04T22:25:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0733d5210a360f4a5eae89f906f40ceeab7414a5",
          "body": "Add a 'How caching works' section explaining how cache keys are built\nfrom host, repo, branch, token hash, and full args (including flags),\nand how singleflight coalescing deduplicates concurrent identical calls.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Document cache key construction and singleflight coalescing",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-28T21:36:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aaa1fdb9f0c4075e8b2660fba7ac0c659af0db76",
          "body": "Add a TTL Override Keys section to DOCS.md with the full table of\nbuilt-in command keys and instructions for deriving keys for custom\ncommands added via additional_cacheable.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Document all TTL override keys and custom command TTL config",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-28T21:33:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e25c660e43056ad3b5b2e8de324857fee0d1477",
          "body": "Slim down README to a quick-start overview with highlights, compact\ninstall instructions, and a basic usage example. All detailed sections\n(full install options, gh shim, daemon/cache management, dashboard,\nconfiguration, architecture, security, development) now live in DOCS.md.\n\nAlso add a Docs link to the landing page nav in docs/index.html.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move detailed docs from README to DOCS.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-28T21:25:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "434a676d68eee418c49e5fc26f80f60b28ee7a7f",
          "body": null,
          "is_bot": false,
          "headline": "Update SECURITY.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:34:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa4a2786660e27392b0d3e8886f140e0a0261a0c",
          "body": "For passthrough/unknown commands, the metrics key was built from all\nargs joined together. If a user passed sensitive values as CLI flags,\nthey could surface in /api/stats or /api/log. Now only the first two\nargs (subcommand + action) are used, matching classified commands.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "security: sanitize metrics command key to prevent arg leakage",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:34:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "90b9116f42dcea929253b7a9d27aaa85d9fba2c6",
          "body": "- Apply gofmt -s formatting to internal/allowlist/allowlist.go\n- Reduce main() cyclomatic complexity (23→12) by extracting\n  parseGHXFlags, ensureDaemon, handleSubcommand, and printHelp\n- Reduce handleDaemon() complexity (16→9) by extracting\n  handleDaemonStart and isDetachMode\n- Reduce isTextHeader\n[…]\nixes with bytes.HasPrefix\n- Reduce downloadToWithVersion() complexity (16→8) by extracting\n  fetchAndInstall and downloadAndVerify\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: fix all Go Report Card issues",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:27:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "16483abf7949c50e9c249f2c5958cf7c65f01f44",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Security section and JSON API details to landing page",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:17:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf5b232c6aadf9dfa2bb6e0bbae390595dfffae5",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Option A/B guidance for existing gh installs in shim section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:15:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cce20b8624e1e290459ebff874b889539da8182c",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Windows PowerShell instructions to manual download section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:13:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ff402e2c2c79469c5097326ca02314c78ef2c106",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Bump agent-plugin version to 1.5.0",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T20:37:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f23a6147a7f834e96307e2a69dacc5e5e674201d",
          "body": "- Wire up cfg.LogFile in ghxd (was defined but never used)\n- Dashboard port 0 now disables the HTTP dashboard\n- Simplify xcache flush: always flush all entries (remove resource filtering)\n- Remove dead code: ExecutePassthrough, GHCDir, LogLevel, ToJSON, AvgLatencyMs, HitRate\n- Remove unimplemented '\n[…]\ncommand from SPEC.md\n- Remove daemon internals from agent SKILL.md\n- Add CI, Release, Go Report Card, and License badges to README\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Wire up log file, simplify flush, remove dead code, add badges",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T20:31:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba0df06a569fddf56979b089684fc3625d5fd8eb",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Extract CSS into separate docs/style.css file",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:22:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2d22e4030a46030b62e78da5b03bb9344bfc9f7",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move How It Works section to after Why ghx?",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:17:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "51e68d7d11e5122c2d3ba3594794a2cf5da755bc",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add How It Works link to navbar",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:15:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a654aba3fe45455b6cd84153dea8e60f9988151",
          "body": "Side-by-side layout: diagram on the left, numbered steps on the right.\nStacks vertically on mobile. Removed standalone architecture section.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move architecture diagram to left of How It Works section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:14:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2a5df46c693b8ed6b2e61344d076a900252b21a",
          "body": "CSS-styled visual diagram showing the agent → ghxd → gh flow,\nplaced between the hero and features sections with a nav link.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add architecture diagram section to docs page",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:10:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab72069eb0db23044e09ec551eee7add1ab5bbc8",
          "body": "Move secret and variable out of never-cache. Their list/get actions\nare read-only (secret list returns names only, never values). Add\n'set' to mutating actions for proper cache invalidation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add secret list, variable list/get to built-in cacheable allowlist",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:05:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1fa9669a38e8585f9bc6c76667a39292e18c6eeb",
          "body": "These read-only project subcommands are commonly used by agents\nquerying GitHub Projects structure and items.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add project field-list and item-list to cacheable allowlist",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:00:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7b2a45dc84b5e3c213606b4ae15eaedb033bfb1",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:54:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03043c659db9c8cc21cea84e4ff2bcc8d5693b0d",
          "body": "- Fix class names (step-num → num, step-content → content) to match\n  existing CSS rules, fixing the broken vertical line layout\n- Add copy-to-clipboard buttons on the two plugin commands\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix agent plugin section styling and add copy buttons",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:52:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b06f1e5d1f7282a2364699a2ae4b21829e8d3cb3",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Increase copy button size for better visibility",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:51:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd8b82f70c11a1ec5b995d2a0b4f56f61528a7ce",
          "body": "Each command line in the install block now has a clipboard icon that\nappears on hover. Clicking copies the command text and shows a brief\ncheckmark confirmation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add per-line copy buttons to install commands",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:48:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de6d48c2b6d34988145bd102c1b569e97a782795",
          "body": "Match the styling of the Custom Cacheable Commands section instead of\nusing a feature card.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Restyle GitHub Releases as plain paragraph in install section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:45:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce26cbd583539ef3b9d839a158a3104f4a4be6bd",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rename gh shim section title to emphasize transparent caching",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:34:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c84534df9200ce5e628fa6e2852248fa0924949",
          "body": "Style the GitHub CLI link to match the dark theme instead of\nbrowser-default blue. Uses accent-colored underline with hover effect.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix hero subtitle link styling in docs page",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:33:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "057cbf744a6b4dbdf825a24ef83cc184482b0510",
          "body": "- SPEC.md: fix 11 inaccuracies (Windows support, IPC transport, WorkDir\n  protocol field, project structure, singleflight location, Homebrew\n  install method, config schema, allowlist completeness, Phase 1 status)\n- docs/index.html: clarify gh shim options when GitHub CLI is already\n  installed (Option A: remove gh + reinstall ghx, Option B: agent plugin)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update SPEC.md and docs for accuracy",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:29:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d663f9d82f7b17c4172e1f07718f0ee369eb7e8",
          "body": "When a real gh exists, the shim is not installed and agents bypass\nthe cache. Add a callout box with two clear options: remove gh and\nreinstall ghx (shim path), or keep gh and install the agent plugin.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: clarify options when GitHub CLI is already installed",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:20:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8812ee6c475f25634ed7ef55d6a1c6d45d05477f",
          "body": "Emphasize that the shim automatically gives AI agents caching for\nfree — agents call gh by default, and the shim routes everything\nthrough ghx's cache layer without any agent configuration.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: clarify gh shim benefit for AI coding agents",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:18:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "841baea9ddb2573181e617685d34b18693a14c4e",
          "body": "- Add PowerShell install section (irm | iex)\n- Add Windows manual download note\n- Add install.ps1 to gh shim table\n- Add platform labels to section headings\n- Fix Homebrew command: brew install ghx (was ghxd)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Windows installation steps to README",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:16:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "243e8c0b209d888a5f2795831e10975c72b29e6e",
          "body": "The daemon executes gh subprocesses without setting cmd.Dir, so gh\ninherits the daemon's working directory instead of the client's.\nCommands like \"gh secret list\" that resolve the repo from git fail\nwith \"not a git repository\" when the daemon's CWD differs.\n\nAdd WorkDir to the IPC protocol so the cl\n[…]\n each\nrequest. The executor sets cmd.Dir to this path (only if absolute) so\ngh and git resolve context from the correct directory.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: forward client working directory to daemon subprocesses",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:12:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "47ca2aab9f971fb2679fbf37fe85a87f6e985515",
          "body": "Always install the latest release. Version pinning adds complexity\nfor no practical benefit in an auto-install agent plugin context.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: remove GHCD_VERSION env var from agent plugin",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:02:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ef6029bd12b2db7a81d59146bd0c00f33df8a1c1",
          "body": "Updated README to reflect changes in plugin functionality and compatibility.",
          "is_bot": false,
          "headline": "Revise README for ghx plugin details and compatibility",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "201babe5146be592de0ee3244b10b643579c3bef",
          "body": "Explains how the gh shim works: auto-installed when no real GitHub CLI\nis detected, transparently forwards commands through ghx, and obtains\nthe real gh binary on first use.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add gh shim section to GitHub Pages",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T16:55:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6552acd40be5f7a2da8b4dc1a7bef298f600c6bc",
          "body": "- Add Windows PowerShell install option (irm | iex)\n- Add platform labels (macOS, macOS/Linux, Windows) to install methods\n- Update GitHub Releases note to include Windows (x64 & arm64)\n- Fix Homebrew command: brew install ghx (was ghxd)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: update GitHub Pages with Windows support and fix brew command",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T16:50:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6419949d2c9324f9e4b314e7f9347b4a96312b3",
          "body": "Two bugs in the Homebrew formula prevented the gh shim from being installed:\n\n1. Homebrew's system() in post_install raises on non-zero exit, so\n   \"command -v gh\" failing (no gh found) aborted the entire post_install\n   instead of continuing to create the shim.\n\n2. The shim was generated inline ins\n[…]\nom the release tarball (which already has correct \"$@\"). Use\nPATH scanning with ghx-shim marker detection for robust gh detection.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(brew): install gh shim during install phase, not post_install",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T16:44:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e30d6465c114f69a82b7636f7985d144551093d",
          "body": "…orkflows\n\nConsolidate CI and daily workflows into a single `ci.yml`",
          "is_bot": false,
          "headline": "Merge pull request #7 from brunoborges/copilot/combine-ci-and-daily-w…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T22:40:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13c96cb9a7ea0bc423350c00908dc75cf96b9ded",
          "body": "Install gh shim only when no real gh binary is available on the system",
          "is_bot": false,
          "headline": "Merge pull request #6 from brunoborges/copilot/install-shim-optionally",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T22:39:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d782392ded070408eaad2de26d2ba00bec228ea",
          "body": "…ection\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/c64f9e03-4804-4712-9499-2aa6d02a8afc\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Address code review: simplify PowerShell, fix Homebrew formula gh det…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:19:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e2fb209cf9a45ceedbebbb998f1dc323bb681bd",
          "body": "Updated all installation scripts (install.sh, install.ps1,\nagent-plugin/scripts/install.sh, agent-plugin/scripts/install.cmd)\nand the Homebrew formula to conditionally install the gh shim.\n\nThe shim is now skipped when a real gh binary (not a ghx-shim) is\nfound anywhere on the system PATH. This allo\n[…]\nb CLI without shadowing it.\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/c64f9e03-4804-4712-9499-2aa6d02a8afc\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Install gh shim only when no real gh binary is available on the system",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:17:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9fc82db047a7568cf377e876e2f9adfc9a943b6a",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/dc5de418-00ab-40d7-bca7-d86331a903e7\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Combine ci and daily workflows into ci.yml",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:10:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f275aab5daa554b923bdfebe2073e385a2dc433a",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d05262266e8e7c0bed3670743b61351dc8b81ae9",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:08:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3a0113f20b7c868d57636e31f31343f2c820d06",
          "body": "Add Windows support",
          "is_bot": false,
          "headline": "Merge pull request #2 from brunoborges/copilot/add-windows-support",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T21:06:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4687c0ffbf3cfdaff3bc12987cf9b979cc3d9926",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/beb9fc34-d1eb-47f4-9d0c-4003d5c156e2\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "fix(ci): use PowerShell-safe go coverprofile flag syntax",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "028f6a55803c736552106ac13a2b51e70d8775c3",
          "body": "- Release zip includes gh.cmd alongside ghx.exe and ghxd.exe\n- install.ps1 installs gh.cmd shim (protected against overwriting)\n- Agent plugin adds bin/gh.cmd wrapper for Windows\n- Agent plugin install.cmd places gh.cmd shim with real binaries\n\nThis mirrors the Unix gh shim strategy: all gh commands are routed\nthrough ghx for automatic caching.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add gh.cmd shim for Windows across all install channels",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:56:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d011711a5a52ed45df3ee35ea5b62fdec1ad9926",
          "body": "…upport",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main' into copilot/add-windows-s…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:53:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f56aff64ab973ab14454f0cf0be4109351273b9",
          "body": "- FindRealGHInPath and ManagedGHPath use gh.exe on Windows\n- isExecutable treats all regular files as executable on Windows\n  (permission bits are not meaningful on that platform)\n- Tests use ghBinaryName() for platform-correct filenames\n- TestExtractFromZip uses gh.exe entry name on Windows\n- TestIsExecutable skips non-executable permission check on Windows\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: Windows compatibility for ghcli tests and resolution",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:53:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "38bd7bc97c11c7131783f9b9afa242b87aabfbd4",
          "body": "Potential fix for code scanning alert no. 1: Slice memory allocation with excessive size value",
          "is_bot": false,
          "headline": "Merge pull request #3 from brunoborges/alert-autofix-1",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:49:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c52644e4f4ef94cb3face16a49070b8119be5ecf",
          "body": "Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update internal/daemon/server.go",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:48:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9959cdcac0b968aa0eb9242edeb19dbb7a6a11d7",
          "body": "…with excessive size value\n\nCo-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for code scanning alert no. 1: Slice memory allocation …",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:48:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "278dbd6499c7a89a24821252f7c959b7d002272e",
          "body": "Seven pre-existing files had struct field alignment or spacing\nissues that caused the CI gofmt check to fail consistently.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "style: apply gofmt to all files failing CI lint",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:45:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f39f41905e9b228e4534e2c7a389c4d287bae974",
          "body": "Merged latest main into copilot/add-windows-support, resolving:\n- release.yml: combined Windows .exe/.zip packaging with gh shim in tarballs\n- SPEC.md: trivial whitespace conflict in shim distribution table\n- cmd/ghx/main.go: removed duplicate function declarations from merge\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "merge: resolve conflicts with main (gh shim + ghcli features)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:42:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "964f8fc5fb91c89fec2588a560add2bdcfb02fdc",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/d3bd85bd-4190-4182-8fbd-6450509dea9b\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "merge: resolve latest main conflicts",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T20:37:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6393a489649b1720f28879b210ad9d4c111a10bc",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: gofmt alignment in main.go struct literal",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:33:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0947787c1eaf1d3b11546dc7826c1e1025c020b3",
          "body": "The gh shim is now co-located with ghx in every distribution method:\n\n- Release tarballs include the gh shim script alongside ghx and ghxd\n- install.sh always installs the shim (protected against overwriting\n  a real gh binary by checking for the ghx-shim marker)\n- Homebrew formula installs the shim\n[…]\nplugin adds a bin/gh wrapper that delegates to co-located ghx;\n  plugin install script also places the shim with the real binaries\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: place gh shim alongside ghx in all install channels",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:25:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "666935b5ac6f95c02d8f327ccd1bd27a7adec61b",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/3a3825e3-04a2-4dbf-8587-e40cec8dd82f\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "merge: resolve conflicts with origin/main",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T20:19:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63c170a3be892002cd6dc18632dc828a3847a37e",
          "body": "Add support for using ghx without a pre-installed GitHub CLI:\n\n- New internal/ghcli package for gh binary resolution, shim detection,\n  and auto-download from cli/cli releases with SHA-256 verification\n- Resolution order: user config → PATH (skipping shims) → managed\n  ~/.ghx/bin/gh → auto-download\n\n[…]\n on code paths that need gh\n- Lock file prevents concurrent download races\n- Comprehensive tests (34 tests) with mock HTTP servers\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: gh shim, auto-download, and managed CLI lifecycle",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:12:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "15d4cad200908f88dbd47caa64f247fc585ccb69",
          "body": "Add guidance to the ghx skill telling AI agents to use ghx instead of\nthe GitHub MCP Server whenever possible. Includes a policy section,\na common mappings table for ~20 MCP Server operations, and explicit\nexceptions where MCP Server is the better choice.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "skill: instruct agents to prefer ghx over GitHub MCP Server",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T19:12:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "acb04780b42d6c7b82650e28bb1a86841a9d7771",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Clean up hero terminal snippet: remove Copy button, widen, left-align",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:57:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "997317d656f878bf7e253a6e0b59981412aed35c",
          "body": "- ghx xhelp: shows all x-prefixed commands, flags, and config paths\n- ghxd --help/-h: shows options, socket/dashboard/PID paths, and usage hint\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add xhelp for ghx and --help/-h for ghxd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:50:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aebef9655aae9d891f49d66186069b86e5c5044e",
          "body": "- ghx xversion: prints ghx version (x-prefixed to avoid conflict with gh version)\n- ghxd --version / -v: prints ghxd version\n- Version injected via ldflags at build time, defaults to 'dev'\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add xversion command to ghx and --version to ghxd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:49:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5f1300ca7b0a9a099f472383067338e91e66a48b",
          "body": "- Add version var to ghxd (injected via ldflags at build time)\n- Pass version through to daemon server\n- Expose version in /api/stats JSON response\n- Display version in dashboard footer\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Show version in dashboard and ghxd --help",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:44:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e2c0919914349b81d79309ad3b0fbc9c520a09c6",
          "body": "Each tile now takes full width in a single column layout with icon\nand content side-by-side, giving enough room for long commands.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Stack install tiles vertically for better readability",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:39:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4fb3c4f4b27e35e9d8f99cc03523277df6134c56",
          "body": "- POST /api/flush?resource= endpoint with resource validation\n- POST /api/shutdown endpoint with async graceful shutdown\n- Dashboard: flush button with resource dropdown, shutdown with confirmation\n- Shutdown replaces page content with restart instructions\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add Flush Cache and Shutdown buttons to dashboard",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:37:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32ebaf013aee86ce30237594c6efb2c94abab850",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add footer to dashboard matching GitHub Pages site",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:32:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b5b2b4302a5599510512e2c2ca6a3f945dc2e3c0",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/358e802e-3aa1-435b-a4d7-4865be7da194\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "fix: apply gofmt to files failing lint workflow",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d93a92232db26bc011e0afab93801d14c446cc8",
          "body": "Documents the core architectural rationale — why a two-binary daemon/client\nmodel with allowlist, singleflight, context-aware keys, and auto-start.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add ADR-000: daemon/client architecture with allowlist-based caching",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:27:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e3d27df3e6fcbb17951723cddcd36d10905a38f6",
          "body": "Documents why we chose CLI wrapping over HTTP proxy/MITM approaches,\ncovering TLS complexity, cross-platform concerns, and cache semantics.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add ADR-001: command-layer caching over HTTP-layer caching",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:25:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "140b4d951a8a4ea7d24b39fedd24050c61d05822",
          "body": "ghx cache → ghx xcache (gh cache is Actions cache)\nghx daemon → ghx xdaemon (avoids potential future gh conflicts)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Prefix ghx-specific subcommands with x to avoid gh conflicts",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:20:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "67d853a782d18536ef639f0323b0c0ad58164b24",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix 'From Source' tile: full URL, copy-pasteable pre block",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:18:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d31913ebecf2d08b3aaeea6df44367f2a9775285",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Dashboard: oldest-first log order, always scroll to bottom",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:16:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0f07e620fcb31107fb75b17e72d7b310f52b8d4",
          "body": "… Windows directory validation\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/b5b6bb5d-ae1f-44b8-ae11-12c6016d9ec4\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Fix config test: use suffix check instead of path separator check for…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:14:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b85ced33beaeb6d4cbc7e7231392b2310e6673f",
          "body": "…nd config tests\n\n- Add windows/amd64 and windows/arm64 to release.yml build matrix with .exe suffix and .zip packaging\n- Add windows-latest to CI and daily workflow test matrices\n- Use 'go build ./...' instead of 'make build' for cross-platform CI compatibility\n- Add install.ps1 PowerShell installe\n[…]\n platform-specific defaults\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/b5b6bb5d-ae1f-44b8-ae11-12c6016d9ec4\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Add Windows CI/release targets, install.ps1, agent-plugin wrappers, a…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:12:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96b3e06af27cb4f36ba5b496be158490dfa7a542",
          "body": "…nt, signals, and config\n\n- Create internal/ipc package with build-tagged files for Unix sockets and Windows named pipes\n- Extract platform-specific daemon code (signal handling, socket cleanup, permissions) into build-tagged files\n- Extract platform-specific process management (Setsid, Exec) into b\n[…]\n Windows named pipe support\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/b5b6bb5d-ae1f-44b8-ae11-12c6016d9ec4\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Add Windows platform support via build tags for IPC, process manageme…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:09:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1a38b0a6ab058afaab75d1cf2b480ef75dd1350",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix plugin install command: ghx@agent-plugins (not ghxd)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:08:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "705887c9cd41298b79a4b8bfbc0aedd8c2beb217",
          "body": null,
          "is_bot": false,
          "headline": "Update SKILL.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:04:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d98eb34811501e945d26fdc72ec1c5cf6f9cdd5f",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Make SKILL.md more assertive: always use ghx, never gh",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:03:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ea82c427f3bf2144a1c43b88f076b475a0a550bd",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0ea4c967f25da6a801e260d9abe4638c22e24f8",
          "body": "Complete rename of all binaries, module path, config paths, env vars,\ndocumentation, workflows, plugin metadata, and asset files.\n\n- Binaries: ghc → ghx, ghcd → ghxd\n- Module: github.com/brunoborges/ghcd → github.com/brunoborges/ghx\n- Config dir: ~/.ghc/ → ~/.ghx/\n- Env vars: GHC_* → GHX_*\n- Artifacts: ghcd-*.tar.gz → ghx-*.tar.gz\n- Versioning restarted at 0.0.1\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rebrand ghc/ghcd → ghx/ghxd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T17:54:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0942f4dde61ef09725c881a89e6f3c50ca43141f",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add .github/copilot-instructions.md for Copilot sessions",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:19:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "13b8845b39f618066b6913a3d4bd5dd6fada0bc0",
          "body": "Add 12 new read-only commands to default allowlist:\n- gist list/view, project list/view, cache list\n- ruleset list/view/check, org list\n- search commits/code\n\nFix additional_cacheable to override neverCacheSubcommands,\nallowing users to cache commands like 'gh variable list' that\nare in the never-cache group by default.\n\nDocument custom commands in README, SPEC, and GitHub Pages site.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Expand cacheable allowlist and fix additional_cacheable priority",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:16:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "18cd64ff66157f532a770f61db85d0faa4510090",
          "body": "gh repo list was being classified as passthrough. Added it to the\nallowlist alongside repo view. Updated README and docs tables.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add 'repo list' to cacheable commands",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:10:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7ef40260952836085624d8c4ac2ef5fd5704ff1",
          "body": "Display truncated cache key (first 12 chars) in each log entry,\nwith full key visible on hover via title attribute.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Show cache key in dashboard request log",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:08:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a47eff340974db7c33fe12cf5b0d6fe37443f2f2",
          "body": "…rsion\n\nThe /releases/latest endpoint returns plugin-v1.0.0 which has no\nGo binaries. Both install scripts now filter out plugin-v* tags\nto find the latest binary release.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix install scripts: skip plugin-v* releases when detecting latest ve…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:55:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2252479f4afba3b2e3cab15e42e86c3ed5e91be0",
          "body": "Update all references in README, docs, plugin README, workflow,\nand marketplace repo.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rename agents-plugin → agent-plugin",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:48:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3bd7222a5139d02f34744c99a59ae98e50f0014c",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update marketplace references to brunoborges/agent-plugins",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:30:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c69bbda768f7f9c4ec83a2301e4a177b2152128a",
          "body": "…ilot CLI\n\nBoth tools support the same /plugin marketplace add + /plugin install\ncommands, so use one unified set of instructions everywhere.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Simplify plugin install: use marketplace for both Claude Code and Cop…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:25:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d22804312b4b8ab9e9cf7e97a7de1d6b37db906d",
          "body": "- Created brunoborges/ghcd-plugins marketplace repo\n- Updated README, docs/index.html, and agents-plugin/README.md\n  with correct install commands for Claude Code and Copilot CLI\n- Claude Code: /plugin marketplace add + /plugin install ghcd@ghcd-plugins\n- Copilot CLI: copilot plugin install brunoborges/ghcd:agents-plugin\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix plugin install commands with marketplace support",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:21:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "048012f40e9dce564b6f373c9d855e92440219b3",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Remove preview screenshot artifacts",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:14:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "afae27b233ba8d59a181dfbac2c0f1a835ff2b0f",
          "body": "Cover the Claude Code / Copilot CLI plugin in both the README\n(new install subsection) and the docs/ landing page (new Plugin\nnav link and 3-step section with CTA buttons).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add Agents Plugin section to README and GitHub Pages site",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:14:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a782499c9ee8b44cae6f37ba7522c41e1a15b0cf",
          "body": "Add links to Claude Code and GitHub Copilot CLI plugin documentation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update agents-plugin README with plugin docs links",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:10:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "06a5240e893a26e0fba0b68d67c34a889423e0ef",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add agents-plugin bin wrappers (force-add past gitignore)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:08:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23c5cc140f85b9062b74001ee8f0193ee259211a",
          "body": "Introduces a Claude Code Plugin (also compatible with GitHub Copilot CLI)\nthat installs ghc/ghcd and teaches agents to use the caching proxy for\nall GitHub CLI calls.\n\nPlugin structure:\n- bin/ghc, bin/ghcd: PATH wrappers with lazy binary installation\n- skills/ghcd: skill that instructs agents to pre\n[…]\nform binary installer\n\nAlso adds .github/workflows/release-plugin.yml for independent plugin\nreleases triggered by plugin-v* tags.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add agents-plugin: Claude Code Plugin for ghcd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:08:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7211ceef5e788f8601109f8523d0d66aaf64ec6c",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Remove preview screenshot artifact",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:04:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 13,
      "commits_last_year": 107,
      "latest_release_at": "2026-07-18T04:13:33Z",
      "latest_release_tag": "v1.5.4",
      "releases_from_tags": false,
      "days_since_last_push": 9,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 10.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/brunoborges/ghx",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/brunoborges/ghx",
          "is_deprecated": false,
          "latest_version": "v1.5.4",
          "repository_url": "https://github.com/brunoborges/ghx",
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T04:08:52Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 7,
      "stars": 94,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 3
          },
          {
            "date": "2026-05-27",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 5,
        "total_forks": 7
      },
      "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": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 12994,
      "source_files_sampled": 38,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".github/copilot-instructions.md"
      ],
      "agent_instruction_max_bytes": 5091
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.10.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5024"
            ],
            "fixed_version": "0.44.0",
            "advisory_count": 1,
            "oldest_advisory_days": 65
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "unknown": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 3,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/Microsoft/go-winio",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.2"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/microsoft/go-winio",
            "direct": true,
            "version": "v0.6.2",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/yaml.v3",
            "direct": true,
            "version": "v3.0.1",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.10.0",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 3,
        "direct_count": 2,
        "indirect_count": 1
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 10,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 8,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "brunoborges",
          "commits": 90,
          "avatar_url": "https://avatars.githubusercontent.com/u/129743?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release-plugin.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "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": 10,
            "reason": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
            "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/26 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 8 contributing companies or organizations",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": "6584e26b9a98512d9b8f7bfa5c28846edc98c403",
        "ran_at": "2026-07-27T12:19:47Z",
        "aggregate_score": 5.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T11:29:07Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-18T04:08:52Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/brunoborges/ghx",
    "host": "github.com",
    "name": "ghx",
    "owner": "brunoborges"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 62,
        "vitality": 73,
        "community": 44,
        "governance": 64,
        "engineering": 77
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 73,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "commits_last_year": 107,
              "human_commit_share": 0.87,
              "days_since_last_push": 9,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 9 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "107 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 107
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v1.5.4",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 10.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~10.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 10.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 44,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "forks": 7,
              "stars": 94,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "94 stars",
                "points": 31.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 94
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "7 forks",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "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": 0,
                "status": "missed",
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 64,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "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 8 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 10,
              "open_issues": 0,
              "closed_issues": 8,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "10/11 decided PRs merged",
                "points": 34.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 10,
                      "decided": 11
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/26 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 71,
            "inputs": {
              "followers": 1082,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "brunoborges",
              "public_repos": 314,
              "account_age_days": 6152
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,082 followers of brunoborges",
                "points": 21.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1082,
                      "login": "brunoborges"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "314 public repos, account ~16 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 314
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/brunoborges/ghx"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "15 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 77,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "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": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "cli",
                "github"
              ],
              "has_wiki": false,
              "homepage": "https://brunoborges.github.io/ghx/",
              "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": "https://brunoborges.github.io/ghx/",
                "points": 15,
                "status": "met",
                "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": "2 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 62,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "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/26 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 8 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "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": "9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 3 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 3
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 3,
              "unassessed_packages": 0,
              "affected_by_severity": "unknown 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 3,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 6
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 83,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.736,
              "agent_instruction_files": [
                ".github/copilot-instructions.md"
              ],
              "agent_instruction_max_bytes": 5091
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "64 of 87 human commits state their intent (structured subject or explanatory body)",
                "points": 39.2,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 64,
                      "sampled": 87
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.78,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "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": "78 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 78,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 12994,
              "source_files_sampled": 38,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/38 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 38,
                      "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"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T12:19:56.187709Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/brunoborges/ghx.svg",
  "full_name": "brunoborges/ghx",
  "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 agregadasGo.