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

neilberkman / ccrider

Search, browse, and resume your Claude Code sessions. Fast.

GoMIT★ 114 estrellas⑂ 4 forksdesde nov 2025Ver en GitHub ↗

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

59
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

Neil BerkmanCuenta personal
30 seguidores84 repositorios públicosdesde dic 2008

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/neilberkman/ccriderv1.6.1-43hace 8 días

Métricas por categoría

Vitalidad

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

79Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
14.5/36Cadencia de commits — 21/52 semanas con commits
18/18Volumen de commits — 199 commits en el último año
10/10OpenSSF Scorecard: Maintained — 28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year199
human_commit_share1
days_since_last_push8
active_weeks_last_year21
Cómo se puntúa
27/27Publica versiones — 39 versiones publicadas
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~4,4 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count39
latest_release_tagv1.6.1
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases4,4

Comunidad y Adopción

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

43En riesgo · 18% del índice global
Cómo se puntúa
33.3/60Estrellas — 114 estrellas
4/25Forks — 4 forks
0/15Observadores — 2 observadores
Datos de entrada utilizados
forks4
stars114
watchers2
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?

60Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
1/22.5Distribución de commits — el principal contribuyente firma el 96% de los commits
9.5/13.5Amplitud de contribuyentes — 7 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled7
top_contributor_share0,955
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
30.6/38.3Aceptación de PR — 12/15 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 1/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs12
open_issues0
closed_issues7
issue_closed_ratio1
closed_unmerged_prs3
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
10.7/25Alcance del propietario — 30 seguidores de neilberkman
25/25Trayectoria — 84 repos públicos, cuenta de ~17 años
Datos de entrada utilizados
followers30
owner_typeUser
is_verified
owner_loginneilberkman
public_repos84
account_age_days6443
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 8 días
20/20Historial de versiones — 43 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/neilberkman/ccrider
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

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

68Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

35En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not 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
4.5/7.5Vulnerabilities — 4 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,5

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.

76Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .claude/CLAUDE.md, AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 77 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,77
agent_instruction_files.claude/CLAUDE.md, AGENTS.md
agent_instruction_max_bytes6389
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 23 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,23
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/81 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes26.299
source_files_sampled81
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

114estrellas de GitHub
7contribuidores
199commits en los últimos 12 meses
8días desde el último push
39versiones 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
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

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

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.

333444432026-072026-072026-07
Mayor 0Menor 2Parche 2
OpenSSF Scorecard 3.5 / 10
3.5agregado

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-24 12:31 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
6Vulnerabilities4 existing vulnerabilities detected
Dependencias directas 18
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/BurntSushi/tomlv1.5.0go.mod
Gogithub.com/atotto/clipboardv0.1.4go.mod
Gogithub.com/aws/aws-sdk-go-v2/configv1.29.4go.mod
Gogithub.com/aws/aws-sdk-go-v2/credentialsv1.17.57go.mod
Gogithub.com/aws/aws-sdk-go-v2/service/bedrockruntimev1.24.3go.mod
Gogithub.com/cbroglie/mustachev1.4.0go.mod
Gogithub.com/charmbracelet/bubblesv0.21.0go.mod
Gogithub.com/charmbracelet/bubbleteav1.3.10go.mod
Gogithub.com/charmbracelet/lipglossv1.1.0go.mod
Gogithub.com/dustin/go-humanizev1.0.1go.mod
Gogithub.com/mark3labs/mcp-gov0.41.1go.mod
Gogithub.com/muesli/reflowv0.3.0go.mod
Gogithub.com/olebedev/whenv1.1.0go.mod
Gogithub.com/sethvargo/go-dicewarev0.5.0go.mod
Gogithub.com/spf13/cobrav1.10.1go.mod
Gogithub.com/tmc/langchaingov0.1.14go.mod
Gogithub.com/zeebo/blake3v0.2.4go.mod
Gomodernc.org/sqlitev1.40.0go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 10322,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 473711,
        "Shell": 1925,
        "Makefile": 241
      },
      "pushed_at": "2026-07-16T07:50:10Z",
      "created_at": "2025-11-11T21:43:43Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T22:59:04Z",
      "description": "Search, browse, and resume your Claude Code sessions. Fast.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Neil Berkman",
      "type": "User",
      "login": "neilberkman",
      "company": null,
      "location": null,
      "followers": 30,
      "avatar_url": "https://avatars.githubusercontent.com/u/37657?v=4",
      "created_at": "2008-12-01T23:47:24Z",
      "is_verified": null,
      "public_repos": 84,
      "account_age_days": 6443
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2026-07-16T07:53:08Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-10T21:11:27Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-07-04T15:49:23Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-02T14:34:57Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-06-28T21:44:46Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2026-06-19T21:52:12Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2026-06-18T12:43:26Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-06-07T17:35:42Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2026-06-07T14:38:04Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-06-06T23:25:03Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-06-06T21:31:41Z"
        },
        {
          "tag": "v1.1.9",
          "kind": "patch",
          "published_at": "2026-04-22T23:31:51Z"
        },
        {
          "tag": "v1.1.8",
          "kind": "patch",
          "published_at": "2026-04-07T21:43:51Z"
        },
        {
          "tag": "v1.1.7",
          "kind": "patch",
          "published_at": "2026-04-06T05:00:37Z"
        },
        {
          "tag": "v1.1.5",
          "kind": "patch",
          "published_at": "2026-03-26T14:30:20Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2026-03-16T16:15:51Z"
        },
        {
          "tag": "v1.1.3",
          "kind": "patch",
          "published_at": "2026-03-10T05:29:17Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-03-01T05:47:07Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-02-28T19:52:28Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-02-28T16:32:32Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2026-01-11T21:35:06Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2026-01-06T20:47:50Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2026-01-05T07:14:21Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2026-01-05T06:12:48Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2026-01-05T04:58:33Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2026-01-02T05:15:35Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2025-12-31T04:54:44Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2025-12-30T22:42:30Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2025-12-30T20:12:23Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2025-12-30T20:02:26Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2025-12-30T19:31:32Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2025-12-30T05:32:57Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2025-12-27T22:05:40Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2025-12-27T21:48:57Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2025-11-30T23:03:27Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2025-11-30T22:57:11Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2025-11-12T08:09:38Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2025-11-12T07:23:34Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2025-11-12T05:21:50Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "dae884161ef0f58237346cb93eb8c68e4229458d",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.6.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-16T07:49:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c1d09be57d63cf3961680aa631c56ae3bb913ab",
          "body": "- Errors print once (SilenceErrors/SilenceUsage) and runtime failures\n  no longer dump the full usage block after the message\n- Unknown session IDs surface db.ErrSessionNotFound with the ID\n  instead of leaking \"sql: no rows in result set\"\n- Sync messaging and progress write to stderr, keeping stdou\n[…]\n; non-TTY output gets plain per-10% lines instead of\n  progress-bar redraw frames\n- Bare invocation with piped stdout prints help instead of failing\n  with a TTY error; root help links the issues page",
          "is_bot": false,
          "headline": "fix: clean up CLI error handling and sync output streams",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-16T07:49:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ef5fbc059e2a30c03dee483dcfb4d9cfe792448",
          "body": null,
          "is_bot": false,
          "headline": "feat: add Antigravity CLI support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-10T21:08:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b95273edd6bc5001817d0e8c88b1b35a076e5087",
          "body": null,
          "is_bot": false,
          "headline": "docs: remove retired Go Report Card badge",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-08T23:19:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b604f65b1ea77f81522b058c65c9e92efe301ddc",
          "body": null,
          "is_bot": false,
          "headline": "fix: make provider display neutral",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-04T15:45:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07daeb254f9628966b9bf7e89cba7edfb2f60321",
          "body": null,
          "is_bot": false,
          "headline": "feat: add Pi provider support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:30:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e767f2385f529e639123a38798615190a690552c",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.5.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:30:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c0936e913699f74b5072e4863776331e116572c",
          "body": "Add Pi to the provider registry with native resume/fork command construction, pi_flags config plumbing, default source discovery, and docs.\n\nAdd a Pi JSONL parser built on the shared ccsessions toolkit. Message UUIDs include the filename stem to avoid collisions between files with the same metadata \n[…]\ned on PR #21 by @Nabsku.\n\nKnown debt: Codex message UUIDs still use the shipped key format and can collide across copied rollout files; this change deliberately leaves existing Codex hashes untouched.",
          "is_bot": false,
          "headline": "feat: add Pi provider support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:17:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "657ccba1885d4974004d8212e726a054ae0e67d3",
          "body": "Move provider identity, resume contracts, config flag lookup, display names, and source hints into one core registry so interface help and MCP descriptions derive from the same provider table.\n\nAdd shared JSONL parser utilities for long-line reads, deterministic message UUIDs, fallback summaries, and content-item text extraction. Existing provider hash keys are preserved so re-imports keep upserting the same messages.",
          "is_bot": false,
          "headline": "refactor: centralize provider registry",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:05:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c7b40786dd3ffbb44f9af0a6f0ba5dd5cb2b994",
          "body": null,
          "is_bot": false,
          "headline": "docs: add toolbar offset changelog entry",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T13:36:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9ae900d816c23d247379e2bfb6f8b097b6e5382",
          "body": "Use lipgloss vertical joining for the session list/help area and align list/detail viewport heights so the shortcut toolbar sits on the final terminal line.",
          "is_bot": false,
          "headline": "Fix toolbar offsets",
          "author_name": "Evan Widloski",
          "author_login": "Evidlo",
          "committed_at": "2026-07-02T13:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52211c87dfc24cba59151ba86bfbc6551d668ed0",
          "body": null,
          "is_bot": false,
          "headline": "feat: add OpenCode support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-28T21:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a35795f72a29d2b74b5620344224ecb2bda3b6c5",
          "body": "- Compute created_at/updated_at only from user/assistant turns, so\n  non-message events (pr-link, file-history-snapshot, queue-operation,\n  summary) no longer inflate a session's last-active time and scramble\n  the default sort. Existing rows need `ccrider sync --force` to recompute.\n- Render the he\n[…]\ncreen body at the terminal's default foreground instead\n  of a dim gray that washed out on dark themes; accent the title/headings.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: accurate last-active sort + readable help screen (v1.3.2)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-19T21:49:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b3f35f1b7a790184cdfb2f528a7aa1620ff70746",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.3.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-18T12:39:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0bfd65bb1144f04e09aa7d0f0c97a81e98d3e09",
          "body": "In the detail view's in-session search, the \"typing\" key handler bound\n`j`/`k` (and arrow up/down) to viewport scrolling *before* the keys\nreached the search text input. As a result, any query containing the\nletters `j` or `k` silently lost those characters — typing \"kotopia\"\nproduced \"otopia\", \"jes\n[…]\ny keeps `j`/`k`\nscrolling, which is correct there: you're cycling matches, not typing.\n\nAdds a regression test that types \"kj\" into the in-session search and\nasserts both characters land in the input.",
          "is_bot": false,
          "headline": "fix: type j/k into in-session search instead of scrolling viewport (#18)",
          "author_name": "koto",
          "author_login": "koto9x",
          "committed_at": "2026-06-18T12:36:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c34aeaa536bfd5ef9b84bf6d5d820fe1ad0223c",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelog for v1.3.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T17:32:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "045ae126b57900113429b45392567a0d28b7cb54",
          "body": "claude_flags has long been injected into every Claude resume command,\nbut Codex and Copilot sessions got bare commands — no way to bake in\nflags like --dangerously-bypass-approvals-and-sandbox that users\nalready apply via shell aliases.\n\nAdd codex_flags and copilot_flags to config.toml, and widen th\n[…]\n CONFIGURATION.md\ndocumented a dangerously_skip_permissions boolean that never existed\nin code — replaced with the real flag keys.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: per-provider resume flags (codex_flags, copilot_flags)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T15:27:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "952dc3294edddddf4415102f706693c1cbe82585",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelog for v1.2.2",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:34:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ec76e7cfd96b8aad7fb6dc4166514fe658fb051d",
          "body": "Core/interface cleanup pass — interfaces (CLI, TUI, MCP) were each\nre-deciding things that must hold regardless of interface:\n\n- ClaudeFlags application was per-callsite opt-in, so the TUI copy/\n  write/fallback commands silently omitted configured flags while the\n  exec and MCP paths applied them. \n[…]\ne.\n\nTests pin each behavior; TUI/core tests isolate HOME so they don't\nabsorb the developer's real ~/.config/ccrider claude flags.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: move resume command/prompt assembly fully into core",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:28:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ac77271b683966684d35aacc5ee24b342ea81424",
          "body": "Resume commands emitted by the MCP tools now include the user's\nconfigured claude flags (e.g. --dangerously-skip-permissions), matching\nhow the TUI exec path invokes claude. Flags are loaded per request so\nconfig edits apply without restarting the server, config errors fall\nback to no flags, and non-Claude providers ignore them (existing\ncore behavior).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: apply configured ClaudeFlags to MCP resume_command",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:19:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0bce68ec3ba6ca161d031c3cedbbf1b29ef5726d",
          "body": "Agents consuming the MCP tools were stitching resume commands from the\nseparate project + session_id fields and frequently omitting the cd\nprefix, producing bare commands that fail with 'No conversation found'\nfrom any other cwd. Ship the full command instead so consumers never\nbuild it themselves.\n\n[…]\nrollout\nprefix stripped to the bare UUID, and the bare-command-plus-comment\nfallback when the project path is missing from the DB.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add pre-built resume_command to all MCP session payloads",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:13:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6691da6f692087618ac124b201c7f12a11485cc6",
          "body": "Resume commands only work from the directory the session was created in\n(Claude and Codex both scope session storage by cwd), so any command\nshown or copied without a cd prefix fails with 'No conversation found'.\n\nAdd session.ResumeCommandIn to core and route all interface emission\nsites through it:\n[…]\nng from the DB, emit the bare command with\na trailing '# project path missing in DB for session <id>' comment\ninstead of erroring.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: cd-prefix every emitted resume command via core ResumeCommandIn",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:05:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c0df52decdf3d8c9bb30ec6a26fcf85bedec17dd",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.2.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-06T23:21:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd796598afd4bfe8f38c6f4d38ab2c878b644c7d",
          "body": "Derive enumerated session skip hashes from message UUIDs and text content instead of file mtime.",
          "is_bot": false,
          "headline": "perf: hash enumerated session message content for skip checks",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T23:19:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33cfa0cb806036afa312fbc1336b1925f9e6fb39",
          "body": "Quote session IDs and shell cd working directories in resume command construction.",
          "is_bot": false,
          "headline": "fix: shell-quote resume session IDs and working dirs",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T23:19:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32c6f9a0d7996ed2b4482a42f92cae9e1ed68b5e",
          "body": "Skip malformed events.jsonl lines in the Copilot parser so one corrupt line does not drop the rest of the transcript.",
          "is_bot": false,
          "headline": "fix: skip malformed lines in Copilot events parser",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T23:09:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15b25343dc53de800fb096ee7ebdaf008d233c23",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelog for v1.2.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-06T21:28:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a54694f0347fd53d3a075335b599d35a1b8a8671",
          "body": "* fix: make session resume provider aware\n\nccrider hardcoded `claude --resume` for every provider, so resuming a\nCodex session generated a claude command (and hit claude session-recovery\nmode because the claude session file never exists).\n\nAdd internal/core/session/resume.go with provider-aware resu\n[…]\npilot sessions are tagged [copilot], filterable via --provider/MCP\nprovider, searchable via FTS, and resumable via `copilot --resume=<id>`.\n\nClaude + Codex + Copilot now share one searchable database.",
          "is_bot": false,
          "headline": "Add GitHub Copilot CLI support + provider-aware resume (#14)",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T21:27:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d501c3653cb219c1690bac0be39a842a247d4827",
          "body": "Adds `ccrider view <session-id>` as a stdout-only alias for export,\nuseful for piping and agent use without flags.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add view command and bump to v1.1.9",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-22T23:27:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dbb2742da5155cc6349a710f363d24ba15e4246f",
          "body": null,
          "is_bot": false,
          "headline": "chore: fix linter version in release.yml to match pr-test.yml",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-07T21:40:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "294fa660d1eb07762af86f0d235df50568736971",
          "body": "- Modify the session parser to ignore unparseable or corrupted lines\n  instead of failing.\n- Update the linter configuration and refactor string formatting to\n  resolve static analysis warnings.\n- Increment the project version to 1.1.8 and document changes in the\n  changelog.",
          "is_bot": false,
          "headline": "Skip corrupted session lines and fix CI (#12)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-07T21:31:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa8dd1806b0e001f865a59bbe42b80a7612f4928",
          "body": null,
          "is_bot": false,
          "headline": "chore: fix golangci-yml schema and bump version to 1.1.7",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-06T04:57:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eab94eabc50c50ee4e5616fee8fa1cf9303708c",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 1.1.6",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-06T04:49:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab27adaea472784fb0814f199836bbde090767c4",
          "body": "- Run go mod tidy to fix untidy dependencies\n- Remove accidentally tracked ccrider-linux binary\n- Update .gitignore to exclude build artifacts\n- Fix release workflow to use official golangci-lint-action",
          "is_bot": false,
          "headline": "chore: tidy modules, remove binary, and fix release workflow",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-06T04:49:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1385dc8098da051489798974f724ff645431492d",
          "body": null,
          "is_bot": false,
          "headline": "fix: lint errors in export code",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:27:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e33665ca165eade9dd90d06eaf1da8d3eb2c4285",
          "body": null,
          "is_bot": false,
          "headline": "release: v1.1.5 changelog",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e7b5a8ce91ef94589ad6a17fc92d4f7a0bd2ab0",
          "body": "Redesign session export to be deliberate, repo-aware, and non-surprising.\n\nTUI: pressing 'e' now opens an export dialog with a prefilled path\ninstead of immediately writing to cwd. Default path for repo-backed\nsessions is <repo>/.ccrider/exports/session-<id>.md. 'E' opens the\ndialog with a blank pat\n[…]\nted to...\" display. Extracts shared\nmarkdown generation into internal/core/export/ (removes raw SQL from\ninterface layers). Remembers last export directory per-repo and globally\nin config.\n\nCloses #10",
          "is_bot": false,
          "headline": "feat: repo-aware export with confirmation dialog",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:19:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fab4a565684b705db753f52e39baab0abe299577",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump pinned Node.js from 23.7.0 to 25.8.2",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:19:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1723247d64fab7071f4229e8439be717ec0889e8",
          "body": null,
          "is_bot": false,
          "headline": "feat: add light theme",
          "author_name": "Marco Seguri",
          "author_login": "seguri",
          "committed_at": "2026-03-26T14:16:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "021a0226d0eb971d110a917da247ae4cea405241",
          "body": "Timezone was stripped during time.Time→string→time.Time roundtrip\n(Format without TZ, Parse assumes UTC), causing sessions to show\n\"7 hours ago\" instead of \"2 minutes ago\" for PDT users.\n\nAlso fix \"No sessions found\" flash on startup by distinguishing\ninitial async load from genuinely empty state.",
          "is_bot": false,
          "headline": "fix: session timestamps off by timezone offset and startup flash",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-16T16:12:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "384935d6755c559573a23f347c62247f0bdb4984",
          "body": null,
          "is_bot": false,
          "headline": "docs: note about Claude Code cleanupPeriodDays in configuration section",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-16T05:30:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92c221095c31e484001d8f7b4007819532544aed",
          "body": "Codex CLI emits AGENTS.md instructions, environment_context, and\nsystem-reminder content as role=user response_item messages. These\nwere being imported as user messages, polluting summaries and search.\n\nSkip these known boilerplate patterns during parsing. Validated\nagainst 603 real Codex sessions (1,300 boilerplate items filtered).\n\nAlso updates CHANGELOG for v1.1.3.",
          "is_bot": false,
          "headline": "fix: filter system boilerplate from Codex response_item messages",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-10T05:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d627001463877a3ad9d44ccee312ee9362d09a6c",
          "body": "- Add migration005 to invalidate existing Codex sessions so they\n  re-import with the new response_item parser on next sync\n- Replace manual string concat with strings.Join in extractTextFromContent\n- Rename misleading test to TestParseFile_DualBufferSelectsLargerSource\n- Add comment explaining why developer role is skipped",
          "is_bot": false,
          "headline": "fix: add migration for existing Codex sessions and cleanup parser",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-10T05:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5634c186fb4697e6ba4135fab63d90040260ae",
          "body": "fix: parse response_item events in Codex session parser",
          "is_bot": false,
          "headline": "Merge pull request #8 from APE-147/fix/codex-response-item-parsing",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-10T05:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ea89b3279dce8de33baf417611ca102081e85ab",
          "body": "Codex CLI emits conversation content via response_item events (type=message),\nbut the parser only handled event_msg events. This caused 16.4% message loss\n(335→390 messages across 48 sessions) and 11 zero-message sessions.\n\nStrategy: dual-buffer collects messages from both sources independently,\nthen selects whichever captured more messages. This handles sessions that\nuse only response_item, only event_msg, or both.\n\nFixes #7\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: parse response_item events in Codex session parser",
          "author_name": "APE-147",
          "author_login": "APE-147",
          "committed_at": "2026-03-07T08:31:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d53b5ef2fb7261ee1887d5aa45b399fb6ab99a05",
          "body": "LLMs sometimes send numbers as strings (e.g. around_sequence: \"3913\"\ninstead of 3913), causing json.Unmarshal to reject the input. Pre-process\nthe arguments map to coerce parseable strings to numbers before\nunmarshaling into typed structs.",
          "is_bot": false,
          "headline": "fix: handle string-encoded numbers in MCP tool arguments",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-01T05:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "decb7f3161b2f6c2eae578fd4e2ffac347517a50",
          "body": "feat: add Codex CLI session support",
          "is_bot": false,
          "headline": "Merge pull request #6 from neilberkman/feature/codex-support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T19:49:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "584bcf7e7674412585de62b381f05080424ab916",
          "body": "Index OpenAI Codex CLI sessions (~/.codex/sessions/) alongside Claude\nCode into a single searchable database. New parser (pkg/codexsessions)\nmaps Codex rollout JSONL to the same schema, generating deterministic\nUUIDs via BLAKE3 for idempotent re-import.\n\nProvider filtering on CLI (--provider codex/c\n[…]\ns). Non-Claude\nsessions tagged with [codex] in TUI and CLI list output.\n\nAlso fixes: panic on short session IDs, UTF-8 corruption in summary\ntruncation, silent zero timestamps from unparseable fields.",
          "is_bot": false,
          "headline": "feat: add Codex CLI session support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T19:34:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "775d4c0ebe6b674dd139451e2a61dbf1108d547c",
          "body": "syscall.Stat_t doesn't exist on Windows. Runtime check wasn't enough\nsince the compiler still sees the type. Split into _unix.go and\n_windows.go with proper build constraints.",
          "is_bot": false,
          "headline": "Fix Windows build: split getFileIdentity into build-constrained files",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T16:30:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d5c8ef082a9c98a2bf503635070492252ae80ba",
          "body": "Switch from SHA256 to BLAKE3 for file change detection. Key sessions\nby JSONL filename instead of parsed sessionId to fix hash thrashing\non resumed session chains. Relink orphaned messages via ON CONFLICT\nDO UPDATE. Deterministic token-based MCP response trimming on all\nhandlers. Crash-safe idempotent migrations. Importer warnings to\nstderr to prevent MCP JSON-RPC protocol corruption.\n\nInspired by @rcny's PR #5.",
          "is_bot": false,
          "headline": "BLAKE3 sync, message relinking, MCP response trimming",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T16:12:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "795f4fc42a9d1d36fe4221218f434526ceb2d563",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/fast-import: 3.9x faster imports with multi-level caching",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T06:18:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d38e4d4bc261ad1886b46e9d6c255b34d736761",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG for v0.10.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T05:48:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "808823b030b403811473f8c9d73053674f60d88c",
          "body": "Subagent session files use the parent session ID, so importing them\nwould overwrite/conflict with the actual parent session. They're not\nuseful to track separately, so hardcode skipping them instead of\nhaving a confusing flag.",
          "is_bot": false,
          "headline": "Always skip subagent sessions (they conflict with parent sessions)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T05:27:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7aba1d4f410a61ca548903bc09397887fc280df0",
          "body": "Performance improvements:\n- 3.9x faster imports (19s → 2s for ~3150 sessions, 74% faster)\n- Multi-level change detection: mtime+size → hash → parse\n- Pre-load all session metadata in single query (avoids N queries)\n- Skip 805/888 files instantly via mtime+size check\n- Only hash/parse changed files (\n[…]\nime, file_size, file_inode, file_device columns\n- Added file_hash column for content-based change detection\n- Migration preserves existing data\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Optimize import with multi-level caching and handle huge JSONL lines",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T01:51:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ed18e61a4b4cac1dd43260c3632fa51bed0f33ee",
          "body": null,
          "is_bot": false,
          "headline": "Fix symlinks (#4)",
          "author_name": "Vladimir Istyufeev",
          "author_login": "rcny",
          "committed_at": "2026-01-16T07:50:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a61cb657646da3c37a3d7b971e4ba7a7b3cecab",
          "body": "The spinner's Stop() could panic with \"send on closed channel\" when\ncalled twice - which happens on error paths where Stop() is called\nexplicitly and then again via defer.\n\nFix: Use sync.Once to make Stop() idempotent and change to chan struct{}\nfor signal-only semantics.\n\nFixes #2",
          "is_bot": false,
          "headline": "Fix spinner panic on double Stop() call (#3)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-12T15:16:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f3fb8d6f5f4e2a85e0e915db13f9f9e02c81e3",
          "body": null,
          "is_bot": false,
          "headline": "Fix errcheck lint errors in recovery mode prompts",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-12T07:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edec4aaf049acf481c979f4e530c4cad44765558",
          "body": "When a session file has been deleted by Claude Code but CCRider still\nhas it indexed, CCRider can now start a new session with context from\nthe old conversation. Includes first/last 5 messages and instructions\nfor using CCRider MCP to search for more.\n\n- Prompts user to confirm before starting recovery\n- Warns if CCRider MCP server not configured\n- Falls back to asking for directory if original paths don't exist",
          "is_bot": false,
          "headline": "Add session recovery mode for deleted session files",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-12T05:55:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e5b33d6a2d85464e731628d6cda020b0a31ecca",
          "body": "- Move filter parsing to internal/core/search/filters.go\n- CLI now supports same filters as TUI: after:, before:, date:, project:\n- Fix timestamp format mismatch in date comparisons\n- Supported formats: Go duration (3h), natural language (yesterday),\n  relative (3-days-ago), ISO 8601 (2024-01-15)\n- Delete duplicate TUI search_filters.go",
          "is_bot": false,
          "headline": "Centralize date filter parsing, fix timestamp comparison",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T21:38:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6412431121ed2f63f58b04bc5e3bf63f3725c43",
          "body": "- project_path now always updates on re-import (was missing from ON CONFLICT)\n- Add --force flag to sync command to re-import all sessions\n- Fixes sessions with stale worktree paths that couldn't be resumed",
          "is_bot": false,
          "headline": "Fix project_path stuck on wrong value, add sync --force",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T21:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa653ffa0f56b04fc59c56fbed52d6a6bca6e677",
          "body": null,
          "is_bot": false,
          "headline": "Make Show HN badge black for better Y logo contrast",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0cad468f5fb21a8bdddce9a88d2571201479870",
          "body": null,
          "is_bot": false,
          "headline": "Add MCP server mention to tagline",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:23:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4d6435012e422def2af2b8337f00ea70534044b",
          "body": "- Support Go duration format (3h, 30m, 2h30m) in TUI date filters\n- Increase anchor phrase retry from 3 to 5 attempts with 1s delay\n- Update TUI help text to show duration syntax",
          "is_bot": false,
          "headline": "Add Go duration syntax for date filters, increase anchor retry",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab5935a8bc7828a90663d6ce166c073c3239d8f9",
          "body": "- Remove get_session_detail (was removed in 81d3f4b)\n- Add generate_session_anchor tool\n- Add subtle lyric reference linking to song origin",
          "is_bot": false,
          "headline": "Update README: fix MCP tools list, add CC Rider lyric reference",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:00:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2be42c0c2c67b51fc94e48a0ac9d8b0ebaff49cd",
          "body": null,
          "is_bot": false,
          "headline": "Link Show HN badge to actual post",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-06T20:58:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb14243ca637691c5bc06282cb0e2591bfcfd872",
          "body": null,
          "is_bot": false,
          "headline": "Add project badges to README",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-06T20:50:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "215cffebc7220942a7112fccd83902fbd0ab4e7f",
          "body": null,
          "is_bot": false,
          "headline": "Fix Homebrew tap path to match published install instructions",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-06T20:42:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81d3f4b452329f84fb72fc29ab860ded2395b4cf",
          "body": "- generate_session_anchor: Creates unique diceware phrase for Claude to say,\n  enabling search for earlier context that disappeared from context window\n- Anchor phrase search now retries 3x with 500ms delays for write buffering\n- Removed get_session_detail (redundant with search + get_messages)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)",
          "is_bot": false,
          "headline": "Add generate_session_anchor tool, remove get_session_detail",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-05T07:10:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "706fc1ccb20b5cf732186f2e1356a319bb351793",
          "body": "Allows Claude to find earlier context in current session:\n- anchor_phrase: unique phrase to identify session (auto-quoted, defaults to last hour)\n- exact_match: auto-quotes query for phrase matching",
          "is_bot": false,
          "headline": "Add anchor_phrase and exact_match to MCP search",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-05T06:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce1e3980f37a2ffb3c7688b4dbca6ea2a37f0e50",
          "body": "Fast typing could show stale results if an earlier search completed\nafter a later one. Now uses sequence numbers to discard outdated results.",
          "is_bot": false,
          "headline": "Fix search race condition with sequence numbers",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-05T04:55:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "129617bcc94b6dffe001cacaf292729baa86c521",
          "body": "Queries with commas, hyphens, @, #, and other punctuation no longer\ncause FTS5 syntax errors. Implemented proper query escaping (same\napproach as sqlite-utils/datasette) - each token is quoted and internal\nquotes are escaped. Removed LIKE fallback. Wildcards still work.",
          "is_bot": false,
          "headline": "Fix FTS5 search: proper escaping for all special characters",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-02T05:12:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82fbac6b636c29659bc74faec704aab11ffd9a11",
          "body": null,
          "is_bot": false,
          "headline": "Add MCP server installation to quick start",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T05:00:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "874484378f768e7c756cc3649e8536cdebe077b5",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.9.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T04:51:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f858f02cee1ded9f9ae48173536ce9e884c3224",
          "body": null,
          "is_bot": false,
          "headline": "Fix phrase search: preserve quotes in TUI, auto-balance for live typing",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T04:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b0c850dd483b695b289d56b47a06954dfc54b5e",
          "body": null,
          "is_bot": false,
          "headline": "Mention TUI, CLI and MCP in intro",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T02:08:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "993834a1c574177d9bb041a5803810095f90e323",
          "body": null,
          "is_bot": false,
          "headline": "Mention MCP server in intro",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T02:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44feacae3b6800624cc7b53bbcac22eea02c0a24",
          "body": null,
          "is_bot": false,
          "headline": "Remove incorrect macOS-only claim",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T02:05:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd04c02df71f448b417db86cebc7c4bb47ca6ae7",
          "body": null,
          "is_bot": false,
          "headline": "Move Elvis video back to hero position",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:50:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a235727bb2b5ae0bbb6f9589f9219cbbe7156dd2",
          "body": null,
          "is_bot": false,
          "headline": "Restore embedded video (was replaced with dead YouTube link)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:47:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdb0bc450b9272db9a7a1bbd8ae58c55ae6634e2",
          "body": null,
          "is_bot": false,
          "headline": "Add session exports to gitignore",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:41:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c64c3cf60e274b7828583bc6645556e7a34ffae",
          "body": "- Add Anthropic API as alternative to AWS Bedrock for summarization\n- Add filter-only search (date/project filters without text query)\n- Add SQLite busy timeout to prevent lock errors\n- Fix date filter parsing (2024-11-01, 3-days-ago)\n- Fix TUI search view overflow and text truncation\n- Improve summarization prompts for problem-solution focus\n- CLI search output now matches TUI format",
          "is_bot": false,
          "headline": "Release v0.9.0: Anthropic API support, search improvements, bug fixes",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:39:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7bf0e4b499addd5e4e1a411c041154beafb7150",
          "body": null,
          "is_bot": false,
          "headline": "Skip sessions with <5 messages for summarization",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T21:30:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ed2c7ed7ee0d798218ba60938c9ee61ec8225d2",
          "body": "- Ask LLM to identify the main problem, root cause, and solution\n- Add explicit \"ask yourself\" questions to guide summarization\n- Better BAD/GOOD examples showing problem→solution format\n- Remove project name prefix from summaries (redundant)\n- Increase one-line char limit to 50-90 for more detail\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve summarization prompts for problem→solution focus",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T21:08:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37cd1d26150b177a5809371bf8b0ca211c8008df",
          "body": "- New anthropic.go provider using direct Anthropic API\n- Auto-detects provider from credentials (ANTHROPIC_API_KEY or AWS)\n- Shows warning when auto-detected, with instructions to override\n- Add --provider flag and llm_provider config option\n- Update default models to Claude Haiku 4.5\n  - Anthropic:\n[…]\nhaiku-4-5-20251001\n  - Bedrock: global.anthropic.claude-haiku-4-5-20251001-v1:0\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Anthropic API support for session summarization",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T20:38:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e262e0465e3b68e06052927c1bfdb255311c78e5",
          "body": "README:\n- Add Homebrew as recommended installation method\n- Fix GitHub URL\n- Add missing get_session_messages MCP tool\n- Update config section to show actual format (claude_flags, txt files)\n- Update project structure to match reality\n\nCLI:\n- Fix serve-mcp help to show correct Claude Desktop config path\n- Add Claude Code MCP setup command to help\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update README and CLI help for accuracy",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T20:08:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40427b57dcb6db785b325281f6ddbcf2b817f480",
          "body": "Silently skip files that fail to stat, parse, or import instead of\nprinting warnings to stderr. These warnings were being printed during\nthe import process and corrupting the bubbletea TUI rendering.\n\nAlso removed debug prints from terminal spawn code.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove stderr warnings that corrupt TUI display",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T19:58:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d4f7bec252bc4e9a76e437f2930f4b22ef3a9b64",
          "body": "Validates that 'claude' command is runnable from the target directory\nbefore attempting to resume. Catches common issues like version manager\n(asdf/mise/nvm) failures and provides helpful diagnostic messages with\nsuggested fixes instead of cryptic exit codes.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add pre-flight validation before resuming sessions",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T19:27:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07b52057551d72d9aea256c977d36d5ed1c8de07",
          "body": "Truncates messages evenly from beginning/end when over limit.\nReports truncation status in response.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)",
          "is_bot": false,
          "headline": "Limit MCP response size to ~50KB to prevent context overflow",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T05:29:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b01d70c261c24ba6db752e1ea1d44b17bf91729c",
          "body": null,
          "is_bot": false,
          "headline": "Remove unnecessary Go build dependency from Homebrew formula",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-27T22:02:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0361a98f767e4b4ac90edd9c661cef18d4f9db84",
          "body": "- Add get_session_messages tool with three modes:\n  - last_n: tail mode for \"where were we\" / refresh memory\n  - around_sequence: context around a search match\n  - neither: full transcript\n- Add Sequence field to SearchResult and return real sequence numbers\n- Add GetSessionMessages to core/db with filtering options\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add get_session_messages MCP tool and sequence numbers to search",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-27T21:45:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d580379c4d9dec562e1de1bbf7a2ac44a5c2b234",
          "body": null,
          "is_bot": false,
          "headline": "Fix version injection from GoReleaser ldflags",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T23:00:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "365c13c8e8941b8ae5252c7e108c8b6c38c7ac43",
          "body": null,
          "is_bot": false,
          "headline": "Fix all linter errors: errcheck, staticcheck, and unused code",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:53:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14e7c8051fe444dbc5389131fcdbacf7b5cb66f4",
          "body": null,
          "is_bot": false,
          "headline": "Fix agent session handling to use parent sessionId",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:29:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "689b07f14110609917df98faaab7eff07ea9b5e3",
          "body": null,
          "is_bot": false,
          "headline": "Add GitHub workflows, LICENSE, and GoReleaser config",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:24:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79f4b18dcb3216e0565d02d4b1d7388baf413b7d",
          "body": "- Implement progressive chunk-based summarization for long sessions\n- Two-tier summaries: one-line (60-80 chars) and full (2-3 paragraphs)\n- Extract issue IDs (ENA-1234, PROJ-123) and file paths from messages\n- Support AWS Bedrock with flexible credential options (profile, env vars, IAM)\n- Create ne\n[…]\nDB tables: session_summaries, summary_chunks, session_issues, session_files\n- Add --extract-only mode for metadata extraction without LLM calls\n- Increase max tokens to 1024 for better summary quality",
          "is_bot": false,
          "headline": "Add hierarchical LLM summarization with metadata extraction",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:06:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa4631c24ea72abb16f8d2278f6e934f5d4e4e05",
          "body": "- Add LastCwd field to Session struct\n- Update ListSessions query to fetch last cwd from messages\n- Falls back to session.cwd then project_path if no message cwd\n- Update TUI to display LastCwd instead of project_path\n- Match current directory highlighting uses LastCwd\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Show last working directory in TUI session list",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-26T22:47:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0364791811ba3b92d7bb273d3e4b9a38f74205c",
          "body": "- Replace both escaped (\\n) and actual newlines with spaces\n- Reduce snippet length to 100 chars (from 150) to ensure match visibility\n- Increase TUI display to 100 chars (from 80) to match core extraction\n- Ensures highlighted matches are always visible in viewport\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix search snippet newline handling and length",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-26T20:05:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4a4ff9fae77cec46b848f36d59b9cb21fe6aae10",
          "body": "- Add relevance scoring that blends match count, summary matches, and recency\n- Rank sessions by score instead of pure timestamp ordering\n- Extract JSON field values instead of showing raw JSON blobs\n- Center snippets on matches with better boundary detection\n- Remove useless [message] label in TUI \n[…]\n save horizontal space\n- Shorten TUI snippet display to 80 chars to keep matches visible\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve search relevance ranking and snippet quality",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-26T17:28:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89c41b001142c7f8f26a7d4baa9b7b2b388b7f9d",
          "body": "- Add LangChainGo dependency for LLM abstraction\n- Create llm package with Provider interface and Bedrock implementation\n- Add llm_summary and llm_summary_at columns to sessions table\n- Add `ccrider summarize` command with --limit, --force, --model flags\n- Supports Claude 3 Haiku (default) or other Bedrock models",
          "is_bot": false,
          "headline": "Add LLM-powered session summarization via AWS Bedrock",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-25T06:37:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4704908b4506e06915ac923dd6dfc4f97b15a781",
          "body": "- Remove \"substantive user message\" filtering that dropped entire sessions\n- Preserve agent session IDs from filename instead of parent session UUID\n- Agent sessions now import as separate entries (1252 agent sessions found)\n- Total sessions imported: 1968 (up from 358)",
          "is_bot": false,
          "headline": "Fix session import: remove aggressive filtering, preserve agent sessions",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-25T06:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 39,
      "commits_last_year": 199,
      "latest_release_at": "2026-07-16T07:53:08Z",
      "latest_release_tag": "v1.6.1",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 21,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 4.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/neilberkman/ccrider",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/neilberkman/ccrider",
          "is_deprecated": false,
          "latest_version": "v1.6.1",
          "repository_url": "https://github.com/neilberkman/ccrider",
          "versions_count": 43,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-16T07:49:51Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 4,
      "stars": 114,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-01",
            "count": 3
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 4,
        "total_forks": 4
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 26299,
      "source_files_sampled": 81,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".claude/CLAUDE.md",
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 6389
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/atotto/clipboard",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.4"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/config",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.29.4"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/credentials",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.17.57"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/service/bedrockruntime",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.24.3"
        },
        {
          "name": "github.com/cbroglie/mustache",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/charmbracelet/bubbles",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.21.0"
        },
        {
          "name": "github.com/charmbracelet/bubbletea",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.10"
        },
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/dustin/go-humanize",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.1"
        },
        {
          "name": "github.com/mark3labs/mcp-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.41.1"
        },
        {
          "name": "github.com/muesli/reflow",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.3.0"
        },
        {
          "name": "github.com/olebedev/when",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/sethvargo/go-diceware",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/tmc/langchaingo",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.14"
        },
        {
          "name": "github.com/zeebo/blake3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.4"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 12,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 7,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "neilberkman",
          "commits": 190,
          "avatar_url": "https://avatars.githubusercontent.com/u/37657?v=4"
        },
        {
          "type": "User",
          "login": "dmd",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/41439?v=4"
        },
        {
          "type": "User",
          "login": "APE-147",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/70080800?v=4"
        },
        {
          "type": "User",
          "login": "Evidlo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/5455841?v=4"
        },
        {
          "type": "User",
          "login": "seguri",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/2405157?v=4"
        },
        {
          "type": "User",
          "login": "rcny",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1887341?v=4"
        },
        {
          "type": "User",
          "login": "koto9x",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/64445724?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.955
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "pr-test.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "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 1/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "28 commit(s) and 3 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 6,
            "reason": "4 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "dae884161ef0f58237346cb93eb8c68e4229458d",
        "ran_at": "2026-07-24T12:31:34Z",
        "aggregate_score": 3.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-16T07:53:15Z",
      "oldest_open_prs": [
        {
          "number": 23,
          "created_at": "2026-07-22T15:49:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-02T13:31:46Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/neilberkman/ccrider",
    "host": "github.com",
    "name": "ccrider",
    "owner": "neilberkman"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 35,
        "vitality": 79,
        "community": 43,
        "governance": 60,
        "engineering": 68
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 79,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "commits_last_year": 199,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 21
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "21/52 weeks with commits",
                "points": 14.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "199 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 199
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "28 commit(s) and 3 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": 39,
              "latest_release_tag": "v1.6.1",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 4.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "39 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 39
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4.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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "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": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "forks": 4,
              "stars": 114,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "114 stars",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 114
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": 60,
        "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": 7,
              "top_contributor_share": 0.955
            },
            "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 96% of commits",
                "points": 1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 12,
              "open_issues": 0,
              "closed_issues": 7,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 3
            },
            "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": "12/15 decided PRs merged",
                "points": 30.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 12,
                      "decided": 15
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "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": 57,
            "inputs": {
              "followers": 30,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "neilberkman",
              "public_repos": 84,
              "account_age_days": 6443
            },
            "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": "30 followers of neilberkman",
                "points": 10.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 30,
                      "login": "neilberkman"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "84 public repos, account ~17 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 84
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 17
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/neilberkman/ccrider"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "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 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "43 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 43
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 68,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "28 commit(s) and 3 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "4 existing vulnerabilities detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 3
            },
            "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": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.77,
              "agent_instruction_files": [
                ".claude/CLAUDE.md",
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 6389
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".claude/CLAUDE.md, AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".claude/CLAUDE.md, AGENTS.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": "77 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 77,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 82,
            "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": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.23,
              "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "23 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 23,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 26299,
              "source_files_sampled": 81,
              "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/81 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 81,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T12:31:43.934337Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/neilberkman/ccrider.svg",
  "full_name": "neilberkman/ccrider",
  "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.