Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-27 12:19 UTC

brunoborges / ghx

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

GoMIT★ 94 зірки⑂ 7 форківз квіт. 2026 р.Переглянути на GitHub ↗

brunoborges/ghx має індекс здоров’я 65 зі 100, що відповідає смузі «Помірний». Найвищий показник — AI Readiness (83/100), найнижчий — Community & Adoption (44/100). Останнє оновлення було 9 днів тому. Більшість нещодавньої роботи виконує один учасник.

65
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

65
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Bruno BorgesОсобистий обліковий запис
1 082 підписники314 публічних репозиторіївз вер. 2009 р.@Microsoft

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Gogithub.com/brunoborges/ghxv1.5.4-159 днів тому

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

73Добрий · 22% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 9 дн. тому
4.2/36Ритм комітів — 6/52 тижнів із комітами
18/18Обсяг комітів — 107 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year107
human_commit_share0,87
days_since_last_push9
active_weeks_last_year6
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 13 релізів
36/36Свіжість релізів — останній реліз 9 дн. тому
27/27Ритм релізів — реліз кожні ~10,4 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count13
latest_release_tagv1.5.4
releases_from_tagsні
days_since_latest_release9
mean_days_between_releases10,4

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

44У зоні ризику · 18% загального індексу
Як обчислюється оцінка
31.9/60Зірки — 94 зірок
6.5/25Форки — 7 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks7
stars94
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

64Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
1.4/13.5Широта контриб’юторів — 1 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 8 contributing companies or organizations
Використані вхідні дані
bus_factor1
contributors_sampled1
top_contributor_share1
Як обчислюється оцінка
46.8/46.8Вирішення issue — закрито 100% issue
34.8/38.3Прийняття PR — злито 10/11 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/26 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs10
open_issues0
closed_issues8
issue_closed_ratio1
closed_unmerged_prs1
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
21.8/25Охоплення власника — 1 082 підписників у brunoborges
25/25Послужний список — 314 публічних репозиторіїв, вік облікового запису ~16 р.
Використані вхідні дані
followers1 082
owner_typeUser
is_verified
owner_loginbrunoborges
public_repos314
account_age_days6 152
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у go
35/35Свіжість публікацій — остання публікація 9 дн. тому
20/20Історія версій — 15 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/brunoborges/ghx
ecosystemsgo
any_deprecatedні
min_days_since_publish9

Інженерна якість

Чи наявні базові інженерні практики та документація?

77Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

90Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://brunoborges.github.io/ghx/
10/10Опис репозиторію
10/10Теми — 2 тем
0/10Wiki
Використані вхідні дані
topicscli, github
has_wikiні
homepagehttps://brunoborges.github.io/ghx/
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

62Помірний · 16% загального індексу

Стан безпеки

53Помірний
Як обчислюється оцінка
6.8/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/26 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 8 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
5/5SAST — SAST tool is run on all commits
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,3
Виключено з оцінювання (немає даних або не застосовно): packaging. Залишкові ваги перенормовано.
Як обчислюється оцінка
35/35Прямі залежності без відомих сповіщень — жодна пряма залежність не має відомих сповіщень
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
0/40Немає задавнених сповіщень — жодне сповіщення не має дати публікації
Використані вхідні дані
sourceosv
advisories1
affected_packages1
assessed_packages3
unassessed_packages0
affected_by_severityunknown 1
direct_affected_packages0
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень, Немає задавнених сповіщень. Залишкові ваги перенормовано. Звірено 3 резолвлених залежностей із OSV. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

83Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — .github/copilot-instructions.md
0/15Машиночитана документація (llms.txt)
39.2/40Читабельна історія комітів — намір зазначено у 64 з 87 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,736
agent_instruction_files.github/copilot-instructions.md
agent_instruction_max_bytes5 091
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Go (статично типізована)
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 78 з останніх 100 комітів створено агентом або з його зазначенням
5/8Автоматизоване супроводження — автоматизацію залежностей налаштовано, але у вибірці комітів її не видно
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum
has_dockerfileні
typed_languageтак
bootstrap_filesMakefile
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0,78
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
55/55Керовані розміри файлів — 0/38 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes12 994
source_files_sampled38
oversized_source_files0

Ключові факти

94зірок GitHub
1контриб'юторів
107комітів за останні 12 місяців
9днів від останнього пушу
13релізів
1бас-фактор
0відкритих issue
Goпакетних екосистем

Попередження щодо збору даних

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

Докладніше

Історія зірок і форків 0 ★ / 7 ⇿
0Зірки
7Форки
1Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

12345532026-042026-052026-05
Мажорні 0Мінорні 0Патчі 1
OpenSSF Scorecard 5.3 / 10
5.3сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-27 12:19 UTC

9Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/26 approved changesets -- score normalized to 0
10Contributorsproject has 8 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
10SASTSAST tool is run on all commits
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Прямі залежності 2
РеєстрПакетОбмеження версіїМаніфест
Gogithub.com/Microsoft/go-winiov0.6.2go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Усі залежності 3

Повний розв'язаний набір залежностей із графа залежностей GitHub: 2 прямих і 1 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

РеєстрПакетВерсіяЗв'язок
Gogithub.com/microsoft/go-winiov0.6.2пряма
Gogopkg.in/yaml.v3v3.0.1пряма
Gogolang.org/x/sysv0.10.0непряма
Сповіщення про залежності 1

Цей репозиторій не публікує пакета, який розпізнає індекс, тож оцінено його власний граф залежностей — 3 пакетів, серед яких є й піниї розробки та тестування, що ніколи не постачаються: 1 мають відомі сповіщення, з них 0 прямі.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
golang.org/x/sysv0.10.0непряманевідома10.44.0

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

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

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаGo.