Звіт у форматі 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"
}