Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-24 12:31 UTC

neilberkman / ccrider

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

GoMIT★ 114 stars⑂ 4 forkssince Nov 2025View on GitHub ↗

neilberkman/ccrider holds a health index of 59 out of 100, placing it in the Moderate band. It scores highest on Vitality (79/100) and lowest on Security (35/100). It was last updated 8 days ago. A single contributor accounts for most of its recent work.

59
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

59
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

Neil BerkmanPersonal account
30 followers84 public repossince Dec 2008

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gogithub.com/neilberkman/ccriderv1.6.1-438 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

79Good · 22% of overall
How it's scored
28.8/36Push recency — last push 8 days ago
14.5/36Commit cadence — 21/52 weeks with commits
18/18Commit volume — 199 commits in the last year
10/10OpenSSF Scorecard: Maintained — 28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year199
human_commit_share1
days_since_last_push8
active_weeks_last_year21
How it's scored
27/27Ships releases — 39 releases published
36/36Release recency — latest release 8 days ago
27/27Release cadence — a release every ~4.4 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count39
latest_release_tagv1.6.1
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases4.4

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

43At risk · 18% of overall
How it's scored
33.3/60Stars — 114 stars
4/25Forks — 4 forks
0/15Watchers — 2 watchers
Inputs used
forks4
stars114
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

60Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
1/22.5Commit distribution — top contributor authored 96% of commits
9.5/13.5Contributor breadth — 7 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled7
top_contributor_share0.955
How it's scored
46.8/46.8Issue resolution — 100% of issues closed
30.6/38.3PR acceptance — 12/15 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 1/30 approved changesets -- score normalized to 0
Inputs used
merged_prs12
open_issues0
closed_issues7
issue_closed_ratio1
closed_unmerged_prs3
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
10.7/25Owner reach — 30 followers of neilberkman
25/25Track record — 84 public repos, account ~17 yr old
Inputs used
followers30
owner_typeUser
is_verified
owner_loginneilberkman
public_repos84
account_age_days6,443
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on go
35/35Publish recency — latest publish 8 days ago
20/20Version history — 43 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesgithub.com/neilberkman/ccrider
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Engineering Quality

Are baseline engineering and documentation practices in place?

68Moderate · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
16/16Linter config — .golangci.yml
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

35At risk · 16% of overall
How it's scored
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.5License — 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
Inputs used
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3.5

AI Readiness

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.

76Good · 0% of overall
How it's scored
45/45Agent instructions — .claude/CLAUDE.md, AGENTS.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 77 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.77
agent_instruction_files.claude/CLAUDE.md, AGENTS.md
agent_instruction_max_bytes6,389
How it's scored
18/18One-command bootstrap — Makefile
22/22Automated tests
11/11Lint / format config — .golangci.yml
11/11Static type checking — Go (statically typed)
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 23 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilesgo.sum
has_dockerfileno
typed_languageyes
bootstrap_filesMakefile
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0.23
toolchain_manifestsgo.mod
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — Go (statically typed)
55/55Manageable file sizes — 0/81 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes26,299
source_files_sampled81
oversized_source_files0
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalyes
api_schema_files

Key facts

114GitHub stars
7contributors
199commits, last 12 months
8days since last push
39releases
1bus factor
0open issues
Gopackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 4 ⇿
0Stars
4Forks
4Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

333444432026-072026-072026-07
Major 0Minor 2Patch 2
OpenSSF Scorecard 3.5 / 10
3.5aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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
Direct dependencies 18
RegistryPackageVersion constraintManifest
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
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsGo.