Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"ai-coding-assistant",
"benchmark",
"code-generation",
"coding-agent",
"coding-agents",
"local-llm",
"ollama",
"qwen",
"small-language-models",
"tool-use",
"aider-polygot",
"terminal-bench"
],
"is_fork": false,
"size_kb": 1626,
"has_wiki": false,
"homepage": "https://itayinbarr.github.io/little-coder/",
"languages": {
"CSS": 31927,
"HTML": 16305,
"Shell": 30784,
"Python": 77487,
"JavaScript": 74432,
"TypeScript": 459423
},
"pushed_at": "2026-07-18T10:31:31Z",
"created_at": "2026-04-11T10:37:11Z",
"owner_type": "User",
"updated_at": "2026-07-23T15:53:12Z",
"description": "A harness optimized to smaller LLMs",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"Python",
"JavaScript"
]
},
"owner": {
"blog": "itayinbar.com",
"name": "Itay Inbar",
"type": "User",
"login": "itayinbarr",
"company": "BRAIN.Q",
"location": null,
"followers": 52,
"avatar_url": "https://avatars.githubusercontent.com/u/12065558?v=4",
"created_at": "2015-04-22T09:43:08Z",
"is_verified": null,
"public_repos": 19,
"account_age_days": 4110
},
"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": "v1.11.0",
"kind": "minor",
"published_at": "2026-07-18T08:38:05Z"
},
{
"tag": "v1.10.0",
"kind": "minor",
"published_at": "2026-07-06T17:18:34Z"
},
{
"tag": "v1.9.13",
"kind": "patch",
"published_at": "2026-07-05T17:00:27Z"
},
{
"tag": "v1.9.12",
"kind": "patch",
"published_at": "2026-07-04T08:30:38Z"
},
{
"tag": "v1.9.11",
"kind": "patch",
"published_at": "2026-06-28T12:36:28Z"
},
{
"tag": "v1.9.10",
"kind": "patch",
"published_at": "2026-06-28T09:00:59Z"
},
{
"tag": "v1.9.9",
"kind": "patch",
"published_at": "2026-06-22T20:14:41Z"
},
{
"tag": "v1.9.8",
"kind": "patch",
"published_at": "2026-06-22T14:55:33Z"
},
{
"tag": "v1.9.7",
"kind": "patch",
"published_at": "2026-06-19T15:21:00Z"
},
{
"tag": "v1.9.6",
"kind": "patch",
"published_at": "2026-06-18T19:03:52Z"
},
{
"tag": "v1.9.5",
"kind": "patch",
"published_at": "2026-06-18T17:18:53Z"
},
{
"tag": "v1.9.4",
"kind": "patch",
"published_at": "2026-06-18T16:26:42Z"
},
{
"tag": "v1.9.3",
"kind": "patch",
"published_at": "2026-06-18T14:18:07Z"
},
{
"tag": "v1.9.2",
"kind": "patch",
"published_at": "2026-06-18T07:25:54Z"
},
{
"tag": "v1.9.1",
"kind": "patch",
"published_at": "2026-06-17T03:20:30Z"
},
{
"tag": "v1.9.0",
"kind": "minor",
"published_at": "2026-06-16T06:47:38Z"
},
{
"tag": "v1.8.4",
"kind": "patch",
"published_at": "2026-06-08T08:28:25Z"
},
{
"tag": "v1.8.3",
"kind": "patch",
"published_at": "2026-06-08T07:02:27Z"
},
{
"tag": "v1.8.2",
"kind": "patch",
"published_at": "2026-05-30T16:11:09Z"
},
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2026-05-23T15:13:12Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2026-05-23T14:52:47Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2026-05-23T14:39:13Z"
},
{
"tag": "v1.6.1",
"kind": "patch",
"published_at": "2026-05-23T12:39:16Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2026-05-23T11:09:53Z"
},
{
"tag": "v1.5.1",
"kind": "patch",
"published_at": "2026-05-22T19:57:41Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2026-05-22T18:45:26Z"
},
{
"tag": "v1.4.3",
"kind": "patch",
"published_at": "2026-05-19T08:32:22Z"
},
{
"tag": "v1.4.2",
"kind": "patch",
"published_at": "2026-05-19T08:06:27Z"
},
{
"tag": "v1.4.1",
"kind": "patch",
"published_at": "2026-05-16T19:47:07Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-05-16T19:29:52Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-05-16T17:54:48Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2026-05-16T16:49:56Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2026-05-13T09:47:07Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-05-03T10:36:36Z"
},
{
"tag": "v1.0.3",
"kind": "patch",
"published_at": "2026-04-28T15:10:15Z"
},
{
"tag": "v1.0.2",
"kind": "patch",
"published_at": "2026-04-28T15:04:11Z"
},
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2026-04-28T15:00:02Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-04-28T14:59:54Z"
}
],
"recent_commits": [
{
"oid": "e5525261c113e0cfc2c760053ccb357f156ee20b",
"body": "…ile (#63)\n\nPoints users to ~/.config/little-coder/models.json for community fine-tunes\n(e.g. REAM-192) rather than shipping volatile third-party repos in the default\nmodels.json. Follow-up to the #63 pilot.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EWRSyAxfQbQ7F9TQABPje2",
"is_bot": false,
"headline": "docs: document adding community-recommended models via the override f…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-07-18T10:31:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7f9c11c27a904950e8ce19148fb051eb3b3d2ff0",
"body": "…-after-update (#66)\n\nFixed:\n- #68 context-watchdog no longer wedges a session into an unrecoverable\n \"Nothing to compact\" loop after a mid-run compaction. It measures each\n compaction's effect and pauses (with a notice) when it frees too little,\n re-arming once usage recovers; a failed compactio\n[…]\nh the original args instead of exiting to a manual re-run.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01EWRSyAxfQbQ7F9TQABPje2",
"is_bot": false,
"headline": "v1.11.0: compaction-loop guard (#68) + default model (#65) + relaunch…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-07-18T07:51:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e2a6af30b3b25c59cfc0a75edb9b892c7d58d357",
"body": "New f2 / /deep-research mode: orchestrator-worker flow that scopes a topic\ninto a brief, fans out read-only research sub-coders (bash-free, ephemeral\nscratch cwd), runs a gap pass, and writes one inline-cited markdown report,\nshown as a rectangle progress bar.\n\nGrounding + safety: research children \n[…]\n0 → ~28, structure 82 → 94/100,\n25/25 reports, no crashes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019uVR4qqUaubQjEU9p24GKo",
"is_bot": false,
"headline": "v1.10.0: Deep Research — scope → research → cited report flow (f2)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-07-06T17:13:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "064dfe85013f90f7b4961f30949664a44f7aa885",
"body": "The context-watchdog fired compaction at 80% correctly, but pi's public\ncompact() is the manual path (abort + reconnect, no auto-retry), so an\nautonomous run was aborted to compact and then stranded idle at the prompt\n(charly1r's v1.9.12 follow-up). Pass an onComplete to compact() that, once\nthe age\n[…]\n guard\nre-arms on completion. + tests for resume + re-arm.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01FmSETqCghnJheH2GGVpy4D",
"is_bot": false,
"headline": "v1.9.13: resume the task after mid-run compaction (fix #59 follow-up)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-07-05T16:59:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4fedf265d7b92b796ce763f889bbf4732285cb1b",
"body": "…ommand + Zed ACP guide\n\nFixed (#59): context-watchdog extension triggers pi compaction at turn\nboundaries once usage crosses 80% of the window, so long autonomous runs\ncompact before overflowing instead of only at the (never-reached) idle\nboundary. Tunable via LITTLE_CODER_COMPACT_AT_PERCENT / disa\n[…]\n-acp bridge for\nrunning little-coder in Zed's agent panel.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01FmSETqCghnJheH2GGVpy4D",
"is_bot": false,
"headline": "v1.9.12: mid-run compaction watchdog + update-prompt timeout/notice/c…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-07-04T08:29:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f5cf27b4b68b57d6377dd43b31e3b2df589f85dc",
"body": "llama-cpp-provider probed /props only at startup, so after llama-swap swapped\nthe loaded model little-coder kept reporting the old n_ctx — which drives the\nread-guard and context-budget math, not just the readout. It now hooks pi's\nmodel_select event, re-probes /props on a swap to a llamacpp model, \n[…]\nODER_NO_CTX_PROBE. Per-phase model selection split to #61.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012cdPpk1jsZvc2BQf9P76iw",
"is_bot": false,
"headline": "v1.9.11: re-probe llama.cpp context window on model swap (#54)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-28T12:35:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f592c73b57292047a20bcfe35c38f5226b0598a3",
"body": "…auncher + ctrl-h shortcuts panel\n\nTriage of open issues #55–#60:\n\n- #57: sub-coder concurrency defaults to 1 (serial); `=0`/negatives now honored\n as serial instead of silently falling back to 2. Plan Mode shares the path, so\n it respects LITTLE_CODER_SUBCODER_CONCURRENCY too.\n- #60: write-guard \n[…]\nhe startup row; both custom shortcuts surface in /hotkeys.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012cdPpk1jsZvc2BQf9P76iw",
"is_bot": false,
"headline": "v1.9.10: serial sub-coder default + reserved-name write guard + bun l…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-28T08:59:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "38eacb525d0da5d8f7c22bf74d747a00b78b0ec2",
"body": "ctrl+y is the editor's built-in yank/paste (tui.editor.yank), so v1.9.8\nlogged an [Extension issues] conflict at startup and the toggle overrode\npaste. The emacs-style editor claims nearly every other ctrl+<letter>;\nctrl+q is genuinely unbound and, with the terminal in raw mode (flow\ncontrol off), a\n[…]\ncator, leave-mode hint, and the startup-row CTA to ctrl-q.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01JaHbrZ4u7hikcP6H9jWYZU",
"is_bot": false,
"headline": "v1.9.9: move plan-mode toggle ctrl+y -> ctrl+q to clear yank conflict",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-22T20:13:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3e096f3be78555c7dc551b4ea973537aee360e43",
"body": "alt+p was delivered as a literal \"π\" on many terminals (notably macOS),\nso the plan-mode toggle never fired. Rebind to ctrl+y — a clean control\nbyte, unbound by both pi and the editor, dispatched to extension\nshortcuts before editor handling. Update the indicator + leave-mode\nstrings to read ctrl-y,\n[…]\n CTA to the startup\nshortcut hint row for discoverability.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01JaHbrZ4u7hikcP6H9jWYZU",
"is_bot": false,
"headline": "v1.9.8: plan-mode toggle ctrl+y + hint CTA",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-22T14:54:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "37b10e9219a52a4cdd63d20df990fa50ec4c9f11",
"body": "…hain protection (#50)\n\nAdding --ignore-scripts to the launcher's auto-update path blocks the\npreinstall/install/postinstall lifecycle hooks that Shai Hulud-style\nworms (and any other npm postinstall malware) use as the entry vector\nfor arbitrary code execution. Issue #50 by @steverhoades cites pi's\n[…]\ne this\ncommit, authorship preserved) with troubleshooting entries for the\n--update flag and the Windows ≤ v1.9.5 bootstrap caveat.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.7: --ignore-scripts on auto-update for Shai Hulud-class supply-c…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-19T15:19:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "89f77958379236ba6ffd117fdd61ef99c08b4aa5",
"body": null,
"is_bot": false,
"headline": "docs: add --update flag and Windows bootstrap note to troubleshooting",
"author_name": "Ian Snyder",
"author_login": "i-snyder",
"committed_at": "2026-06-19T15:17:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5562a04539fe5c03276664fc24631ec8914bd87",
"body": "@i-snyder's PR #52 (cherry-picked just before this commit, authorship\npreserved across both commits) fixes a real cross-platform bug: on\nWindows, `npm` is `npm.cmd` (a batch shim) and\nspawnSync(\"npm\", ...) without shell: true returns ENOENT before npm\never launches — the user saw \"✗ Update failed (n\n[…]\ns argv. 323 tests pass (was 321 — 2 new shouldSkip cases).\n\nCo-Authored-By: Ian Snyder <34639515+i-snyder@users.noreply.github.com>\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.6: Windows npm auto-update fix + --update flag via PR #52",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-18T19:00:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e5b4e1e095495d9ebef28db7d8a30914dd2ca14",
"body": "Replace shell:true with explicit cmd.exe invocation via COMSPEC.\nBoth approaches fix the Windows ENOENT on npm.cmd, but shell:true\ntriggers a DEP0190 deprecation warning on Node 24+ for array args.\nInvoking the shell directly avoids that warning entirely.",
"is_bot": false,
"headline": "fix: use COMSPEC to avoid DEP0190 on Node 24",
"author_name": "Ian Snyder",
"author_login": "i-snyder",
"committed_at": "2026-06-18T18:59:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f80bfd3bb06cce0e93050187817fd2fe40d011a",
"body": "On Windows, `npm` resolves to `npm.cmd` (a batch shim). spawnSync\nwithout shell:true cannot find it, returning { status: null, error:\n{ code: \"ENOENT\" } } before npm ever runs — producing the confusing\n\"✗ Update failed (npm exit null)\" message.\n\nFix: add shell:true to the spawnSync call in checkForU\n[…]\nto date\" notice. The flag\nis stripped before forwarding argv to pi, preventing the \"Unknown\noption: --update\" error that occurred previously.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: Windows npm auto-update failure and add --update flag",
"author_name": "Ian Snyder",
"author_login": "i-snyder",
"committed_at": "2026-06-18T18:59:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0a57a0d33c40d741aae50d043c149a3a13495124",
"body": "… no ellipsis)\n\nv1.9.4 stopped the pi-tui overflow by truncating each makeComponent line\nto width-2 with an ellipsis. steverhoades's PR #49 (cherry-picked just\nbefore this commit, authorship preserved) replaces the truncation with\nword-wrap: a long markdown sentence becomes multiple visual lines tha\n[…]\n sentence with\n no data loss. Plus a long-URL chunking test for the sanitizer.\n\nCo-Authored-By: Steve Rhoades <sedonami@gmail.com>\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.5: word-wrap dispatch panel via PR #49 (preserves full sentence,…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-18T17:14:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "446df62e3cde888362a3e5382017d9bcd1a72761",
"body": null,
"is_bot": false,
"headline": "Fixes Issues #48 - TUI component not truncating output",
"author_name": "Steve",
"author_login": "steverhoades",
"committed_at": "2026-06-18T17:13:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2224abce659bcf734262de179c8c12347959b3fd",
"body": "…opens #48)\n\nv1.9.2 capped every line the live sub-coder tracker emits, but the\ndispatch tool's RESULT renderer (subagent/index.ts makeComponent)\nwas still ignoring the width pi passes to render(width) — it\nreturned precomputed lines verbatim. pi frames the tool-result panel\nwith a 1-char background\n[…]\n the user's exact\n134-char shape at width 133 and asserts no emitted line exceeds,\nplus a narrow-terminal (40-col) survival check.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.4: cap dispatch result-panel lines to pi-supplied width (#51, re…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-18T16:24:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8250f002d656a5ac3e0d349787f7b968520da154",
"body": "…nsions (#46)\n\nThe launcher passes --no-extensions to pi, so a globally-installed pi\npackage (pi-ponytail, etc) doesn't reach the running little-coder.\nUntil now the supported workaround was `little-coder -e <abs path>`\nper launch, or dropping a wrapper into <pkgRoot>/.pi/extensions/ —\nthe latter ge\n[…]\ngration verified end-to-end —\nwarning prints for a bad path; valid paths pass through silently as\n--extension <entry> flags to pi.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.3: LITTLE_CODER_EXTRA_EXTENSIONS env var for third-party pi exte…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-18T14:17:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "818f0e8d115e2856a7039759fc0f8e1a5d2bd3b1",
"body": "…ow crash (#48)\n\npi-tui throws \"Rendered line N exceeds terminal width\" when a custom TUI\nwidget emits a line wider than the active terminal. The sub-coder tracker\nwas feeding an unbounded errorMessage straight into a widget row, so a\nfailed dispatch with a ~167-char error (transport error + URL + r\n[…]\n8-repro.test.ts (live tracker run\n against the exact user scenario: failed sub-coder, 167-char error,\n width=184) cover the fix.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.2: cap every widget line to terminal width to stop pi-tui overfl…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-18T07:24:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2547bce74fa5e8e16cfdb752af84a7192d68f879",
"body": "…e (#47)\n\nv1.9.0 rebound pi's built-in app.thinking.cycle to alt+t so the plan-mode\nextension could claim shift+tab. That collided with pi's documented thinking\nshortcut and pi (>= 0.79) surfaced an [Extension issues] warning whenever the\nrebind hadn't taken yet.\n\nPlan Mode now registers on alt+p (u\n[…]\n\nextension loads with no [Extension issues] warning, and the upgrade scenario\n(seeded v1.9.0 leftover) is cleaned on first launch.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.1: move Plan Mode to alt+p so shift+tab stays pi's thinking cycl…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-17T03:19:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "991bd42369fde9ce1009c7821f229a04881d2915",
"body": "…79.4\n\nNew capabilities (all as pi extensions; no new pi patches):\n- plan-mode: shift+tab toggles a research→ask→plan flow. Decomposes the\n request, dispatches read-only explorer sub-coders, asks 1-3 clarifying\n questions (with a free-text option), then synthesizes a written plan.\n Edits/writes a\n[…]\n the\ndispatch renderers use duck-typed theme components instead of pi-tui imports.\n\nAlso merged #44 (README ollama model:tag fix).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.9.0: Plan Mode, sub-coders, sessions, read-before-edit; bump pi 0.…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-16T06:19:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "af50c71d06f0885aa3e8b40e3813ebd24d1ea597",
"body": null,
"is_bot": false,
"headline": "Fix ollama installation command for qwen3.6 model (#44)",
"author_name": "David Losie",
"author_login": "dlosie",
"committed_at": "2026-06-15T18:25:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5aae3f9389e1a2437ac89e5418c22b2572f42645",
"body": "… template mismatch (#42)\n\nAdd parseLiquidToolCalls() to output-parser: recovers LFM2's\n<|tool_call_start|>[Func(arg='v')]<|tool_call_end|> format (single/double\nquotes, dict/list/scalar args, nested commas/parens, truncation, the\n<think>…</think>[calls] shape) with a precision guard. Tag calls\nform\n[…]\nor;\nserving with --jinja + the matching LFM2 template parses calls natively and\ntools execute. README troubleshooting entry added.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.8.4: recognize LFM2/Liquid Pythonic tool calls, diagnose llama.cpp…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-08T08:27:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4de8a4d62908d410715a823c8ca0d9c17e7b91d5",
"body": "…/OpenAI-compatible providers (#40)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.8.3: Windows USERPROFILE models.json fallback (#43), document omlx…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-06-08T07:01:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7e45f93ac9a09df166d37e75120d1217a89285d1",
"body": "Fall back to USERPROFILE when HOME is unset (Windows). Makes resolveOverridePath tests platform-neutral via path.join.",
"is_bot": false,
"headline": "Fix Windows user models config lookup (#43)",
"author_name": "A-M-D-R-3-W",
"author_login": "A-M-D-R-3-W",
"committed_at": "2026-06-08T06:59:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57a4b0ad5d0d45f103e67f8f2895629b94090059",
"body": "…providers\n\nFixes two GitHub issues that surfaced this week:\n\n- #36 — A user-override models.json with a minimal model entry (just\n id/contextWindow/input/reasoning, no name/maxTokens/cost) crashed pi at\n startup with `Cannot read properties of undefined (reading 'input')`,\n because pi's registry\n[…]\nr.\n\nBoth fixes are pure additions: no CLI / settings / public-API changes, all\n231 vitest tests pass (16 new), tsc --noEmit clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.8.2: tolerate minimal user models.json, gate temperature on local …",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-30T16:06:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cadc8456d085ed277cb9baaa230f17e7dcdd9412",
"body": "The glob tool capped matches at 500 but never bounded the directory\nwalk — run from a home dir (macOS Library / caches / node_modules),\nfs.glob descended everything and its internal traversal state grew\nuntil the Node process OOMed (host heap, not the model context window;\ncrashed mid-walk before an\n[…]\no the model narrows. New tested globFiles/renderGlobOutcome;\nverified node_modules is pruned (0 descent) and the scan meter halts.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.8.1: bound the glob walk so it can't OOM from a huge root",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T15:12:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c3a71449102dc06d085cbc9bf555fb3be9cd25a5",
"body": "llama-cpp-provider now probes the server's /props endpoint for its real\nn_ctx and registers the model with that window instead of models.json's\ndeclared default — so a `-c 131072` server shows 128k with no config\nedit, and (via v1.7.0) the TUI readout, read-guard, and budgets all\nfollow it. /props i\n[…]\nNew tested propsUrlFor/contextWindowFromProps/probeContextWindow;\nvalidated end-to-end against a live -c 131072 server (→ 131072).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.8.0: auto-detect llama.cpp live context window at startup",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:51:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "271850301f0fde25614f935367afd4b50757e884",
"body": "little-coder's contextLimit is no longer a hardcoded 32768 in\n.pi/settings.json. benchmark-profiles now resolves it from the active\nmodel's ctx.model.contextWindow (the same registered window pi displays\nand read-guard/getContextUsage use), so bumping a model's contextWindow\nin models.json propagate\n[…]\nps its explicit 65536 override. New resolveContextLimit() with\nunit + end-to-end (before_agent_start vs real settings.json) tests.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.7.0: context budget follows the model's live registered window",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:38:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c15db91b31251ba11f4e19bb514a050041c8da2c",
"body": "Restore benchmark_overrides.terminal_bench.max_turns = 40 (the v0.1.4\nempirically-tuned value) for both qwen3.6 profiles. The cap only ever\napplied to TB benchmark runs; real interactive usage is uncapped\nregardless (no LITTLE_CODER_BENCHMARK → no max_turns → turn-cap off).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Revert \"settings: remove the terminal_bench turn cap (run uncapped)\"",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:25:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "99ec30e911ba43fbac2ec09e92c0fef9ffd522aa",
"body": "Drop max_turns from the terminal_bench overrides for both qwen3.6\nprofiles. The turn-cap extension treats a missing/<=0 cap as \"no cap\"\n(turn_start early-returns), so runs are bounded only by the harness\nwall-clock — no mid-task abort on turn count. finalize-warn also\nself-disables when cap<=0, so no spurious answer reminder. Supersedes\nthe 40→80 bump. gaia keeps its 40-turn cap.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "settings: remove the terminal_bench turn cap (run uncapped)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:20:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "81a8230f70a314c30651f576bf7838b5873c6957",
"body": "Bump benchmark_overrides.terminal_bench.max_turns 40 → 80 for both\nqwen3.6 profiles (27b, 35b-a3b). The turn-cap extension reads this as\nthe per-run cap; gaia stays at 40. Updated the profiles test assertion\nthat resolves the real settings.json.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "settings: raise terminal_bench turn cap 40 → 80",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:18:30Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0aa09aaab76ae2839314d59afb2f45519acb7fda",
"body": "Replace the env-var opt-in with the real fix: configure-pages@v5→v6,\nupload-pages-artifact@v3→v5 (internally pins upload-artifact@v7),\ndeploy-pages@v4→v5 — all target node24 natively, so the deprecation\nnote is gone entirely rather than downgraded to \"forced to Node 24\".\nInputs (enablement, path) are unchanged across these majors.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci(pages): bump Pages actions to Node-24 majors",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:15:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "af0ecf082911f623b3b1102d5f0c77bab540f9b9",
"body": "The deploy run warns that configure-pages@v5, upload-pages-artifact@v3,\nand deploy-pages@v4 still run on Node.js 20 — which GitHub forces to\nNode 24 on 2026-06-02 and removes on 2026-09-16. No newer majors move\nthem to Node 24 yet, so set FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true at\nthe workflow level (GitHub's documented opt-in). Silences the warning\nnow; a no-op once Node 24 is the default.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci(pages): opt the Pages actions into Node 24",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T14:13:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c24bf5ac5ec6e0ba318f7812d98de3365f256681",
"body": "- champ row reads \"Gemini 2.5 Pro + Gemini CLI\" (model + agent, matching\n the \"qwen3.6-35b-a3b + little-coder\" order), with proper capitals.\n- give the champ bar its own axis ticks (light on dark), shown on mobile\n where the rows stack and the shared top axis no longer reads.\n- mobile: stack the n\n[…]\nflex-basis:0 collapsed its height to 0). Stack the foot too (caption +\n \"led by\" were interleaving). Bump CSS cache-bust to v=…f.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: fix mobile benchmark scale + champ block order/caps",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T13:43:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0fa37d16b9390fe7550ef255867351530c5415e5",
"body": "Replace the Aider Polyglot hero (qwen3.5+little-coder 45.56 vs\ngpt-4.5-preview) with the officially-ranked Terminal-Bench 2.0 result:\nqwen3.6-35b-a3b + little-coder at 24.6% ± 3.2 vs Gemini CLI + Gemini\n2.5 Pro at 19.6% ± 2.9 (89 tasks × 5 trials, official leaderboard),\nled by +5.0 pts. Numbers and \n[…]\n.\n- Add ± std to the bench number; update eyebrow/title/specs/foot + the\n page meta description. Bump CSS/JS cache-busts to v=…e.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: lead with the official Terminal-Bench 2.0 result",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T13:32:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f981aba9eeb27be7e7a7f12193c4a49e078e7c75",
"body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: tagline 'medical' → 'personal' documents",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T13:16:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "16b73202b99e7b2052886fbc4c9540ba7f1f6a7a",
"body": "The lead now cycles every ~5s through a typed/erased tail while the\nstatic prefix \"a coding agent built \" stays put: small models →\ntending to your medical documents → when you hit Claude Code's limit.\nHoney cursor goes solid while typing, blinks at rest. The lead's height\nis pinned to its tallest p\n[…]\nrotation never reflows the page. Honors prefers-reduced-motion\n(first phrase stays static). Bumped the site.js cache-bust to v=…c.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: rotate the hero tagline through positioning lines",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T13:14:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "54d81d25b334739fca92052eafaa7a7bda406bec",
"body": "The launcher runs pi with --no-extensions and loads only the bundled\nextensions it wires via --extension (resource-loader.js:272 takes the\ncliEnabledExtensions-only branch). So extensions are added/removed by\nediting .pi/extensions/ or passing -e at launch — NOT by `pi install`\n(which registers into pi settings, skipped under --no-extensions) and\nNOT by toggling them in .pi/settings.json. Surfaced via issue #29.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: correct the extension story (--no-extensions, not pi install)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T12:54:17Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "591da0f30a6cc0cff7741d4560b75c620e2b0f70",
"body": "Add \"sed \" to BUILTIN_SAFE_PREFIXES so stream-editing / line-range\nprinting runs without a per-deployment LITTLE_CODER_BASH_ALLOW entry.\nTrailing-space word boundary keeps \"sedfoo\" blocked; rm stays off by\ndesign. Covered by a new isSafeBash assertion.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.6.1: allow sed in the bash whitelist (auto mode)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-23T12:38:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "417d2fd792d481f17311368cace3dd72b391da38",
"body": "On mobile the two terminals' long commands (llama-server -hf ...,\nlittle-coder --model ...) and tool-flow lines wrap to extra rows, so each\nreveal step grew the box and shoved the page down. The min-height\nreservation was measured at desktop width, where everything fits on one\nline, so it was far to\n[…]\naps differently),\nand re-pin/replay on resize. Result: deltaH=0 across 320-1280px, no\nhorizontal overflow — the box is fixed-size like desktop.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: pin terminal heights so the mobile animation stops jumping",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-23T11:33:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e0a018ffc19e4ff0364fc8ef4519fd14091fc16",
"body": "Clears the \"Node.js 20 actions are deprecated\" warning surfaced on the\nv1.6.0 publish run. actions/checkout@v5 and actions/setup-node@v5 run on\nNode 24; node-version stays '22' (the project's required runtime, an\nunrelated knob the action still honors).\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: bump checkout/setup-node to v5 (Node 24 runtime)",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-23T11:33:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7538c4d39b48db936621e980675d7d0ef1772c32",
"body": "A sixth harness intervention. little-coder targets small-context local\nmodels, but pi's built-in read returns up to ~2000 lines in one tool\nresult — enough for a single read to overflow the window and evict the\nconversation. read-guard catches that on the tool_result event: when\ncurrent usage + esti\n[…]\n a single result. Image reads and error results are\nleft untouched; falls back to a half-window heuristic when usage is null\n(post-compaction).\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.6.0: add read-guard intervention for context-window-overflowing reads",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-23T11:08:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2c6f9a28b622cc46c83487af07bf3d258f0a39ef",
"body": "Pages serves assets with max-age=600 and index.html linked them by\nplain name, so returning visitors kept an old site.css after a deploy.\nVersioned query strings make a fresh HTML load always fetch the\nmatching stylesheet/script.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: version css/js asset urls to bust stale browser cache",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-23T10:52:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7e40235ccbf0826a81bb10377e7b6c9cb99eaa1d",
"body": "- nav-cta: shrink + wrap the github url under 800px so the long\n URL no longer forces the viewport wider than the screen (the\n full links + url stopped fitting around ~795px, e.g. iPad portrait)\n- brand mark: sit the block cursor on the baseline instead of the\n line-box center so it lines up with the \"lc\" glyphs (scoped to\n the nav so hero/footer cursors are unchanged)\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: fix mobile nav overflow + center navbar logo cursor",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-23T10:45:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e55e52ef7269cc1f0bafa07b47185bd66edd3ca9",
"body": "- assets/banner.svg: aider polyglot 78.7% (35B-A3B), TB2.0 rank #120,\n drop the model line, accurate annotations, re-flowed prompt lines.\n- site/: static one-pager (HTML/CSS/vanilla JS) deployed to GitHub Pages.\n Content driven by the paper + the repo's real behavior: npm install,\n llama.cpp serv\n[…]\nstars/issues/version\n fetch live from the GitHub API with baked-in fallbacks.\n- .github/workflows/pages.yml: Actions deploy of site/ to Pages.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "site: add GitHub Pages one-pager + fix banner numbers",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-22T21:44:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "eec0b9cd2ccd1c1bc56cfa015896c5ead4c4589e",
"body": null,
"is_bot": false,
"headline": "Update README.md",
"author_name": "Itay Inbar",
"author_login": "itayinbarr",
"committed_at": "2026-05-22T20:07:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b97a3fdebc2a0cdae2e7f69c4eeee20de93900c1",
"body": "Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "banner: drop 'verified', use the small-local-models tagline",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-22T19:59:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3d61010617dbe77083139cbbc90609f95480a81c",
"body": "…nner)\n\nBranding-only release — no behaviour changes.\n\n- README hero is now assets/banner.svg, a self-contained recreation of the\n brand book's \"github readme · hero\" slide (ink terminal card, lc▌ honey\n monogram, wordmark + tagline, the verifiable headline numbers). IBM Plex\n Mono is embedded so\n[…]\nt matches the\n documented hex regardless of the active pi theme.\n- Removed the stale purple docs/assets/startup.svg (v0.0.1 / ollama/qwen3.5).\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.5.1: apply brand book v1.0 (honey/ink/paper, lc▌ mark, terminal ba…",
"author_name": "itayinbarr",
"author_login": "itayinbarr",
"committed_at": "2026-05-22T19:56:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "82f16e57e4d4336f2da67b25cfadcc9e51983291",
"body": "…on UX, /clear\n\n- thinking-budget: run recovery synchronously before ctx.abort() so it never\n touches a session-replaced (stale) pi; re-assert thinking off across the\n forced restart turn; restore the prior level on the next user input (#8)\n- thinking budget cap 2048 -> 4096; fix benchmark-profile\n[…]\n- add /clear command (ctx.newSession), README roadmap -> knowledge-base focus\n- tests: 181 passing; tsc clean; boots via pi loader\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.5.0: fix #8 thinking-budget stale-ctx recovery, harness-interventi…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-22T18:36:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e34df6775dc132bbfcc5ad81c3ff7f71cc5e83f7",
"body": "…eption\n\nTwo cosmetic follow-ups to the v1.4.2 @earendil-works migration.\n\n1. Pre-stamp pi's lastChangelogVersion so the \"What's New\" block stops\n rendering inside little-coder's TUI on every pi bump. Pi reads\n ~/.pi/agent/settings.json#lastChangelogVersion and dumps every newer\n CHANGELOG ent\n[…]\n little-coder's own\nstartup banner. All 152 vitest tests + tsc --noEmit clean. Smoke-tested\n--list-models against the new install.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.4.3: suppress pi changelog block + override deprecated node-domexc…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-19T08:31:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c7a073fa3b76643a7b91c69533e22800cd306b61",
"body": "v1.4.2 bumped package.json#engines.node to >= 22.19.0 (pi 0.75 raised\nits minimum, and glob@^13 needs it too). The release workflow was still\npinned to node-version: '20' — npm ci happens to succeed against that\nbecause engines isn't strict by default, but the next release that\nrelies on a Node-22 API would fail in CI before publish. Pin to 22 now\nto keep CI honest about the supported runtime.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: pin release workflow to Node 22 to match new engine floor",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-19T08:06:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "943e4a04cfb4a0a1ac8c0746337298574a5c0ce0",
"body": "Migrate from @mariozechner/pi-coding-agent@^0.68.1 to\n@earendil-works/pi-coding-agent@^0.75.3 — same author, new npm scope —\nwhich removes the deprecation warnings, picks up pi 0.75's Windows /\nundici / cmd-shim fixes, and forces Node >= 22.19 (pi's new floor, which\nalso resolves the glob-on-node-20\n[…]\n; smoke-tested bin/little-coder.mjs --list-models / --version /\n--help against the bundled @earendil-works/pi-coding-agent@0.75.3.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.4.2: bundled-pi to @earendil-works scope (closes #22, #23, #25)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-19T08:05:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "55a83528985ed590df82cca2c478b0f206209500",
"body": "Fixed\n- v1.4.0 shipped quietStartup: true in our package's .pi/settings.json\n but pi reads global settings from ~/.pi/agent/settings.json, not\n from the npm-installed package dir. So users running little-coder\n from anywhere outside the repo root still saw the [Extensions]\n block on launch. The \n[…]\nrtup.svg re-captured from ~ (matches\nwhat end users see) — no [Extensions] block.\n\nTests: 152 passed (unchanged). Typecheck clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.4.1: fix quietStartup wiring + title reassertion",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-16T19:45:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8727c4b918b826c40449e874f5f626b7e0bb2ca3",
"body": "Added\n- New .pi/extensions/branding extension. On every session_start,\n installs a custom header (little-coder vX.Y.Z + tagline + compact\n keybinding hints) via pi.ui.setHeader, and sets the terminal title\n to \"little-coder - <cwd>\" via pi.ui.setTitle. Pattern follows pi's\n bundled examples/exte\n[…]\n its own features...\" onboarding line is gone\n (replaced by setHeader override).\n\nTests: 152 passed (unchanged). Typecheck clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.4.0: startup UI rebrand from pi to little-coder",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-16T19:28:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8621b01edceb960e65d14a8cc9698229a9e48afd",
"body": "First Phase 2 functional release.\n\nAdded\n- bash whitelist: cp, mv, mkdir, touch (rm/sudo stay off by design)\n- image input on llamacpp/qwen3.6-35b-a3b (input: [\"text\",\"image\"])\n- README's Option A folds the vision projector into the default\n llama-server launch (extra hf-download + --mmproj flag)\n\n\n[…]\noise. Opt back in with PI_SKIP_VERSION_CHECK=0.\n\nTests: 152 passed (was 145). +5 write-guard, +2 permission-gate.\nTypecheck clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.3.0: bash whitelist + Write cwd-rewrite + image input + pi banner",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-16T17:53:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "37bcddbfcd4e77b6b2ef102ba269ec92c995e8d1",
"body": "Docs-only release. Two milestones:\n\n1. Terminal-Bench 2.0 leaderboard accepted both submissions\n (Qwen3.6-35B-A3B rank 120, 24.6%±3.2; Qwen3.5-9B rank 142,\n 9.2%±2.4). Replaces the \"awaiting maintainer merge\" status\n on the README benchmark rows.\n\n2. Phase 1 (build a wide benchmark baseline ac\n[…]\nx box\nserving Qwen3.6-35B-A3B over WiFi, same throughput as\nloopback.\n\nNo CLI / settings / skill-pack changes. No behavior change.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v1.2.1: TB 2.0 acceptance + LAN inference docs + roadmap → Phase 2",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-16T16:47:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b67a2e3b4874cfaf14729d55da7172d8722cd9bd",
"body": "The browser-extract retention live-integration test needs the chromium\nbinary, which `npm ci` doesn't fetch. Running `npx playwright install\n--with-deps chromium` here picks that up. Surfaces on v1.2.0 — the first\ntag-driven CI run since the auto-publish workflow landed in d16c698.",
"is_bot": false,
"headline": "ci: install playwright chromium before npm test on release",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-13T09:44:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2bae4d974383228565f0c2b1367cde4e3d5a23f2",
"body": "PR #18 (#17 Windows launch) merged separately by @Grogger and rolls into this release.\n\n- Added: lmstudio/local-model provider (port 1234, OpenAI-compatible).\n LMSTUDIO_BASE_URL / LMSTUDIO_API_KEY env knobs (parity with llamacpp/ollama).\n .pi/settings.json profile for lmstudio/local-model.\n- Fixed\n[…]\nin the docs).\n- Changed: removed skills/tools/agent.md and the agent/delegate/spawn intent\n keys (#19) — no Agent tool was ever wired up; pi's examples/subagent/ is a\n reference impl, not a default.",
"is_bot": false,
"headline": "v1.2.0: built-in LM Studio provider + skill fixes (#19, #21)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-13T09:35:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2cd46d2a2383478bef544c532f90174c167104d1",
"body": "On Windows, node_modules/.bin/pi is a .cmd shim that cannot be executed\ndirectly by spawn(). Resolve the platform-correct binary (pi.cmd) and\ninvoke it via cmd.exe with args as an array, avoiding both the ENOENT\nfailure and the DEP0190 shell-injection deprecation warning.\n\nFixes #17",
"is_bot": false,
"headline": "fix: resolve pi binary as .cmd and spawn via cmd.exe on Windows (#18)",
"author_name": "Grogger",
"author_login": "Grogger",
"committed_at": "2026-05-13T09:24:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef3502da71daec41f6e2cef1df6b569c93ffb7c1",
"body": "The publish.yml workflow already did npm publish on v* tag pushes, but it\nleft the GitHub Releases page lagging — v1.1.0 was a bare tag with no\nRelease entry, so the repo's \"Latest\" badge stayed on v1.0.3.\n\nNow after npm publish succeeds the workflow extracts the CHANGELOG.md\nsection that matches th\n[…]\ned `--latest`. If no matching section is found, falls back to\nGitHub's auto-generated commit-list notes so the release still gets\ncreated. `permissions.contents` bumped from read to write to allow it.",
"is_bot": false,
"headline": "ci: also create a GitHub Release on tag push, with notes from CHANGELOG",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-03T10:37:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d16c698747ebfd41278f53e994cd5aa150bfc6e5",
"body": "- .github/workflows/publish.yml: triggers on push of tags matching v[0-9]*,\n verifies the tag matches package.json (catching typos before npm), runs\n npm ci + npm test + npm run typecheck, then npm publish with provenance\n via GitHub OIDC. Requires the NPM_TOKEN repo secret (Automation token,\n b\n[…]\nfter this lands).\n\n- package-lock.json: bumped to 1.1.0 to match package.json (the previous\n v1.0.x bumps left it stuck at 0.1.15; lock isn't shipped to npm so this\n is purely cosmetic-but-correct).",
"is_bot": false,
"headline": "ci: auto-publish to npm on v* tag push; sync package-lock to 1.1.0",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-03T10:24:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "78bc730f20e8a8350a6a4eb3570725c8e0c8f15a",
"body": "…r fix, bun docs\n\nCloses #12, #13, #15, #16.\n\n- #13: llama-cpp-provider now loads providers from models.json (package\n default) merged with $LITTLE_CODER_MODELS_FILE / $XDG_CONFIG_HOME/\n little-coder/models.json / ~/.config/little-coder/models.json\n (per-provider replace). LLAMACPP_BASE_URL / OLL\n[…]\numents bun add -g install and a one-line shebang\n swap for fully node-less runs.\n\n- README architecture diagram updated for llama-cpp-provider/ and\n models.json to reflect the data-driven load path.",
"is_bot": false,
"headline": "v1.1.0: data-driven models.json, BASH_ALLOW env, quality-monitor stee…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-05-03T10:14:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5bd4959e48165185bfd8ce13a263f936efe8a18c",
"body": "…ample\n\nThat's the configuration little-coder is tuned for — small local model on\nllama.cpp with the custom scaffold. Cloud models (Anthropic, OpenAI) are\ndemoted to the secondary list under \"Cloud models work the same way\".\ninstall.sh post-install hint updated to match.",
"is_bot": false,
"headline": "v1.0.3: lead README with llamacpp/qwen3.6-35b-a3b as the canonical ex…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-28T15:09:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b5b79261903884971aaf507096538cfc39f3148",
"body": "New users now hit the install command and run instructions at the top of\nthe doc, right after the \"How it relates to pi\" intro. The research\nnarrative (benchmark table + roadmap) moves below. No code changes.",
"is_bot": false,
"headline": "v1.0.2: README reorder — Install + Run before Paper / Roadmap",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-28T15:03:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2772f4be3687529732e41826cbdb7c8506ca3a55",
"body": "Adds a best-effort npm registry check at launcher startup. When a newer\nlittle-coder is published, the launcher tells you and (in interactive\nmode) offers to install it on the spot.\n\n- TTY: prompts \"Update now? [Y/n]\" — Enter or 'y' runs\n `npm install -g little-coder@latest` and asks you to re-run;\n[…]\n21 new unit tests (semver compare, cache TTL, skip-conditions,\nmalformed-cache handling). Verified end-to-end with a primed cache:\nTTY prompt path, non-TTY notice path, and cold-cache live-fetch path.",
"is_bot": false,
"headline": "v1.0.1: update-check on launcher startup",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-28T14:58:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "50becc3b4d7462d03e5ff8e41cce0b09fab2c2b8",
"body": "…bort race\n\nDistribution + stability release.\n\nAdds:\n- bin/little-coder.mjs — Node launcher that loads our AGENTS.md, all 20\n bundled .pi/extensions/, and runs in the user's cwd, regardless of where\n they invoke it from.\n- install.sh — curl-pipe installer: preflights Node >= 20.6.0 then runs\n npm\n[…]\n- Stale benchmark-profiles assertion (gaia max_turns 30 -> 40) updated\n to match v0.1.27 settings.\n\nCloses #8 (thinking-budget silent stop).\nCloses #9 (working in folders other than the cloned repo).",
"is_bot": false,
"headline": "v1.0.0: global install + cwd-anywhere launcher; fix thinking-budget a…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-28T14:40:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b9a85e744c0c812e74b8dfd8a065853b54be4bdc",
"body": "Per-level L1 60.4% / L2 37.2% / L3 7.7%. Adds the GAIA runner\n(benchmarks/gaia.py), pre-upload validator, status script, the\nfinalize-warn extension, the research-first directive in skill-inject,\nand a per-benchmark requiredTools mechanism in benchmark-profiles.\nTest-split run (301 tasks) and leaderboard submission to follow.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.27: GAIA validation-set result — 40.00% (66/165) on Qwen3.6-35B-A3B",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-28T13:55:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f3054a33ac83c21b622c46e059122bf72ea329c3",
"body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.26: TB 2.0 9B submission landed (PR #163, 9.21%)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-27T20:04:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "71d1e2933cdcd06617d32671412378378c0728ff",
"body": "…rogress (~15.5%)\n\nAlso fixes voice in v0.1.24 entry: \"User hypothesis\" → \"My hypothesis\"\n(this is the project author's own changelog, not third-party annotation).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.25: README — v0.1.24 prompt validation + 9B leaderboard run in p…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-27T16:26:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9c2e860b543e9c015eb55a11893ec7a176e63f0b",
"body": "…is pilot)\n\nCites Leviathan et al. 2025 \"Prompt Repetition Improves Non-Reasoning LLMs\"\n(arxiv 2512.14982) as the established mechanism behind the hypothesis.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.24: re-add Available Tools block + concision guideline (hypothes…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T17:24:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "16ade3fc50f414ab9ff93c889958527c41199eb5",
"body": "…ot affected)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.23: fix CHANGELOG scope claim in v0.1.22 (Polyglot was pre-pi, n…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T12:19:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "67490fcb9551d2012021f3360293b2f954558f48",
"body": "…xt wrapper)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.22: AGENTS.md is THE system prompt (drop pi base + Project Conte…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T12:12:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9b4279eb894f1f5730579941951f79443b617158",
"body": "…ine-number reads, abs paths)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.21: restore 3 operational rules pi doesn't cover (replace_all, l…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T12:00:10Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "828857a297a5f8aec3684ed914c2067ab5f25dab",
"body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.20: dedup AGENTS.md against pi's base prompt for k=5 A/B re-run",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T08:56:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ce5fd704d8de09139fc1f6c4346d35918b4cba8a",
"body": "…82%)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.19: README — TB 2.0 result + Roadmap status reflect PR #158 (23.…",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T08:55:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5f00f3082ed6bada0f9566e15035558521dc309e",
"body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.18: TB 2.0 submission landed (PR #158, 23.82%)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-26T08:51:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "22e4ea6b725f1d6f595faab10a5967b6537139bd",
"body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.17: drop README pitch paragraph + remove outdated local whitepaper",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-25T19:45:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fb4e61dcee5a1bef330f68a6053ed11fa8634f96",
"body": "- Add browser-extract-retention extension: prunes older BrowserExtract\n tool-results from context on every turn, keeps 2 newest raw, replaces\n older with URL + evidence-IDs placeholder. 28.4% context reduction\n measured on real Wikipedia content.\n- Fix latent bug in browser/index.ts where page.ev\n[…]\nausing\n BrowserExtract to silently return undefined/empty text. Verified\n against real Wikipedia pages.\n- 95/95 tests passing (+11 retention unit, +3 live Playwright integration);\n typecheck clean.",
"is_bot": false,
"headline": "v0.1.16: browser-extract retention + fix silent page.evaluate bug",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-24T16:26:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "da6a9b9a4d9ed9bf7803c0938d09460e85ba5869",
"body": "Alibaba released Qwen3.6-27B (dense, 27B, 262K ctx) on 2026-04-22\nwith claims of outperforming its 397B MoE flagship on agentic\ncoding benchmarks. Added the model to the provider extension and\nsettings.json so it's a one-flag switch for future experiments.\n\n35B-A3B remains the benchmarking target. E\n[…]\n viable on this laptop; dense 27B can't match it\nwithout >=24 GB VRAM.\n\nNo code change beyond the two file edits. Tests unchanged.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.15: register llamacpp/qwen3.6-27b for experimentation",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-24T15:18:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "948ed0bb20f95dee3859df1b2d1137cd289fb0c3",
"body": "Adds a ## Roadmap section right after the benchmark-results\ntable, explaining that the near-term focus is benchmarking to\nmap the impact radius of the whitepaper's scaffolding:\n\n 1. Aider Polyglot — done (45.56% / 78.67%)\n 2. Terminal-Bench v0.1.1 — done (40.0%)\n 3. Terminal-Bench 2\n[…]\n the data exposes.\n\nDocs-only. benchmarks/tb_runs/ and benchmarks/harbor_runs/\nremain gitignored; in-flight TB 2.0 run unaffected.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.14: add Roadmap section to README",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-24T12:55:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "75fa392020458744894dede891fe30fed1822a0a",
"body": "No code change — just the CHANGELOG narrative for the\nAGENTS.md full-prompt restoration that landed in 6f89eed.\nTag v0.1.13 already points at 6f89eed; retaining as-is.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add v0.1.13 CHANGELOG entry (missed in 6f89eed)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T21:33:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6f89eeda84ffebd2e42d4b8b16f3375935c091f3",
"body": "The pi port's AGENTS.md was a ~12-line summary that dropped three\nload-bearing sections from the Python v0.0.5 prompt: Capabilities &\nAutonomy, Approaching complex tasks, Handling ambiguity. Those\nbehavioral nudges — whose exact wording was validated by the 78.67%\nPolyglot run — were not in the prom\n[…]\n ~21% done) will be killed and restarted with the fix —\na consistent prompt across all 5*89=445 trials is required for\nsubmission.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.13: restore full v0.0.5 SYSTEM_PROMPT_TEMPLATE into AGENTS.md",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T21:33:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4bddae16488132c8408135509c86c4f3755b7874",
"body": "No code change — just the CHANGELOG narrative for the\nREADME Substack-link restore that landed in 9339514. Tag\nv0.1.12 already points at 9339514; retaining as-is.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add v0.1.12 CHANGELOG entry (missed in 9339514)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T21:20:10Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9339514ca0f932b4531e7e427494e8616a38f8da",
"body": "v0.1.11's rewrite moved the paper link into the results table\nonly. Community feedback: the paper is the 'why' for the whole\nrepo and belongs above the fold. Restored as a standalone\nparagraph right after the headline, framed as 'start there for\nthe why; stay here for the how'.\n\nDocs-only. benchmarks/tb_runs and benchmarks/harbor_runs stay\ngitignored; in-flight TB 2.0 run artifacts are not included.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.12: restore Substack whitepaper link to README opening",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T21:19:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3cc97012f7f468967091b21ee4527fcce9630968",
"body": "Community feedback on the pi port: new users weren't sure how to set\nlittle-coder up now that it's built on pi. This release rewrites the\nREADME around that concern, modeled after pi.dev's terse,\nconversational style.\n\n- New lead + 'How it relates to pi' section explains little-coder\n is pi + 16 ex\n[…]\nbehavior change. benchmarks/tb_runs/ and\nbenchmarks/harbor_runs/ stay gitignored; in-flight TB 2.0 run\nartifacts are not included.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.11: rewrite README for the post-pi-migration audience",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T21:17:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "08dd4f5d3848e76711bce6c0a450d264b6792518",
"body": "No code change — just the CHANGELOG narrative for the\nharbor_status.sh fix that landed in b717284. Tag v0.1.10\nalready points at b717284; retaining as-is.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add v0.1.10 CHANGELOG entry (missed in b717284)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T09:01:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b717284f709c365ab60c4a9f665f65dd7169e4ba",
"body": "Harbor stores the verifier reward at verifier_result.rewards.reward,\nnot at top-level reward or parser_results[0].reward as the earlier\ninline status queries assumed. Every inline status check during the\nin-flight 89-task TB 2.0 run reported 0% when the actual accuracy\nwas ~37%. Fixed by adding benc\n[…]\nThe running bench is unaffected — only my monitoring was wrong.\nreward.txt in each trial dir has always had the correct 0/1 value.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.10: fix status-script reward-field bug (add harbor_status.sh)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T09:01:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "98c6c488cc72e38bf9a7846bff39839f67b92951",
"body": "Two drift fixes before the TB 2.0 run:\n\n1. package.json was stuck at '0.1.0' despite tags advancing through\n v0.1.8. Bumped to 0.1.9.\n\n2. LittleCoderAgent.version() hardcoded '0.1.6'. Now reads from\n package.json at import time, so the agent version recorded in\n harbor's run metadata (for leaderboard submissions) auto-tracks\n the package version.\n\nNo runtime behavior change. 81 TS + 4 py tests pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.9: sync package.json version + dynamic adapter version()",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T07:27:36Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e082de6f82234baf5a863ec80fec085044a963b5",
"body": "Accidentally committed ~50 KB of fix-git pilot output in v0.1.7.\nRemoving from tracking and adding the standard gitignore entry,\nmatching the treatment of benchmarks/tb_runs/. Docs-only; no\nruntime change.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.8: gitignore benchmarks/harbor_runs/",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T07:23:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "717659a35f759f34a68565bf7209c70b054bdfc9",
"body": "Two fixes in one patch:\n\n1. benchmarks/harbor_pilot.sh used --task-ids (TB 1.0 flag name) where\n harbor wants --include-task-name for per-task filtering from a\n registry dataset. Corrected.\n\n2. Clarifies that v0.1.4's commit didn't actually include the\n .pi/settings.json max_turns=40 change (I\n[…]\nulty=easy) passed with reward 1.0 in 1m50s. First empirical\nconfirmation that the async env.exec + PiRpc sync-reader bridge works.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.7: fix harbor_pilot flag + document v0.1.4 reproducibility gap",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T07:22:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d017d27e9f1bff375962705d909db9a319ac20db",
"body": "Adds benchmarks/harbor_adapter/little_coder_agent.py — subclasses\nharbor.agents.base.BaseAgent (harbor is the framework that replaced\nthe tb CLI for TB 2.0). The 89-task terminal-bench@2.0 dataset is now\nrunnable via benchmarks/harbor_pilot.sh <task-id>.\n\nKey design: PiRpc is unchanged; the ShellSes\n[…]\nia 'uv tool install harbor'. Dataset tasks\nland under ~/Documents/terminal-bench-2.0-tasks when downloaded; not\ncommitted to repo.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.6: Terminal-Bench 2.0 (harbor) adapter",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T07:17:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e316c158b823164dcdf2ac27c96e5f14b00a2ed",
"body": "Full write-up of the 80-task leaderboard-valid run:\n- 32/80 = 40.0 % accuracy on terminal-bench-core@0.1.1\n- 6 h 50 min wall clock on 8 GB RTX 5070 Laptop\n- run id leaderboard-2026-04-23__00-14-03 (executed at commit f4c1b4e = v0.1.4)\n\ndocs/benchmark-terminal-bench-v0.1.1.md covers:\n- Setup, passed/\n[…]\nnd\nv0.0.5 headlines. CHANGELOG v0.1.5 entry captures empirical findings\nand known diagnostic gaps.\n\nNo behavior change; docs-only.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.5: document TB-Core v0.1.1 result (40 %)",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-23T04:54:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f4c1b4ef697ecf93855d053e36a63e21615e3104",
"body": "Extension-activity observability:\n- skill-inject + knowledge-inject emit ctx.ui.notify per turn with the\n selected tools/topics. Previously silent — no way to confirm\n error-recovery priority was firing on failed tool calls.\n- PiRpc captures notify events (new .notifications() public method).\n- tb\n[…]\nap costs nothing on\n passes, gives failing trajectories room.\n\nGAIA, Polyglot, other profiles unchanged. 81 TS + 4 py tests pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.4: observability + TB max_turns 25→40",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T21:11:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "346cc6aa30b2acae8c5f25b0a6f7cedbd6fc4778",
"body": "Reusable status dump for in-flight Terminal-Bench runs. Auto-detects\nthe newest run dir, prints pid+elapsed, done/remaining, accuracy,\npass/fail list, current in-flight container, and ETA from\nobserved per-task rate.\n\nUsage:\n benchmarks/tb_status.sh\n benchmarks/tb_status.sh leaderboard-2026-04-22__22-50-08\n\nNo runtime behavior change; dev-tooling only.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.3: add tb_status.sh one-shot status script",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T20:47:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2137a2549db0c85e90b598062bd00413dd24ae63",
"body": "Docs-only changes:\n\n1. Whitepaper link consolidated. Every repo pointer that used to target\n docs/whitepaper.md (README top, CHANGELOG v0.0.2 entry, BibTeX\n howpublished field, docs/architecture.md, docs/benchmark-reproduction.md)\n now points at the canonical published version on Substack:\n \n[…]\nder()\n composes; see .pi/extensions/llama-cpp-provider/index.ts.\n\nNo behavior change. 81 TS tests + 4 Python tests still pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.2: link whitepaper to Substack + document issue-triage",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T20:00:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "96d878128ba45284ebdd450e78a3c70b8181d009",
"body": "Patch release documenting the rename cleanup that landed in 0a9b243.\nNo behavior change; purely cosmetic/string alignment with the 0.1.0\nrelease identity. Tests still pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "v0.1.1: CHANGELOG entry for the little-coder-pi -> little-coder rename",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T19:56:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0a9b243f2ce331161576321b2da60c3188ecd65e",
"body": "The 0.1.0 release is called little-coder (same repo, same name, 100+\nstars). Strip the 'little-coder-pi' working-name that leaked into\nvarious strings, comments, and directory paths:\n\n- AGENTS.md: heading\n- .pi/extensions: checkpoint path (~/.little-coder-pi -> ~/.little-coder),\n User-Agent strings\n[…]\naunch, so its\ncheckpoints continue writing to ~/.little-coder-pi for the duration.\nNew runs will use ~/.little-coder/ as expected.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Rename all 'little-coder-pi' references to 'little-coder'",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T19:55:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "daa43c9d4b48c2419b9362e21a79afa1b1cb9640",
"body": "The (agent x model) pair on tbench.ai's leaderboard reads from\nBaseAgent.name(). Use 'little-coder' (matches 0.1.0 package name)\ninstead of 'little-coder-pi' so submissions show up under the\nsame agent identity as the repo.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "tb_adapter: rename agent to 'little-coder' for leaderboard",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T19:49:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4a220e71c57715340b024211cdb3f6d46d075099",
"body": "benchmarks/tb_pilot.sh: runs one or more Terminal-Bench tasks through\nthe ported LittleCoderAgent adapter. Detects docker group membership\nand falls back to `sg docker -c` when the user isn't in the group.\n\nVerified: hello-world, fix-permissions, broken-python all pass 100%\non llamacpp/qwen3.6-35b-a3b via the pi-based port.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add TB pilot wrapper script",
"author_name": "Itay Inbar",
"author_login": null,
"committed_at": "2026-04-22T19:02:57Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 38,
"commits_last_year": 107,
"latest_release_at": "2026-07-18T08:38:05Z",
"latest_release_tag": "v1.11.0",
"releases_from_tags": false,
"days_since_last_push": 5,
"active_weeks_last_year": 13,
"days_since_latest_release": 5,
"mean_days_between_releases": 3.3
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "little-coder",
"exists": true,
"license": "Apache-2.0",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/little-coder",
"is_deprecated": false,
"latest_version": "1.11.0",
"repository_url": "https://github.com/itayinbarr/little-coder",
"versions_count": 38,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 3860,
"first_published_at": "2026-04-28T14:49:14.896000Z",
"latest_published_at": "2026-07-18T08:38:04.097000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
}
]
},
"popularity": {
"forks": 118,
"stars": 1830,
"watchers": 13,
"fork_history": {
"days": [
{
"date": "2026-04-19",
"count": 3
},
{
"date": "2026-04-20",
"count": 2
},
{
"date": "2026-04-22",
"count": 13
},
{
"date": "2026-04-23",
"count": 10
},
{
"date": "2026-04-24",
"count": 3
},
{
"date": "2026-04-25",
"count": 4
},
{
"date": "2026-04-26",
"count": 4
},
{
"date": "2026-04-27",
"count": 1
},
{
"date": "2026-04-28",
"count": 11
},
{
"date": "2026-04-29",
"count": 4
},
{
"date": "2026-05-04",
"count": 2
},
{
"date": "2026-05-07",
"count": 1
},
{
"date": "2026-05-08",
"count": 1
},
{
"date": "2026-05-10",
"count": 2
},
{
"date": "2026-05-11",
"count": 3
},
{
"date": "2026-05-12",
"count": 2
},
{
"date": "2026-05-13",
"count": 2
},
{
"date": "2026-05-16",
"count": 1
},
{
"date": "2026-05-18",
"count": 4
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-20",
"count": 1
},
{
"date": "2026-05-21",
"count": 2
},
{
"date": "2026-05-22",
"count": 1
},
{
"date": "2026-05-23",
"count": 2
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-26",
"count": 2
},
{
"date": "2026-05-27",
"count": 2
},
{
"date": "2026-05-28",
"count": 3
},
{
"date": "2026-05-31",
"count": 1
},
{
"date": "2026-06-04",
"count": 1
},
{
"date": "2026-06-05",
"count": 1
},
{
"date": "2026-06-06",
"count": 1
},
{
"date": "2026-06-09",
"count": 1
},
{
"date": "2026-06-12",
"count": 1
},
{
"date": "2026-06-14",
"count": 1
},
{
"date": "2026-06-16",
"count": 1
},
{
"date": "2026-06-17",
"count": 1
},
{
"date": "2026-06-18",
"count": 1
},
{
"date": "2026-06-19",
"count": 1
},
{
"date": "2026-06-21",
"count": 1
},
{
"date": "2026-06-24",
"count": 1
},
{
"date": "2026-06-26",
"count": 1
},
{
"date": "2026-06-27",
"count": 1
},
{
"date": "2026-06-28",
"count": 2
},
{
"date": "2026-06-29",
"count": 2
},
{
"date": "2026-07-01",
"count": 1
},
{
"date": "2026-07-03",
"count": 1
},
{
"date": "2026-07-07",
"count": 1
},
{
"date": "2026-07-12",
"count": 1
},
{
"date": "2026-07-15",
"count": 1
},
{
"date": "2026-07-20",
"count": 1
},
{
"date": "2026-07-21",
"count": 2
},
{
"date": "2026-07-23",
"count": 2
}
],
"complete": true,
"collected": 117,
"total_forks": 118
},
"star_history": null,
"open_issues_and_prs": 11
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 18809,
"source_files_sampled": 109,
"oversized_source_files": 0,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 5844
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@earendil-works/pi-coding-agent",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.79.4"
},
{
"name": "@sinclair/typebox",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.34.49"
},
{
"name": "playwright",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.59.1"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 1,
"merged_prs": 3,
"open_issues": 10,
"closed_ratio": 0.828,
"closed_issues": 48,
"closed_unmerged_prs": 5
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "itayinbarr",
"commits": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/12065558?v=4"
},
{
"type": "User",
"login": "i-snyder",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/34639515?v=4"
},
{
"type": "User",
"login": "A-M-D-R-3-W",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/84816543?v=4"
},
{
"type": "User",
"login": "dlosie",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/207057?v=4"
},
{
"type": "User",
"login": "Grogger",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/7065068?v=4"
},
{
"type": "User",
"login": "steverhoades",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/1146668?v=4"
}
],
"contributors_sampled": 6,
"top_contributor_share": 0.588
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"pages.yml",
"publish.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 2/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 26 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": 1,
"reason": "dependency not pinned by hash detected -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 9,
"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": "17 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "e5525261c113e0cfc2c760053ccb357f156ee20b",
"ran_at": "2026-07-23T16:08:14Z",
"aggregate_score": 4.2,
"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": null,
"oldest_open_prs": [
{
"number": 62,
"created_at": "2026-06-28T17:14:11Z",
"last_comment_at": "2026-07-04T08:35:21Z",
"last_comment_author": "itayinbarr"
}
],
"last_merged_pr_at": "2026-06-15T18:25:12Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 58,
"created_at": "2026-06-28T03:47:43Z",
"last_comment_at": "2026-07-13T17:59:19Z",
"last_comment_author": "charly1r"
},
{
"number": 61,
"created_at": "2026-06-28T12:35:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 63,
"created_at": "2026-06-28T17:52:11Z",
"last_comment_at": "2026-07-21T20:38:00Z",
"last_comment_author": "johnzan"
},
{
"number": 67,
"created_at": "2026-07-08T14:39:12Z",
"last_comment_at": "2026-07-18T08:41:16Z",
"last_comment_author": "itayinbarr"
},
{
"number": 68,
"created_at": "2026-07-13T20:19:06Z",
"last_comment_at": "2026-07-18T08:41:13Z",
"last_comment_author": "itayinbarr"
},
{
"number": 69,
"created_at": "2026-07-20T10:12:39Z",
"last_comment_at": "2026-07-23T08:24:24Z",
"last_comment_author": "itayinbarr"
},
{
"number": 70,
"created_at": "2026-07-20T10:20:31Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 71,
"created_at": "2026-07-20T21:27:45Z",
"last_comment_at": "2026-07-20T22:35:11Z",
"last_comment_author": "charly1r"
},
{
"number": 73,
"created_at": "2026-07-21T00:02:31Z",
"last_comment_at": "2026-07-21T15:11:40Z",
"last_comment_author": "charly1r"
},
{
"number": 74,
"created_at": "2026-07-22T15:43:15Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/itayinbarr/little-coder",
"host": "github.com",
"name": "little-coder",
"owner": "itayinbarr"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"security": 42,
"vitality": 84,
"community": 63,
"governance": 56,
"engineering": 65
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 84,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 73,
"inputs": {
"commits_last_year": 107,
"human_commit_share": 1,
"days_since_last_push": 5,
"active_weeks_last_year": 13
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "13/52 weeks with commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 13
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "107 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 107
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 26 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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 38,
"latest_release_tag": "v1.11.0",
"releases_from_tags": false,
"days_since_latest_release": 5,
"mean_days_between_releases": 3.3
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "38 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 38
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~3.3 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 3.3
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 63,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "good",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"forks": 118,
"stars": 1830,
"watchers": 13,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1,830 stars",
"points": 52.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 1830
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "118 forks",
"points": 17.2,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 118
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "13 watchers",
"points": 6,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 13
}
}
],
"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": "moderate",
"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": 60,
"inputs": {
"packages": [
"little-coder"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 3860
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "3,860 downloads/month across npm",
"points": 47.8,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 3860,
"ecosystems": "npm"
}
}
],
"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": 56,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 29,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 6,
"top_contributor_share": 0.588
},
"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 59% of commits",
"points": 9.3,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 59
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "6 contributors",
"points": 8.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 6
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 53,
"inputs": {
"merged_prs": 3,
"open_issues": 10,
"closed_issues": 48,
"issue_closed_ratio": 0.828,
"closed_unmerged_prs": 5
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "83% of issues closed",
"points": 38.7,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 83
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "3/8 decided PRs merged",
"points": 14.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 3,
"decided": 8
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 2/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 55,
"inputs": {
"followers": 52,
"owner_type": "User",
"is_verified": null,
"owner_login": "itayinbarr",
"public_repos": 19,
"account_age_days": 4110
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "52 followers of itayinbarr",
"points": 12.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 52,
"login": "itayinbarr"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "19 public repos, account ~11 yr old",
"points": 21.5,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 19
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"little-coder"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 5
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 5 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 5
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "38 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 38
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 65,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"ai-coding-assistant",
"benchmark",
"code-generation",
"coding-agent",
"coding-agents",
"local-llm",
"ollama",
"qwen",
"small-language-models",
"tool-use",
"aider-polygot",
"terminal-bench"
],
"has_wiki": false,
"homepage": "https://itayinbarr.github.io/little-coder/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://itayinbarr.github.io/little-coder/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "12 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 12
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 42,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 42,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 4.2
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 2/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"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 not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 26 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 1",
"points": 0.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "17 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 3
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 73,
"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.97,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 5844
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "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": "97 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 97,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0.83,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "83 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 83,
"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 1",
"points": 1,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 18809,
"source_files_sampled": 109,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/109 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 109,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index npm:little-coder@1.11.0; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-23T16:08:25.797549Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/i/itayinbarr/little-coder.svg",
"full_name": "itayinbarr/little-coder",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}