Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 530394,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 7458704,
"CSS": 22073,
"HTML": 59031,
"Shell": 12101,
"Python": 7657,
"Makefile": 15246,
"Batchfile": 1255,
"JavaScript": 1555590,
"PowerShell": 31442,
"TypeScript": 170919
},
"pushed_at": "2026-07-23T14:32:04Z",
"created_at": "2025-12-06T14:34:46Z",
"owner_type": "Organization",
"updated_at": "2026-07-23T14:33:23Z",
"description": "MCP Server for Development Tooling - Project Detection, Process Management, and Reverse Proxy with Frontend Instrumentation",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Go",
"significant_languages": [
"Go",
"JavaScript"
]
},
"owner": {
"blog": "https://standardbeagle.com",
"name": "Standard Beagle",
"type": "Organization",
"login": "standardbeagle",
"company": null,
"location": null,
"followers": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/17860505?v=4",
"created_at": "2016-03-15T20:02:53Z",
"is_verified": null,
"public_repos": 51,
"account_age_days": 3783
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.13.32",
"kind": "patch",
"published_at": "2026-07-09T14:14:11Z"
},
{
"tag": "v0.13.31",
"kind": "patch",
"published_at": "2026-07-06T19:50:00Z"
},
{
"tag": "v0.13.30",
"kind": "patch",
"published_at": "2026-07-06T07:20:09Z"
},
{
"tag": "v0.13.29",
"kind": "patch",
"published_at": "2026-07-01T04:15:02Z"
},
{
"tag": "v0.13.28",
"kind": "patch",
"published_at": "2026-06-30T06:34:19Z"
},
{
"tag": "v0.13.27",
"kind": "patch",
"published_at": "2026-06-26T11:10:55Z"
},
{
"tag": "v0.13.26",
"kind": "patch",
"published_at": "2026-06-25T05:11:16Z"
},
{
"tag": "v0.13.25",
"kind": "patch",
"published_at": "2026-06-22T17:01:17Z"
},
{
"tag": "v0.13.24",
"kind": "patch",
"published_at": "2026-06-22T12:49:51Z"
},
{
"tag": "v0.13.23",
"kind": "patch",
"published_at": "2026-06-20T18:05:22Z"
},
{
"tag": "v0.13.22",
"kind": "patch",
"published_at": "2026-06-19T06:58:27Z"
},
{
"tag": "v0.13.21",
"kind": "patch",
"published_at": "2026-06-18T22:50:07Z"
},
{
"tag": "v0.13.20",
"kind": "patch",
"published_at": "2026-06-16T04:26:50Z"
},
{
"tag": "v0.13.19",
"kind": "patch",
"published_at": "2026-06-06T17:52:06Z"
},
{
"tag": "v0.13.18",
"kind": "patch",
"published_at": "2026-06-06T17:39:04Z"
},
{
"tag": "v0.13.17",
"kind": "patch",
"published_at": "2026-06-06T17:12:16Z"
},
{
"tag": "v0.13.15",
"kind": "patch",
"published_at": "2026-06-04T18:05:47Z"
},
{
"tag": "v0.13.14",
"kind": "patch",
"published_at": "2026-06-01T23:57:44Z"
},
{
"tag": "v0.13.13",
"kind": "patch",
"published_at": "2026-06-01T05:13:07Z"
},
{
"tag": "v0.13.12",
"kind": "patch",
"published_at": "2026-05-30T14:40:36Z"
},
{
"tag": "v0.13.11",
"kind": "patch",
"published_at": "2026-05-30T13:27:12Z"
},
{
"tag": "v0.13.10",
"kind": "patch",
"published_at": "2026-05-30T03:47:13Z"
},
{
"tag": "v0.13.9",
"kind": "patch",
"published_at": "2026-05-15T03:04:52Z"
},
{
"tag": "v0.13.8",
"kind": "patch",
"published_at": "2026-05-07T22:42:00Z"
},
{
"tag": "v0.13.4",
"kind": "patch",
"published_at": "2026-04-28T20:08:10Z"
},
{
"tag": "v0.13.3",
"kind": "patch",
"published_at": "2026-04-28T13:55:55Z"
},
{
"tag": "v0.13.2",
"kind": "patch",
"published_at": "2026-04-24T21:11:01Z"
},
{
"tag": "v0.13.1",
"kind": "patch",
"published_at": "2026-04-24T20:41:58Z"
},
{
"tag": "v0.13.0",
"kind": "minor",
"published_at": "2026-04-24T19:15:04Z"
},
{
"tag": "v0.12.51",
"kind": "patch",
"published_at": "2026-04-23T22:57:26Z"
},
{
"tag": "v0.12.50",
"kind": "patch",
"published_at": "2026-04-21T13:02:52Z"
},
{
"tag": "v0.12.48",
"kind": "patch",
"published_at": "2026-04-21T05:53:01Z"
},
{
"tag": "v0.12.47",
"kind": "patch",
"published_at": "2026-04-20T20:14:13Z"
},
{
"tag": "v0.12.46",
"kind": "patch",
"published_at": "2026-04-20T08:04:27Z"
},
{
"tag": "v0.12.45",
"kind": "patch",
"published_at": "2026-04-20T04:02:35Z"
},
{
"tag": "v0.12.44",
"kind": "patch",
"published_at": "2026-04-19T04:46:17Z"
},
{
"tag": "v0.12.43",
"kind": "patch",
"published_at": "2026-04-14T16:23:18Z"
},
{
"tag": "v0.12.42",
"kind": "patch",
"published_at": "2026-04-14T15:11:22Z"
},
{
"tag": "v0.12.41",
"kind": "patch",
"published_at": "2026-04-14T12:30:32Z"
},
{
"tag": "v0.12.40",
"kind": "patch",
"published_at": "2026-04-12T07:07:57Z"
},
{
"tag": "v0.12.35",
"kind": "patch",
"published_at": "2026-03-28T17:17:19Z"
},
{
"tag": "v0.12.34",
"kind": "patch",
"published_at": "2026-03-28T13:58:58Z"
},
{
"tag": "v0.12.33",
"kind": "patch",
"published_at": "2026-03-28T13:20:20Z"
},
{
"tag": "v0.12.32",
"kind": "patch",
"published_at": "2026-03-28T03:14:46Z"
},
{
"tag": "v0.12.31",
"kind": "patch",
"published_at": "2026-03-27T21:27:56Z"
},
{
"tag": "v0.12.30",
"kind": "patch",
"published_at": "2026-03-27T19:25:55Z"
},
{
"tag": "v0.12.29",
"kind": "patch",
"published_at": "2026-03-27T09:47:36Z"
},
{
"tag": "v0.12.28",
"kind": "patch",
"published_at": "2026-03-27T05:17:10Z"
},
{
"tag": "v0.12.27",
"kind": "patch",
"published_at": "2026-03-27T04:26:37Z"
},
{
"tag": "v0.12.26",
"kind": "patch",
"published_at": "2026-03-26T07:48:33Z"
},
{
"tag": "v0.12.25",
"kind": "patch",
"published_at": "2026-03-26T02:51:49Z"
},
{
"tag": "v0.12.24",
"kind": "patch",
"published_at": "2026-03-25T20:46:47Z"
},
{
"tag": "v0.12.23",
"kind": "patch",
"published_at": "2026-03-25T19:04:36Z"
},
{
"tag": "v0.12.22",
"kind": "patch",
"published_at": "2026-03-25T15:48:36Z"
},
{
"tag": "v0.12.21",
"kind": "patch",
"published_at": "2026-03-25T11:56:49Z"
},
{
"tag": "v0.12.20",
"kind": "patch",
"published_at": "2026-03-24T19:24:58Z"
},
{
"tag": "v0.12.19",
"kind": "patch",
"published_at": "2026-03-24T19:03:36Z"
},
{
"tag": "v0.12.18",
"kind": "patch",
"published_at": "2026-03-24T18:46:43Z"
},
{
"tag": "v0.12.16",
"kind": "patch",
"published_at": "2026-03-23T08:02:46Z"
},
{
"tag": "v0.12.15",
"kind": "patch",
"published_at": "2026-03-22T17:53:29Z"
},
{
"tag": "v0.12.14",
"kind": "patch",
"published_at": "2026-03-22T06:49:17Z"
},
{
"tag": "v0.12.13",
"kind": "patch",
"published_at": "2026-03-22T04:54:00Z"
},
{
"tag": "v0.12.12",
"kind": "patch",
"published_at": "2026-03-22T04:11:20Z"
},
{
"tag": "v0.12.11",
"kind": "patch",
"published_at": "2026-03-22T02:09:32Z"
},
{
"tag": "v0.12.10",
"kind": "patch",
"published_at": "2026-03-22T00:47:36Z"
},
{
"tag": "v0.12.9",
"kind": "patch",
"published_at": "2026-03-19T10:58:24Z"
},
{
"tag": "v0.12.8",
"kind": "patch",
"published_at": "2026-03-15T20:05:02Z"
},
{
"tag": "v0.12.7",
"kind": "patch",
"published_at": "2026-03-14T03:18:36Z"
},
{
"tag": "v0.12.6",
"kind": "patch",
"published_at": "2026-03-12T19:18:18Z"
},
{
"tag": "v0.12.5",
"kind": "patch",
"published_at": "2026-04-20T20:07:45Z"
},
{
"tag": "v0.12.4",
"kind": "patch",
"published_at": "2026-03-08T21:58:19Z"
},
{
"tag": "v0.12.3",
"kind": "patch",
"published_at": "2026-03-07T22:13:40Z"
},
{
"tag": "v0.12.2",
"kind": "patch",
"published_at": "2026-03-07T22:06:07Z"
},
{
"tag": "v0.12.1",
"kind": "patch",
"published_at": "2026-03-07T06:14:47Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2026-03-05T23:32:14Z"
},
{
"tag": "v0.11.7",
"kind": "patch",
"published_at": "2026-02-09T18:17:54Z"
},
{
"tag": "v0.11.6",
"kind": "patch",
"published_at": "2026-02-08T21:06:25Z"
},
{
"tag": "v0.11.5",
"kind": "patch",
"published_at": "2026-04-20T20:07:38Z"
},
{
"tag": "v0.11.4",
"kind": "patch",
"published_at": "2026-02-04T21:55:03Z"
},
{
"tag": "v0.11.3",
"kind": "patch",
"published_at": "2026-02-03T00:57:27Z"
},
{
"tag": "v0.11.2",
"kind": "patch",
"published_at": "2026-02-02T05:55:43Z"
},
{
"tag": "v0.11.1",
"kind": "patch",
"published_at": "2026-02-01T19:40:33Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2026-01-12T04:55:33Z"
},
{
"tag": "v0.7.12",
"kind": "patch",
"published_at": "2025-12-22T01:30:12Z"
},
{
"tag": "v0.7.10",
"kind": "patch",
"published_at": "2025-12-19T12:07:25Z"
},
{
"tag": "v0.7.9",
"kind": "patch",
"published_at": "2025-12-19T11:00:24Z"
},
{
"tag": "v0.7.8",
"kind": "patch",
"published_at": "2025-12-19T10:50:57Z"
},
{
"tag": "v0.7.7",
"kind": "patch",
"published_at": "2025-12-18T07:57:01Z"
},
{
"tag": "v0.7.6",
"kind": "patch",
"published_at": "2025-12-18T07:39:10Z"
},
{
"tag": "v0.7.5",
"kind": "patch",
"published_at": "2025-12-17T17:09:56Z"
},
{
"tag": "v0.7.4",
"kind": "patch",
"published_at": "2025-12-17T16:32:15Z"
},
{
"tag": "v0.7.3",
"kind": "patch",
"published_at": "2025-12-17T15:23:41Z"
},
{
"tag": "v0.7.2",
"kind": "patch",
"published_at": "2025-12-17T12:21:21Z"
},
{
"tag": "v0.7.1",
"kind": "patch",
"published_at": "2025-12-17T05:48:52Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2025-12-17T05:27:16Z"
},
{
"tag": "v0.6.6",
"kind": "patch",
"published_at": "2025-12-16T19:37:09Z"
},
{
"tag": "v0.6.5",
"kind": "patch",
"published_at": "2025-12-15T19:53:56Z"
},
{
"tag": "v0.6.4",
"kind": "patch",
"published_at": "2025-12-15T19:42:40Z"
},
{
"tag": "v0.6.3",
"kind": "patch",
"published_at": "2025-12-15T14:21:54Z"
},
{
"tag": "v0.6.2",
"kind": "patch",
"published_at": "2025-12-15T05:24:31Z"
}
],
"recent_commits": [
{
"oid": "b718bb39154975460a20713885a75d56ac46ae8d",
"body": null,
"is_bot": false,
"headline": "adding new affordance features to the walkthrough",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-23T14:16:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46c93645aa744ecfe1b4dc7a552d535d8fe9fde2",
"body": " - Chrome shell wrapping now requires Sec-Fetch-Dest: document.\n - fetch() HTML responses (Sec-Fetch-Dest: empty) remain unwrapped.\n - App-owned iframes and headerless clients remain unwrapped.\n - Added unit and end-to-end regression coverage.\n - Updated proxy documentation.",
"is_bot": false,
"headline": "• Implemented the proxy wrapper fix.",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-20T20:47:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "395a2e3535147c4495633f0f9cc8c9f433f6401e",
"body": "# Conflicts:\n#\tcmd/agnt/serve.go\n#\tinternal/daemon/client.go\n#\tinternal/tools/replaytest_tool.go",
"is_bot": false,
"headline": "merge: complete replaytest recording",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-20T18:45:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57d357420db90abdcae66f85e7f16a43bb381178",
"body": "# Conflicts:\n#\tinternal/daemon/daemon.go\n#\tinternal/daemon/daemon_session_cleanup.go\n#\tinternal/daemon/hub_ports.go\n#\tinternal/daemon/hub_ports_unix.go\n#\tinternal/daemon/hub_ports_windows.go\n#\tinternal/daemon/hub_session.go\n#\tinternal/daemon/scheduler_state_stress_test.go\n#\tinternal/incident/bus.go\n#\tinternal/tools/get_errors.go\n#\tvendor/github.com/standardbeagle/go-cli-server/process/lifecycle_unix.go",
"is_bot": false,
"headline": "merge: integrate session isolation hardening",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-20T18:31:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "204858e6405bbdc0c7a0ff51d1e37af097490b0b",
"body": null,
"is_bot": false,
"headline": "fix: harden agent and browser session coordination",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-20T14:36:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "562bd6de25f74aacf5a94fd8b44bd1811e494af1",
"body": "Replaces the three LOCAL vendored process-lifecycle patches (agnt commits\n77a98d24/613c74e9, b964cb21/e74fad05, 3804dda1) with released upstream code\nnow that they merged and shipped as go-cli-server v0.5.7:\n\n- PR #1 recycled-PID cleanup guard (carry scanner-captured identities through\n post-Wait c\n[…]\nndows cross-build, and full 'go test -p 1 ./...'\nserial suite all green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014Rk1F3dUJLaL6f9tqu5fRA",
"is_bot": false,
"headline": "chore(deps): bump go-cli-server to v0.5.7 (upstreamed kill-safety fixes)",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T16:47:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "922e32f05819236a9927c1a01e771f0a6e3df474",
"body": "TestResilientClient_VersionValidation intermittently failed under -race\n(~1 in 14 runs) with \"cleanup stale socket: ... no such file or\ndirectory\". Root cause lives in the vendored go-cli-server dependency:\nsocket.Manager.cleanupStale (socket_unix.go) stats the socket, dials it\nto confirm it's dead,\n[…]\nternal/daemon/ -count=30`: 30/30 green (previously flaky).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(deps): bump go-cli-server to v0.5.6 for stale-socket ENOENT race",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T05:25:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "587d62ce7c68f124090a81af24521fd6ded157bf",
"body": "- Extend the zero-leak transcript assertion to browser-bound WS frames\n (previously read-and-discarded), so the test's coverage matches its\n own doc comment.\n- Document that secret entries persist at-rest in plaintext (inherent\n to by-name env-injection), distinct from the LLM/channel zero-leak\n \n[…]\n\n env keys, safe because exec is last-wins on duplicates.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "docs+test(secret-entry): close reviewer hardening advisories",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T03:40:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3de5c4afb7042b94df27d4b25a5679ebaf26b99e",
"body": "…rkers\n\nThe sequential goleak stress tests (scheduler_state, hub_hook, event_hub,\nautostart_manager) guarded leaks with goleak.VerifyNone(t, IgnoreCurrent()).\nIgnoreCurrent() alone is insufficient in this package: it mixes these\nsequential tests with many t.Parallel() siblings. A parallel sibling ca\n[…]\nlake, which\nis not a goroutine leak and out of scope here.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "test(daemon): stop goleak stress tests flagging concurrent os/exec wo…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T03:29:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1aaa06a67cd22ac8e58fab97892c184c6c7d1401",
"body": "chordCarryScanner.Feed withheld the trailing len(chord)-1 bytes\nunconditionally on every partial (non-chord) match, even when those bytes\ncould not possibly extend into the detach chord. With the default 2-byte\nchord and raw-mode single-byte reads, this meant every keystroke was only\nforwarded once \n[…]\ns immediately,\nwhile chord detection itself is unaffected.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(attach): eliminate one-keystroke echo lag in chord carry scanner",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:38:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7516c9560ccd4e8d297f47c957f0ae0bf8dc8b96",
"body": "…cher goroutine\n\nCommit 4dd43722 moved the onLogEntry callback onto an async worker goroutine\n(logCallbackDispatcher) started lazily on SetOnLogEntry and reclaimed only by\na runtime.SetFinalizer backstop plus a Close() that no production/test path\ncalled. The daemon registers a callback on every pro\n[…]\ndd43722 are unchanged; the producer hot path is untouched.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(proxy): close TrafficLogger in ProxyServer.Stop to reclaim dispat…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:30:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "104815922fbdf031a738bd6c432c25144228c7ea",
"body": "… a dest\n\nsplitPushArgs treated the trailing argument as a remote destination directory\nwhenever it was not an existing local file — so a typo'd filename silently\nbecame a remote directory and the intended file was never pushed. Distinguish\nan existing directory (unambiguous dest) from a non-existen\n[…]\na\nnon-interactive session rather than misrouting the push.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(agnt): warn/confirm before treating an ambiguous last push arg as…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:24:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "caf098221956b9d5dfa061fb0683b5dff9f653fb",
"body": "sessionHostNameOrIDExists returned false when a name matched more than one\nremote session, so ensureRemoteSessionCreated created ANOTHER same-name\nsession — each retry leaking a daemon PTY child. Return a loud error on\nambiguity instead; ensureRemoteSessionCreated now surfaces it and never\nreaches SessionHostCreate.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(sshclient): fail loud on ambiguous remote session name",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:24:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d47ff820cc9e684b44183a43d2a6d85cbc642e53",
"body": "…oads\n\nuploadSettled reset changed=now on every upload failure, so a\npermanently-failing file re-attempted (and logged) every dropQuiescence\n(~500ms) forever. Track per-file failure count: apply exponential backoff on\neach failure and give up after maxUploadAttempts, marking the file so it is\nno lon\n[…]\n still resets the state if the file changes on\ndisk again.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(sshclient): back off and give up on persistently-failing drop upl…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:24:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2456c1a0c9f347862c8bb4685cd45613d77c9367",
"body": "download rejected \".\", separators, and empty names but not \"..\", relying on\nan incidental EISDIR further down. filepath.Base(\"..\") == \"..\", so a remote\npath that cleans to \"..\" was joined onto the local drop dir unguarded. Add an\nexplicit \"..\" reject — recurrence guard for lesson #12\n(.claude/rules/lessons-ssh-transport.md).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(sshclient): reject \"..\" explicitly in reverse-pull download",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:23:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "20482a39baf0fce3df00a09b0c8315af2dd04608",
"body": "…pping\n\nPushQueue.Push read state==CONNECTED with mu released, then execute acquired\nopMu. A Reconnecting() interleaving in that window nulled sftp+openSFTP, so\nexecute returned \"transport unavailable\" — dropping the push in exactly the\nreconnect window the queue exists to cover. Re-check state unde\n[…]\nenqueues the item for the next flush rather than erroring.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(sshclient): enqueue push on connect/reconnect race instead of dro…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:23:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2cd966cc277e7ae0412520382655f6eafa842338",
"body": "Client.Close did a bare close(c.stopKeepalive) with no idempotency guard.\nReconnect teardown closes the same Client from several places, so a second\nClose panicked on close-of-closed-channel. Wrap the channel close in a\nsync.Once so repeat Close calls are safe; SSH.Close stays idempotent.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(sshclient): guard Client.Close against double-close panic",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:23:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "763c272dfbbbc834fc3b989a90c1be59d5a80ddf",
"body": "The public artifact CSP was `script-src 'self' '<sha256>'`. With 'self'\npresent the hash-source is inert (a hash only gates scripts once\n'self'/'unsafe-inline' are absent), so the \"pin the exact bundle\" intent\nwas defeated — any same-origin script would have been authorised.\n\nThe public bundle is lo\n[…]\n-lessons.md §3.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV\nworktrack-task: 01KXM3MHTWKV9S0M99CPNKQ6NT",
"is_bot": false,
"headline": "fix(proxy): make public-plane bundle hash pin real via SRI",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:06:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4dd4372236eb28c0c9793ed4e0309bbc7546cc2f",
"body": "TrafficLogger.log() fired the onLogEntry callback synchronously in the\nproducing goroutine after unlock. The \"callback must not block\" contract\nwas documented but unenforced, so a slow/blocking StreamSink stalled the\nrequest/telemetry hot path.\n\nDelivery is now structurally decoupled: a logCallbackD\n[…]\ncer regression.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV\nworktrack-task: 01KXM3MHTWKV9S0M99CPNKQ6NT",
"is_bot": false,
"headline": "fix(proxy): decouple onLogEntry callback onto async worker",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:05:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2c8a55b539d50971f677a53f848a7a44bd947522",
"body": "Three independent injection-hardening fixes at the proxy's HTML/JS\ninjection boundary, each attacker-influenced input previously reaching\nthe parser unescaped:\n\n- contentSrc (from resp.Request.URL.RequestURI()) was echoed into the\n chrome-shell iframe src via %q. %q is Go-string quoting, not HTML\n \n[…]\n raw JS string.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV\nworktrack-task: 01KXM3MHTWKV9S0M99CPNKQ6NT",
"is_bot": false,
"headline": "fix(proxy): prevent HTML/JS break-out in shell + content injection",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T01:04:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bc2cffe16bb37bd75ba48d1648e6c468bc455f79",
"body": "A []int/[]string value in an IncidentEvent's Remediation.PrimaryArgs\nsurvived only as a shared map/slice reference across every struct-value\ncopy in the bus->dedup->inbox path (dedup.Ingest's e.Last = ev, and the\nper-session fan-out in deliver): mutating the source event's slice after\ndelivery silen\n[…]\n neither\ntouched a reference-typed field on IncidentEvent.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(incident): deep-copy Remediation args slices before dedup ingest",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:38:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "36656537d11262c210da77e16a2bb76aea9eed1f",
"body": "The escalated branch of handleDelta only called ForceFlush, which no-ops when\nno coalesced ping is pending. A severity escalation (e.g. warning→error)\narriving after the coalescer had already drained therefore consumed the flow\ntoken but emitted nothing — the escalation was silently delayed until th\n[…]\nare already unread-only, so the manual loop\nwas redundant.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(incident): emit escalation ping even when the coalescer is empty",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:29:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "24d458df68916afa0ca2d885e0a9323456266a5d",
"body": "buildIncidentQueryResult never set InboxStatsRecord.New, so every\nget_incidents response reported new=0. An agent gating further pulls on `new`\nwould conclude the inbox was empty and stop polling even when unread incidents\nremained. Populate New from the inbox Stats unread total; it now drops to 0\no\n[…]\ny once the inbox is actually drained via a mark_read pull.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(incident): populate inbox_stats.new on the get_incidents wire",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:27:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d3400b547f61ee8d1ea8111f6a041ca072115cc2",
"body": "…rsist\n\nStats band counts (critical/error/warning/info) and the new total counted\nlen(b.slots), so once an agent drained the inbox via a get_incidents pull the\nalready-read entries kept inflating the counts. Because the pinger derives its\nseverity level from these counts, every ping kept shouting er\n[…]\nore-on-restart feature should be a separately scoped task.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(incident): exclude read entries from inbox Stats; drop dead GC/pe…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:26:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d0cd55cde71e8271b1c81ccc9d5cd627af909f6b",
"body": "…reasons\n\nThe daemon lifecycle tenancy fix (a605f69d) reworded the two global-path\nscope.Unscoped() reason strings in hub_lifecycle.go to include \"global:\"\n(making project-scoped the default and global the explicit exception).\nTestUnscopedCallSites pins reason strings exactly, so the allowlist in\nin\n[…]\nernal/daemon + ./internal/tools but not\n./internal/scope).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "test(scope): update Unscoped allowlist for reworded STOP/RESTART-ALL …",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:11:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fde4710d35702dbc58c3b743e03475c63da37360",
"body": "Commit dd71e9fc scoped hubHandlePortsCleanOrphans through resolveProjectScope\nand pgidOwnershipCheck; docs still described a bare uid-matched reap.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "docs(daemon): reconcile PORTS CLEAN-ORPHANS docs with ownership-gate fix",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:07:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "dd71e9fc06ef90358b9ca9c3bfb9e30290bde2e4",
"body": "…rship gate\n\nhubHandlePortsCleanOrphans reaped every same-uid orphaned pgid with no\nownership check at all — a plain uid match, not the cmdline+cwd evidence\ngate the startup orphan scan already requires. Any unrelated same-uid\ndead-leader pgid (a second daemon's session, an unrelated `sh -c \"x &\"`\nl\n[…]\nll(2).\n\nFollow-up from review of 01KXM3MDM4CJMAKKMTW0R29ZM8.\n\nworktrack-task: 01KXMS48W6ZCMD2167H093MAHE\nworktrack-workflow: daemon\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): scope PORTS CLEAN-ORPHANS to the resolved project's owne…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-19T00:00:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "35fe14983562c4207e2015fd339c70bcc9030dee",
"body": "checkConfigHealth already returns StatusError with a \"config parse\nerror\" message and Fix guidance for a malformed existing .agnt.kdl\n(doctor.go:426-434) — distinct from the \"no .agnt.kdl found\" /\n\"no config to check\" paths reserved for a genuinely missing file.\nNo production code changed; adds regr\n[…]\nReport status.\n\nworktrack-task: 01KXP2B7RGGZ34A76F75G9QJ6J\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "test(doctor): pin malformed .agnt.kdl as non-OK config_health + report",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T23:37:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a605f69da80080353928fb73b1d4b95edd4abf79",
"body": "Project A's STOP-ALL/RESTART-ALL operated daemon-wide: it stopped project\nB's processes/proxies/tunnels/browsers and cleared the daemon-wide overlay\nendpoint (the documented cross-project leak). Route both handlers through the\nexisting session-scope chokepoint (resolveProjectScope): a non-global cal\n[…]\n-loud contract.\n\nworktrack-task: 01KXP2B7QKEJ02KA9N6KT7QAHV\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(daemon): scope STOP-ALL/RESTART-ALL to the caller project",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T23:30:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "146d3107ed209757ed620c12e33b10181b3d5cd6",
"body": "The MCP daemon connection is never session-bound, so handleDaemonStopAll/\nhandleDaemonRestartAll now resolve a DirectoryFilter (SessionCode preferred,\nDirectory fallback) and pass it via StopAllScoped/RestartAllScoped — the same\nclient pattern as handleDaemonStartupLog and the other gated tools. The\n[…]\nct's resources.\n\nworktrack-task: 01KXP2B7QKEJ02KA9N6KT7QAHV\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "feat(tools): scope daemon stop_all/restart_all to the caller project",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T23:29:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2713a03ba67e22439c1cfbcaead9dd61f1e18c73",
"body": "The STOP-ALL/RESTART-ALL lifecycle verbs are moving from daemon-wide to\nproject-scoped. The client is the transport half of that: StopAll()/\nRestartAll() now send an (empty) DirectoryFilter so the daemon resolves\nscope from the connection's bound session and fails loud on an unattached\nconnection. S\n[…]\nlay/resilient).\n\nworktrack-task: 01KXP2B7QKEJ02KA9N6KT7QAHV\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "feat(daemon-client): scoped StopAll/RestartAll carry a DirectoryFilter",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T23:27:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2bb7a7e5fee56a3795467da04a9257e9811bba95",
"body": "…rade\n\nrewriteURLsInBody previously did a blind bytes.ReplaceAll of the target\nhost across the entire response body, corrupting any JSON field, inline\n<script> string, or plain visible text that happened to contain the\ntarget host as data rather than a navigational link. It also always\ncollapsed htt\n[…]\ntimate href/src/action\nattributes still rewrite correctly.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "fix(proxy): scope body URL rewriting to HTML attrs, stop scheme downg…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T23:03:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6d61a8544ebf2515a3f3c314c7ed3e22047daa56",
"body": "The agent can now request a masked password field on the developer's\noverlay toast instead of asking for a key in chat. Validation (only\n'secret' mode; env-var-style name required) runs before the daemon\nconnection so a bad request fails immediately. The tool description\ntells the agent the contract\n[…]\n4}; the\nvalue is store-held and injected by NAME into managed processes.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "feat(tools): channel_reply secret input mode (input:'secret', name)",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T22:41:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9fe178c48a7bae1a3a74a0bb27431775b4e18fc5",
"body": "…t spawn\n\nwireProxyLogger (the single proxy-creation chokepoint) now wires each\nproxy's DeliverSecret seam to the project store with metadata\n{secret:true, fingerprint:last-4}. STORE GET / GET-ALL mask secret\nentries to '[secret:NAME ****last4]' at the hub — every hub client\n(incl. the store MCP too\n[…]\nnmarshals\nprotocol.ToastConfig and forwards the new secret-input fields.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "feat(daemon): secret sink wiring, masked store reads, env injection a…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T22:32:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "120914e9356d8fb87a097a79bf24fe6a11096d1b",
"body": "…ak invariant\n\nA channel_reply-requested secret prompt renders as a masked password\nfield on the browser toast (toast.js, input:'secret'). The submitted\nvalue travels over the metrics WS as 'secret_submit' and is branched\noff in ws_handler BEFORE any event is built: it goes only to the\ndaemon-wired \n[…]\n+ overlay bodies + browser\nframes) contains the secret value zero times.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "feat(proxy): secret-entry submit path with branch-before-emit zero-le…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T22:26:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d2ac5e93dbc9468122f20ad9a885d660ec6dc1de",
"body": "…e names\n\nSecrets handed to the agent's store must be write-only on every\nagent-visible read surface. These helpers centralize the invariant so\nthe daemon read path and the proxy submit path share one definition of\n'masked': name + last-4 fingerprint, never the value. Short (<8 char)\nvalues get no fingerprint at all — half of a short secret is worse\nthan nothing.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011waWKaZXWSeVrJUYC1kFmV",
"is_bot": false,
"headline": "feat(store): secret-entry helpers — fingerprint, masked read, env-saf…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T22:22:17Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "696c9bbb3d4d131c39733c5d52d7b96b7353a08d",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "docs: error retention config and get_errors actions",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T20:39:54Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0f54766ecfc7d53b211a3bd2122877dfbeb233dd",
"body": "get_errors grows an action param: pin/unpin (by the #id shown in a\nprior result, with an optional tag note) and clear (project-scoped,\nprocess_id to narrow). Query paths — both the incident-inbox shim and\nthe legacy collectors — overlay the pinned set: a pin ignores since/\nlimit/include_warnings fil\n[…]\no the converter's fallback so pin-by-id can\nnever dangle across the two.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "feat(tools): get_errors retention actions and pinned overlay",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T20:38:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5ab65a21d917bb67c7a3ddcd84d215e84a8805dc",
"body": "Wires the retention layer end to end so the agent's error view tracks\nthe running code, not history:\n\n- Trigger 1 (build success): both alert ingest paths (daemon scanner +\n PTY ALERTS REPORT) retire a process's errors when the\n rebuild-build-success pattern fires, bounded at the success line's\n \n[…]\nession-connect,\nlast writer wins, same as the rest of the alerts block).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "feat(daemon): error-retention triggers and pin/unpin/clear verbs",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T20:34:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "15c074528b9a1bfb2a9876775c2f22b830422bfd",
"body": "Three nil-safe gates (on-build-success, on-proc-stop, on-session-end),\nall defaulting to enabled so retention works out of the box and config\nonly exists to opt out. Config Authority: the parse test asserts a\nnon-default value changes getter results, not just that the block\nparses.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "feat(config): alerts.retention trigger gates",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T20:33:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4013b05903921467d2ae4985f1bee34d1b889b68",
"body": "Inbox entries had no retirement path besides read-and-stale GC and band\neviction, so a session accumulated errors from every rebuild it ever\nwatched. Adds ClearProcessBefore (timestamp-bounded, per process),\nClearAllBefore (whole inbox, backs the agent's explicit clear), and\nFindByFingerprint (pin l\n[…]\neenAt postdates the boundary is still happening and must not be\nretired.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "feat(incident): FIFO-ordered retention clears for session inboxes",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T20:31:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "85eb34eca334d4d6db324e5c516a2481300734d6",
"body": "Error retention needs to distinguish 'a build finished cleanly' from 'a\nbuild is starting' — clearing on a start signal would retire errors a\nbuild might be about to reproduce. The scanner is first-match-wins, so\nthe success pattern (rebuild-build-success) moves ahead of the generic\nrebuild pattern \n[…]\nrebuild' so the\nOutageClassifier's rebuild-signal stamping is unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "feat(classify): give build-success signals their own rebuild pattern",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T20:06:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "22df508d2cffd81d8e0d8f55aeec4cc30537fd7d",
"body": "…store\n\nThe agent-facing error view needs a retirement path: the 500-entry ring\nkept every alert for the daemon's lifetime, so get_errors served errors\nfrom code states long since rebuilt. This lays the storage groundwork:\n\n- Stamp each entry's unified-error id at Add time (same recipe the\n get_err\n[…]\ne ring;\n cap 50/project fails loud rather than silently evicting a pin.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CXkTQ51k7QJRCVYKaHgvp6",
"is_bot": false,
"headline": "feat(alert): unified-id stamping, bounded clears, and a pinned-error …",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T19:17:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "73f4a82bd2afc426dd55fac4ebeb1031fd5c396b",
"body": "convertToPageSummary took the first 5 unique errors in Go's random map\niteration order, so a frequent error could be shadowed by a rare one and\nthe same session could report different \"top\" errors run to run — the\nsame defect just fixed in the proxylog summary. Extract the ranking into\na shared topUniqueErrors helper used by both call sites so the two\nsummaries cannot drift again.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(currentpage): rank UniqueErrors by count instead of random map order",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T18:10:54Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c477d9d1dd8e4d191c323bcdde0e4fb1f6025270",
"body": "The catalog table lagged the implementation: proxy listed 5 of 10\nactions, proxylog omitted the recommended summary action, tunnel omitted\nthe tailscale provider entirely, and currentpage still described the\nlegacy tracking surface instead of the default triage + layout\ndiagnostics.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(mcp-tools): refresh stale catalog rows for proxy tools",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:36:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a423e45ed1e474e8f7daf928ce1d2a359becee71",
"body": "The proxylog fidelity work added a dropped-count return to\nProxyLogQueryFull; this caller was outside the proxylog package set the\nworktree agent gated, so the mismatch only surfaced at the whole-repo\nvet after merge.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(sshclient): adapt to ProxyLogQueryFull four-value signature",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:35:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ea70a7f2662846789e5432b7a1aeadbdae1c3f9e",
"body": "An earlier merge of origin/main kept both twins of the Windows no-op\nstub, breaking GOOS=windows go build ./... with a duplicate method\ndeclaration. Pre-existing on main (verified at 7fb0d9b6), surfaced by\nthis session's cross-compile gate.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): drop duplicate windows migrateLegacySocket stub",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:32:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "222a9e5ca0f672c08eba37faf53fedfd7f3ec962",
"body": null,
"is_bot": false,
"headline": "Merge branch 'worktree-agent-a076fa9e3dfcbe336'",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:24:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea8c58397b14742a2063642efc7b0372febfe8db",
"body": "When Create() failed, PROXY START returned only the terse proxym.Get \"proxy\nX was not created: not found\" — the actual reason lived in the\nproxy_creation_failed startup-log entry the caller never saw. Look that entry\nup by ProcessID and inline its message as the cause, and point at get_errors /\n`daemon startup_log` for the full record, so the MCP caller gets an actionable\nerror instead of a dead end.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): inline the root cause when PROXY START fails to create",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:21:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "23dce3e0c005d35e7b8e6eec3c271db2ee0e3663",
"body": "Schema/description corrections on the proxy tool:\n\n- The id field claimed it was required for exec, but exec search/describe/help\n need no proxy id. Restate accurately (required for the code-execution verbs;\n not for exec discovery) so agents stop supplying a bogus id.\n- ChaosRuleInput/ChaosConfig\n[…]\ne\nreturn law (TestOutputStructsSerializeZeroCount, 8 output structs) requires\ncount:0 to always serialize so a zero-length list is unambiguous.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(proxy-tool): correct id and chaos input schemas",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:18:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "67caaaa212f4ab85078a09ee9e00edea8b5f25ab",
"body": null,
"is_bot": false,
"headline": "Merge branch 'worktree-agent-aa72dee0595cf9ac1'",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:17:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5686454ac6b5247437ae1949952b8c2a262b2744",
"body": "Hardens the proxylog MCP surface so its results mean what the schema claims.\nThese changes share the same four files (hub_proxylog.go, proxy_log_tools.go,\nproxy/logger.go, daemon_proxy.go) and cannot be split into per-item commits\nwithout interactive hunk staging, which this environment disallows.\n\n\n[…]\nry stops shipping bodies it never reads: OmitBodies asks the daemon to\n strip HTTP bodies/headers before marshaling the (Limit:0) full result.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(proxylog): make query/summary fidelity honest and fail loud",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:17:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "db83a215b1e2db34dd12eb335dc76a6bb92929dc",
"body": "buildProxyLogSummary produced three misleading aggregates because it read\nfields that never exist on the wire:\n\n- UniqueErrors claimed to be the \"Top 10\" but ranged the dedup map and took\n the first 10 in Go's randomized map order, so a rare error could shadow a\n frequent one and the same input yi\n[…]\n\nconvertToCompactMutation had the same mutation_type-vs-type defect and is\nfixed alongside so detailed mutation entries also carry a real type.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(proxylog): correct three broken proxylog summary aggregations",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:16:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7ff6b05414d520cf17f9d2f7b6fcb5ba880c8197",
"body": "…ng them\n\nThe request-body recorder only captured bodies with a known length under\n10KB and left `reqBody` empty for everything else. That made a chunked or\noversized request indistinguishable from a request with no body at all, so\nan agent reading the traffic log could not tell \"there is no payload\n[…]\nn reading the\nstream — reading a chunked/oversized body would reintroduce the unbounded\nbuffering the response recorder already guards against.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(proxy): mark uncaptured request bodies instead of silently droppi…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:16:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d42443c2986eda32ba197296e8e2b08cb6348d45",
"body": "Two result-shape inconsistencies in the proxy tool:\n\n- resize returned tool-level IsError on a browser-side JS failure, while the\n identical exec path returns a structured result carrying success=false plus\n the error. Only a transport error should be IsError. Unify resize onto the\n exec shape so\n[…]\ngate also silently accepted target:\"outer\", which would\n navigate the chrome shell that hosts the page — never the intent; reject it\n loudly.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(proxy-tool): consistent navigate/resize result shapes",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:14:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "26381e89d97b5664dd9ab32a36f171ba253b09ea",
"body": "… frame id\n\nThe tool-layer and server-side exec-target resolvers each had their own copy\nof the target-token vocabulary, and both treated any unrecognized token as an\nexplicit frame id. A typo like target:\"page\" was forwarded verbatim, matched\nno frame, and surfaced as a misleading exec timeout (\"br\n[…]\nframe-id-shaped target still passes through.\nAll five call sites (exec, navigate, snapshot, api_audit, responsive_audit)\nsurface the rejection.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(proxy-tool): reject unknown exec targets instead of forwarding as…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:12:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4c2cb69f49453a686f00c05e98fa1726c60c334c",
"body": "Restart rebuilt a bare ProxyConfig and skipped wiring that the first-start\npath (handleExplicitStart) performs, so a restarted proxy silently diverged\nfrom the original:\n\n- PublicURL (URL rewriting) and SkipTLSVerify (backend TLS verification) were\n dropped. SkipTLSVerify was not even stored on Pro\n[…]\nng name->ID resolution.\n\nRegression tests cover all four: config preservation, dependency re-arm,\nactual-port persistence, and overlay re-bind.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): restore full proxy config + wiring on PROXY RESTART",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T17:05:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "45dd55e4dad4b5bacfefdb048cf1704e6de19f4a",
"body": "handleProxyStart read public_url from the daemon reply, but the daemon's\nPROXY START handler never emitted it, so proxyAccessURL always fell back to\nthe bare loopback address even when the proxy declared a public_url (or a\ntunnel had set one via SetPublicURL). Emit public_url from the hub start\nresp\n[…]\nne (prior commit),\nthe vestigial tunnel_url branch is dead too: drop it from proxyAccessURL so\npublic_url is the single \"front URL wins\" input.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(proxy-tool): surface public_url from PROXY START response",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T16:54:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4ae80fd879c3751b3db913017f0b6fffe26aae0b",
"body": "The proxy MCP tool accepted tunnel/tunnel_args/tunnel_token/tunnel_region/\ntunnel_command and shipped them through daemon.ProxyStartConfig, but the\ndaemon's PROXY START handler never unmarshalled them — no consumer existed\nanywhere in the daemon. Per the ssh-transport lesson (unwired flags are\nremov\n[…]\nTunnel. Public URLs\nare the tunnel tool's job; point the tool description there so callers\naren't left thinking the proxy tool creates tunnels.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(proxy-tool): drop parsed-but-unwired tunnel start fields",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T16:46:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7fb0d9b6ff3080c2222a54ad0e2376c2db980252",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013qEagCNgYZAudeTSognGYf",
"is_bot": false,
"headline": "chore: bump version to 0.13.35",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T15:39:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bab082490a286166048f7402a87306dc4fa0c563",
"body": "Render the PTY output-preview from an emulated vt10x screen so daemon-side\npreview frames wrap and repaint exactly as the child terminal does, sized to\nthe live PTY and kept current on SIGWINCH. Broadcasts now carry a throbber\nfield end-to-end (BroadcastOutputPreview signature + hub/client/proxy fan\n[…]\natus + basename, which is why grepping the literal line\nnever found it.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013qEagCNgYZAudeTSognGYf",
"is_bot": false,
"headline": "feat(overlay): virtual-screen output preview + quiet autostart progress",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-18T15:31:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3c285fe656a22d1fe801bc23b52d1503aa0e720d",
"body": "killSessionPGID reaps the session's entire process group -- including the\ncoding agent running in it. On success that was logged only via\ndebug.Log, which writes to the debug file and is off by default; only\nfailures reached the startup log. So when agnt killed a user's agent, it\nleft no trace a use\n[…]\nshows the reap next to the\nbanner's timestamp and the shutdown report's \"check for a session-cleanup\nrecord\" step leads somewhere.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): record session process-group kills where users can see them",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-17T07:47:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f04230fe366079377fe7071c0994af580d43a159",
"body": "A real kimi session was terminated by a signal and the banner said \"The\nerror below is from kimi itself\", followed by nine lines of TUI redraw\nframes -- box borders and a status row repeated verbatim. Both claims\nwere false: a signal comes from outside the agent, so there was no agent\nerror at all, \n[…]\n the tail as possibly-a-redraw rather than asserting it is an\nerror. When agnt cannot know, it should say so instead of narrating.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(run): stop blaming the agent for a death it did not cause",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-17T07:46:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4aedcedcf6ecde84fd03db3ef9026bb3e2b110be",
"body": "The adapter appended --agent-file to inject the system prompt, so\n`agnt run kimi` died at launch with \"error: unknown option\n'--agent-file'\". Two unrelated CLIs install as `kimi` -- MoonshotAI's\nkimi-cli and kimi-code -- and the adapter claimed both base names, so a\nname match cannot tell them apart\n[…]\nortMode, which had no production\ncaller: DefaultRegistry used the plain constructor, so --transport was\nunreachable outside tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(agentadapter): drop the kimi adapter, fall back to stdin",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-17T03:07:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "66e421e86cc77eca57e57bc594075b4104ad0f16",
"body": "`agnt run kimi` died instantly with a bare \"agent process exited with\nstatus 1\" banner pointing at `agnt hook log`, which recorded that same\ncontentless line. The agent had printed the cause -- \"error: unknown\noption '--agent-file'\" -- but nothing captured it: the tap only matched\na fixed list of ho\n[…]\nrom launch to exit; it replaces the loose command/args pair the\npipeline already threaded through, so the signature does not grow.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(run): explain an agent's abrupt exit in the agent's own words",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-17T03:06:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "acef9d7345c7bf3956356eb61444d7279097a332",
"body": "A PTY's line discipline maps \\n to \\r\\n on output (ONLCR), so every line\na PTY child prints reaches the activity monitor as CRLF. The splitter\ntreated any \\r as a spinner redraw and reset the line buffer, so the\nfollowing \\n committed an empty line and the content was discarded.\n\nNet effect: OnOutpu\n[…]\naw. The\npending-CR flag lives on the monitor because the PTY splits chunks\nwherever it likes, including between the CR and the LF.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(overlay): stop dropping every CRLF line from the output tap",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-17T03:03:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fb07984186629af4992f1b38eb02e2a3357086df",
"body": "… failure log\n\nTwo advisories from third-round adversarial review, both about the same\nnow-fixed reachable-collision reality:\n\n1. Comment calibration. hubHandleSessionHostCreate and\n hubHandleSessionHostKill (and the daemon-architecture rule) claimed a\n session-host id \"can never collide\" with a\n[…]\n Route it through the project-scoped startupLog when a project path is\n available, falling back to daemonStartupLog only when there is none.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): correct collision claims and scope session-host register…",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T20:35:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ed4b4e7967ee04cfcf193a07c45e079bdadc8df6",
"body": "A classic SESSION REGISTER whose code collides with an existing\nsession-host entry was taking the ErrSessionExists branch and being\ntreated as a reconnect, ReplaceExact'ing the session-host entry. That\nbreaks the session-host explicit-kill-only invariant: once replaced with\na classic identity, a lat\n[…]\n\nSESSION REGISTER is classic-only; a session-host entry never\nre-registers through this path, so the collision can only be a genuine\nname clash.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): reject classic re-register against session-host owned code",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T20:33:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1f0688c81fcff705e9b73d1c5e71445583fc09d6",
"body": "The correctness review flagged two over-claims about what the per-code\nlifecycle gate guarantees, in the SESSION-HOST CREATE and KILL comments and in\nthe mirrored daemon-architecture.md paragraph. The gate serializes lifecycle\nmutations on a code and the exact-identity form guards the Get-to-delete\n\n[…]\nename stale `doCleanup` references to `doCleanupExact` in six test\ncomments left behind by the method rename — comment-only, no behavior change.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(daemon): correct lifecycle gate comment precision",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T20:16:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8ab455f3f57e1a89810dec68f1484814f146bdd2",
"body": "SESSION-HOST CREATE registered the session into the shared SessionRegistry with\n`_ = d.sessionRegistry.Register(...)`, discarding the error. A failed Register\nleaves the PTY live (already tracked in d.sessionHosts) but invisible to every\nproject-scoping helper — SESSION LIST, FindByDirectory, hasOth\n[…]\ndebug.Warn. CREATE still succeeds — the PTY is already spawned and the failure\nis a visibility gap, not a reason to tear down a running session.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): surface session-host registry registration failure",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T20:12:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "989d7abae75d05da9731e4fa88849d1eef04fe81",
"body": "The production teardown path retires sessions exclusively through the\nexact-identity UnregisterExact CAS (finalizeSessionRetirement,\ndaemon_session_cleanup.go); the bare delete-by-code Unregister had no\nproduction caller left. Keeping it is a footgun: a future caller reaching for\nthe obvious-looking\n[…]\n the counter/concurrency tests\nGet-then-UnregisterExact. TotalUnregistered still increments via\nUnregisterExact, so its consumers are unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(daemon): remove dead SessionRegistry.Unregister",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T20:09:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "27c4cfd97c61ec07b375e6e5463b26f671b96498",
"body": "The reconnect merge in hubHandleSessionRegister has six inherit-or-override\narms but only StartedAt was under test, and the ReplaceExact/UnregisterExact\nrejection guards plus CleanupSessionResources' gate re-check arm had no\ncoverage at all. Those are the exact paths that keep a reconnecting session\n[…]\ntNoProjectCleanupSkipsFinalizeWhenReregistered: drive the not-registered\n gate re-check so a registration that wins the gate survives finalize.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(daemon): cover reconnect field inheritance and registry guard arms",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T20:06:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f424e7b9556299207c5913346e5bbb460287c27f",
"body": "Document exact-identity retirement and the per-code lifecycle gate in the\nSession Containment section: reconnect installs a fresh *Session pointer under\nthe gate, a stale cleanup pointer-compares and no-ops, and the gate serializes\nevery register/retire on a code (classic and session-host alike). Re\n[…]\nn (worst ~12s) rather than racing\na fresh autostart against the old teardown. Add the gate and exact-CAS\nprimitives to the File Ownership table.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(rules): record session lifecycle gate + reconnect-block trade-off",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T19:43:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3cf905018b0de51d5891483dc373a01d5eb98039",
"body": "SESSION UNREGISTER returned ErrNotFound when the session was already gone. In\nthe normal shutdown race the deferred cleanup wins the connection drop and\nretires the session before the client sends its explicit UNREGISTER, so a clean\nclient exit surfaced a spurious error. Unregistering an absent sess\n[…]\nt that swaps a\nfresh identity under the lifecycle gate makes doCleanupExact pointer-compare and\nno-op while the handler has already returned OK.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): make SESSION UNREGISTER idempotent for unknown sessions",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T19:41:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "44774c9aff882cf2b7f2d6bd885ee96e80dee855",
"body": "…gate\n\nThe per-code session lifecycle gate was not airtight: SESSION-HOST CREATE's\nRegister and SESSION-HOST KILL's Unregister mutated the shared SessionRegistry\nwithout holding the gate. When a classic SESSION REGISTER / reconnect on a\ncolliding code interleaved with a session-host lifecycle event,\n[…]\ne gate is never\nheld across the SIGTERM->SIGKILL escalation. KILL now uses UnregisterExact,\nmatching the classic finalizeSessionRetirement path.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): route session-host registry mutations through lifecycle …",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T19:39:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8a9c0b1d181e4108a45da84aefce037df5bc7ed7",
"body": "…goleak checks\n\nTestSchedulerWriteBehind_* failed intermittently only under a loaded\nfull-suite `go test -p 1 ./...` run. goleak.IgnoreCurrent() snapshots the\ngoroutine set at each test's start; sibling daemon tests spawn real OS\nsubprocesses whose os/exec pipe-pump and watchCtx goroutines are creat\n[…]\nt test\nstart, not test end, preserving the check's teeth.\n\nRecords the flake in docs/testing-flake-registry.md as one logical unit with\nthe fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(daemon): ignore cross-test os/exec drain goroutines in scheduler …",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T19:11:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d40395be1e8ce2b0471e3eb3b00ec6caadea3d60",
"body": "A deferred/stale cleanup racing a reconnect could retire the fresh session\nlifetime out from under the reconnecting client — reaping its PTY pgid and\nstripping its incident-pipeline session, forward mappings, and forwarding\nstate, even though a live client had just re-registered under the same code.\n[…]\n flips overlay ownership within\na project on every reconnect. A reconnect is the same logical session, so it\ninherits StartedAt unconditionally.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(daemon): serialize session lifecycle with exact-identity retirement",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T18:49:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "21392d01c7d7ac9e414a951f2906321bba9a4d58",
"body": "Reconnect must retire the OLD session lifetime without ever clobbering a\nfresh registration that raced in under the same code. Add pointer-identity\nCAS primitives ReplaceExact (CompareAndSwap) and UnregisterExact\n(CompareAndDelete) so a stale cleanup captured for a prior *Session cannot\nretire the registry entry once a reconnect has swapped in a new identity.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(daemon): add exact-lifetime session registry operations",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T18:47:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7168b6cbc8b0b96d90efb12f59ebb03e5f7d23c5",
"body": null,
"is_bot": false,
"headline": "keep compound WSL commands on sh",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T18:04:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f15eba15a3ddd1b70cd709a78a2f94058a758bc5",
"body": null,
"is_bot": false,
"headline": "preserve shell assignment syntax",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T17:56:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "946fd04598fedadce814f8503c523c6a3bc0f822",
"body": null,
"is_bot": false,
"headline": "parse WSL command executable safely",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T17:47:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df0769d7a17624859b5c19c19e577aea4922c0df",
"body": null,
"is_bot": false,
"headline": "harden WSL process and shell routing",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T17:38:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1169fb7cbb9cb86f33596ec3a60cbe21e348f5ad",
"body": null,
"is_bot": false,
"headline": "add total-order incident cursors",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T17:28:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "148f2a2c16ccab98b3900562d5dded3d16365a98",
"body": null,
"is_bot": false,
"headline": "make incident pagination and marking atomic",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T17:14:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a373db4192c0e3fcf9205e9e0e92f0a4327507f",
"body": null,
"is_bot": false,
"headline": "own Unix control socket cleanup",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T17:03:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05fc4ea2299898584a7eb2700fb0592bcbf10b60",
"body": null,
"is_bot": false,
"headline": "atomically quarantine stale control sockets",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T16:48:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c5d6edf9c2a9983cc802cb77657118a7d96b7738",
"body": null,
"is_bot": false,
"headline": "protect live SSH control sockets",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T16:35:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a9f37c4004900c2684acadc82ab5bfd498eef40",
"body": null,
"is_bot": false,
"headline": "harden SSH control push framing",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T16:18:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44194fa42e9cd1df869a4eab5151bb61beb75412",
"body": null,
"is_bot": false,
"headline": "initialize SSH forwarding surfaces before start",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T15:57:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f78d529a2e8af41ce1529920da210584e6e1f51a",
"body": null,
"is_bot": false,
"headline": "snapshot inbox deltas under band lock",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T15:50:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a7c8cfb1c5c8aee05cd7170693c34d75e215b9e",
"body": null,
"is_bot": false,
"headline": "snapshot incident inbox broadcasts",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T15:34:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6bbbfb67ec7514773e050af4d449f9b9b9ad588",
"body": null,
"is_bot": false,
"headline": "stabilize incident blob drain gate",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T15:24:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0834a0c02806063e320578a81d88e81aa56e5a68",
"body": null,
"is_bot": false,
"headline": "publish incident blobs after commit",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T09:19:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63236b3b83cd368ed2d20076d0cc7f87fa640d91",
"body": null,
"is_bot": false,
"headline": "hydrate full incident payloads by session",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T09:10:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76587291ce3c1acdfdeee0f901b091b182728e49",
"body": null,
"is_bot": false,
"headline": "clarify incident inbox availability comments",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T09:01:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c17b170007f8707401a2845856bb156aa8d40318",
"body": null,
"is_bot": false,
"headline": "reconcile always-active incident documentation",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T08:58:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "35bf04cf90cb8365ef1ff140743c79cb61131d56",
"body": null,
"is_bot": false,
"headline": "isolate incident push policy by project",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T08:51:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f309f597fab60dc8a7b378836b8fa5abf8890ad",
"body": null,
"is_bot": false,
"headline": "document incident channel sink boundary",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T08:34:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12ce597df3aed2f7ae4cf51d16339b48ad8ddf65",
"body": null,
"is_bot": false,
"headline": "wire alert push presets to incident sinks",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T08:31:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9524ee46ed75f16adaa1c6e021af7ead9acecb2b",
"body": null,
"is_bot": false,
"headline": "copy typed incident remediation slices",
"author_name": "Claude Code",
"author_login": "claude",
"committed_at": "2026-07-16T08:22:44Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 1551,
"latest_release_at": "2026-07-09T14:14:11Z",
"latest_release_tag": "v0.13.32",
"releases_from_tags": false,
"days_since_last_push": 1,
"active_weeks_last_year": 32,
"days_since_latest_release": 15,
"mean_days_between_releases": 2.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/standardbeagle/agnt",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/standardbeagle/agnt",
"is_deprecated": false,
"latest_version": "v0.13.35",
"repository_url": "https://github.com/standardbeagle/agnt",
"versions_count": 120,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-18T15:39:33Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
},
{
"name": "@standardbeagle/devtool-mcp",
"exists": true,
"license": "MIT",
"keywords": [
"mcp",
"deprecated",
"devtool-mcp",
"agnt"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@standardbeagle/devtool-mcp",
"is_deprecated": false,
"latest_version": "0.6.0",
"repository_url": "https://github.com/standardbeagle/agnt",
"versions_count": 5,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 343,
"first_published_at": "2025-12-08T06:53:19.722000Z",
"latest_published_at": "2025-12-13T06:51:16.723000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 224
},
{
"name": "devtool-mcp",
"exists": true,
"license": "MIT",
"keywords": [
"accessibility",
"ai",
"debugging",
"deprecated",
"development",
"devtools",
"diagnostics",
"frontend",
"mcp",
"model-context-protocol",
"process-management",
"proxy",
"Development Status :: 7 - Inactive",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: Proxy Servers",
"Topic :: Software Development :: Debuggers",
"Topic :: Software Development :: Testing"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/devtool-mcp/",
"is_deprecated": false,
"latest_version": "0.6.0",
"repository_url": "https://github.com/standardbeagle/agnt",
"versions_count": 5,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 99,
"first_published_at": "2025-12-08T04:51:11.776610Z",
"latest_published_at": "2025-12-13T07:03:13.042920Z",
"latest_version_yanked": null,
"days_since_latest_publish": 224
}
]
},
"popularity": {
"forks": 0,
"stars": 5,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Makefile",
"vendor/github.com/alecthomas/chroma/v2/Makefile",
"vendor/github.com/charmbracelet/glamour/Taskfile.yml",
"vendor/github.com/charmbracelet/lipgloss/Taskfile.yaml",
"vendor/github.com/coder/acp-go-sdk/Makefile",
"vendor/github.com/coder/acp-go-sdk/mise.toml",
"vendor/github.com/felixge/httpsnoop/Makefile",
"vendor/github.com/gobwas/ws/Makefile",
"vendor/github.com/pkg/sftp/Makefile",
"vendor/github.com/spf13/cobra/Makefile",
"vendor/github.com/standardbeagle/claude-go/Makefile",
"vendor/github.com/yuin/goldmark/Makefile",
"vendor/go.opentelemetry.io/otel/Makefile",
"vendor/go.uber.org/goleak/Makefile",
"vendor/google.golang.org/grpc/Makefile"
],
"api_schema_files": [
"vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.proto",
"vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.proto"
],
"has_devcontainer": false,
"typecheck_configs": [
"docs-site/tsconfig.json",
"e2e/tsconfig.json"
],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 564211,
"source_files_sampled": 973,
"oversized_source_files": 10,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"vendor/github.com/coder/acp-go-sdk/AGENTS.md"
],
"agent_instruction_max_bytes": 18172
},
"dependencies": {
"manifests": [
"docs-site/package.json",
"e2e/package.json",
"go.mod",
"package.json",
"python/pyproject.toml"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 1,
"malicious_count": 0,
"assessed_package": "npm:@standardbeagle/devtool-mcp@0.6.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go",
"npm",
"pypi"
],
"dependencies": [
{
"name": "@docusaurus/core",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "3.9.2"
},
{
"name": "@docusaurus/preset-classic",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "3.9.2"
},
{
"name": "@mdx-js/react",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "^3.0.0"
},
{
"name": "clsx",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.0"
},
{
"name": "prism-react-renderer",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "^2.3.0"
},
{
"name": "react",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "^19.0.0"
},
{
"name": "react-dom",
"manifest": "docs-site/package.json",
"ecosystem": "npm",
"version_constraint": "^19.0.0"
},
{
"name": "github.com/Microsoft/go-winio",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.6.2"
},
{
"name": "github.com/andybalholm/brotli",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.2.0"
},
{
"name": "github.com/anthropics/anthropic-sdk-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.19.0"
},
{
"name": "github.com/aymanbagabas/go-pty",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.2.2"
},
{
"name": "github.com/charmbracelet/glamour",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.10.0"
},
{
"name": "github.com/chromedp/cdproto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20250724212937-08a3db8b4327"
},
{
"name": "github.com/chromedp/chromedp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.14.2"
},
{
"name": "github.com/coder/acp-go-sdk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.13.5"
},
{
"name": "github.com/creack/pty",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.24"
},
{
"name": "github.com/fsnotify/fsnotify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.0"
},
{
"name": "github.com/google/jsonschema-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.4.2"
},
{
"name": "github.com/google/uuid",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/gorilla/websocket",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.3"
},
{
"name": "github.com/hinshun/vt10x",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20220301184237-5011da428d02"
},
{
"name": "github.com/hyperboloide/lk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20251220053519-b291812e3216"
},
{
"name": "github.com/klauspost/compress",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.18.3"
},
{
"name": "github.com/pkg/sftp",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.13.10"
},
{
"name": "github.com/sblinch/kdl-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20250930225324-bf4099d4614a"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/standardbeagle/claude-go",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "github.com/standardbeagle/go-cli-server",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.5.7"
},
{
"name": "github.com/standardbeagle/go-sdk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.0-agnt.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/tmc/langchaingo",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.1.14"
},
{
"name": "go.uber.org/goleak",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "golang.org/x/crypto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.51.0"
},
{
"name": "golang.org/x/sync",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.20.0"
},
{
"name": "golang.org/x/sys",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.45.0"
},
{
"name": "golang.org/x/term",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.43.0"
},
{
"name": "lukechampine.com/blake3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.1"
},
{
"name": "agnt",
"manifest": "python/pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=0.13.35"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 1,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "claude",
"commits": 1429,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
},
{
"type": "User",
"login": "andylbrummer",
"commits": 122,
"avatar_url": "https://avatars.githubusercontent.com/u/5024379?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.921
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"cross-compile.yml",
"deploy-docs.yml",
"publish-pypi.yml",
"release.yml",
"ssh-reconnect.yml",
"test-install.yml",
"test-windows.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yaml",
".golangci.yml"
],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum",
"package-lock.json",
"pnpm-lock.yaml"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"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/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 10,
"reason": "project is 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": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "72 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "b718bb39154975460a20713885a75d56ac46ae8d",
"ran_at": "2026-07-25T13:38:21Z",
"aggregate_score": 3.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-23T14:36:30Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/standardbeagle/agnt",
"host": "github.com",
"name": "agnt",
"owner": "standardbeagle"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"security": 50,
"vitality": 88,
"community": 32,
"governance": 52,
"engineering": 83
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 88,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 86,
"inputs": {
"commits_last_year": 1551,
"human_commit_share": 1,
"days_since_last_push": 1,
"active_weeks_last_year": 32
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "32/52 weeks with commits",
"points": 22.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 32
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1551 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1551
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 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": 100,
"latest_release_tag": "v0.13.32",
"releases_from_tags": false,
"days_since_latest_release": 15,
"mean_days_between_releases": 2.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 15 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 15
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~2.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 1,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 1 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 1
}
}
],
"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": 32,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"forks": 0,
"stars": 5,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "5 stars",
"points": 9.8,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 5
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"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 (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"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
}
]
},
{
"key": "ecosystem_adoption",
"band": "at_risk",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 44,
"inputs": {
"packages": [
"github.com/standardbeagle/agnt",
"@standardbeagle/devtool-mcp",
"devtool-mcp"
],
"dependents": null,
"ecosystems": "go, npm, pypi",
"total_downloads": null,
"monthly_downloads": 442
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "442 downloads/month across go, npm, pypi",
"points": 35.3,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 442,
"ecosystems": "go, npm, pypi"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 52,
"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": 2,
"top_contributor_share": 0.921
},
"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 92% of commits",
"points": 1.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 92
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "at_risk",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 47,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 1,
"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": "0/1 decided PRs merged",
"points": 0,
"status": "missed",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 0,
"decided": 1
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 59,
"inputs": {
"followers": 3,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "standardbeagle",
"public_repos": 51,
"account_age_days": 3783
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "3 followers of standardbeagle",
"points": 4.3,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 3,
"login": "standardbeagle"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "51 public repos, account ~10 yr old",
"points": 24.5,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 51
}
},
{
"code": "account_age_years",
"params": {
"years": 10
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/standardbeagle/agnt",
"@standardbeagle/devtool-mcp",
"devtool-mcp"
],
"ecosystems": "go, npm, pypi",
"any_deprecated": false,
"min_days_since_publish": 6
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "3 package(s) on go, npm, pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 3,
"ecosystems": "go, npm, pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "120 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 120
}
}
],
"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": 83,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "7 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 7
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".golangci.yaml, .golangci.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yaml, .golangci.yml"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 50,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 38,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.8
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is fuzzed",
"points": 5,
"status": "met",
"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": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "72 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@standardbeagle/devtool-mcp@0.6.0 runtime dependency closure — what installing the published package pulls in — 1 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "npm:@standardbeagle/devtool-mcp@0.6.0",
"assessed": 1
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 1,
"unassessed_packages": 0,
"affected_by_severity": "none",
"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": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"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": 1,
"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": 1
},
"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": "excellent",
"name": "AI Readiness",
"value": 88,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.75,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md",
"vendor/github.com/coder/acp-go-sdk/AGENTS.md"
],
"agent_instruction_max_bytes": 18172
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md, vendor/github.com/coder/acp-go-sdk/AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md, vendor/github.com/coder/acp-go-sdk/AGENTS.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "75 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 75,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum",
"package-lock.json",
"pnpm-lock.yaml"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Makefile",
"vendor/github.com/alecthomas/chroma/v2/Makefile",
"vendor/github.com/charmbracelet/glamour/Taskfile.yml",
"vendor/github.com/charmbracelet/lipgloss/Taskfile.yaml",
"vendor/github.com/coder/acp-go-sdk/Makefile",
"vendor/github.com/coder/acp-go-sdk/mise.toml",
"vendor/github.com/felixge/httpsnoop/Makefile",
"vendor/github.com/gobwas/ws/Makefile",
"vendor/github.com/pkg/sftp/Makefile",
"vendor/github.com/spf13/cobra/Makefile",
"vendor/github.com/standardbeagle/claude-go/Makefile",
"vendor/github.com/yuin/goldmark/Makefile",
"vendor/go.opentelemetry.io/otel/Makefile",
"vendor/go.uber.org/goleak/Makefile",
"vendor/google.golang.org/grpc/Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"docs-site/tsconfig.json",
"e2e/tsconfig.json"
],
"agent_commit_share": 0.71,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, vendor/github.com/alecthomas/chroma/v2/Makefile, vendor/github.com/charmbracelet/glamour/Taskfile.yml, vendor/github.com/charmbracelet/lipgloss/Taskfile.yaml, vendor/github.com/coder/acp-go-sdk/Makefile, vendor/github.com/coder/acp-go-sdk/mise.toml, vendor/github.com/felixge/httpsnoop/Makefile, vendor/github.com/gobwas/ws/Makefile, vendor/github.com/pkg/sftp/Makefile, vendor/github.com/spf13/cobra/Makefile, vendor/github.com/standardbeagle/claude-go/Makefile, vendor/github.com/yuin/goldmark/Makefile, vendor/go.opentelemetry.io/otel/Makefile, vendor/go.uber.org/goleak/Makefile, vendor/google.golang.org/grpc/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, vendor/github.com/alecthomas/chroma/v2/Makefile, vendor/github.com/charmbracelet/glamour/Taskfile.yml, vendor/github.com/charmbracelet/lipgloss/Taskfile.yaml, vendor/github.com/coder/acp-go-sdk/Makefile, vendor/github.com/coder/acp-go-sdk/mise.toml, vendor/github.com/felixge/httpsnoop/Makefile, vendor/github.com/gobwas/ws/Makefile, vendor/github.com/pkg/sftp/Makefile, vendor/github.com/spf13/cobra/Makefile, vendor/github.com/standardbeagle/claude-go/Makefile, vendor/github.com/yuin/goldmark/Makefile, vendor/go.opentelemetry.io/otel/Makefile, vendor/go.uber.org/goleak/Makefile, vendor/google.golang.org/grpc/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".golangci.yaml, .golangci.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yaml, .golangci.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "docs-site/tsconfig.json, e2e/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "docs-site/tsconfig.json, e2e/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "71 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 71,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 564211,
"source_files_sampled": 973,
"oversized_source_files": 10
},
"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": "10/973 source files over 60KB",
"points": 54.4,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 973,
"oversized": 10
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "excellent",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": [
"vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.proto",
"vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.proto"
]
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": "vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.proto, vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.proto",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.proto, vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.proto"
}
}
],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-25T13:38:34.449767Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/standardbeagle/agnt.svg",
"full_name": "standardbeagle/agnt",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}