Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 1447,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 520110,
"Makefile": 593
},
"pushed_at": "2026-07-20T06:46:00Z",
"created_at": "2026-04-11T17:42:41Z",
"owner_type": "User",
"updated_at": "2026-07-20T06:45:33Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "main",
"license_spdx_raw": null,
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "sho",
"type": "User",
"login": "ishii1648",
"company": "@freee",
"location": "Japan",
"followers": 9,
"avatar_url": "https://avatars.githubusercontent.com/u/7684738?v=4",
"created_at": "2014-05-23T23:06:17Z",
"is_verified": null,
"public_repos": 65,
"account_age_days": 4441
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v0.0.21",
"kind": "patch",
"published_at": "2026-07-20T06:46:00Z"
},
{
"tag": "v0.0.20",
"kind": "patch",
"published_at": "2026-07-15T16:34:50Z"
},
{
"tag": "v0.0.19",
"kind": "patch",
"published_at": "2026-07-05T07:05:40Z"
},
{
"tag": "v0.0.18",
"kind": "patch",
"published_at": "2026-06-28T03:31:31Z"
},
{
"tag": "v0.0.17",
"kind": "patch",
"published_at": "2026-05-31T13:17:54Z"
},
{
"tag": "v0.0.16",
"kind": "patch",
"published_at": "2026-05-31T08:52:24Z"
},
{
"tag": "v0.0.15",
"kind": "patch",
"published_at": "2026-05-26T17:09:40Z"
},
{
"tag": "v0.0.14",
"kind": "patch",
"published_at": "2026-05-25T07:55:34Z"
},
{
"tag": "v0.0.13",
"kind": "patch",
"published_at": "2026-05-08T11:45:28Z"
},
{
"tag": "v0.0.12",
"kind": "patch",
"published_at": "2026-05-02T17:04:33Z"
},
{
"tag": "v0.0.11",
"kind": "patch",
"published_at": "2026-05-02T06:01:20Z"
},
{
"tag": "v0.0.10",
"kind": "patch",
"published_at": "2026-04-26T16:01:56Z"
},
{
"tag": "v0.0.9",
"kind": "patch",
"published_at": "2026-04-25T04:56:36Z"
},
{
"tag": "v0.0.8",
"kind": "patch",
"published_at": "2026-04-16T12:14:53Z"
},
{
"tag": "v0.0.7",
"kind": "patch",
"published_at": "2026-04-16T11:15:12Z"
},
{
"tag": "v0.0.6",
"kind": "patch",
"published_at": "2026-04-12T19:15:46Z"
},
{
"tag": "v0.0.5",
"kind": "patch",
"published_at": "2026-04-12T14:47:06Z"
},
{
"tag": "v0.0.4",
"kind": "patch",
"published_at": "2026-04-12T12:55:05Z"
},
{
"tag": "v0.0.3",
"kind": "patch",
"published_at": "2026-04-12T10:16:26Z"
},
{
"tag": "v0.0.2",
"kind": "patch",
"published_at": "2026-04-12T06:37:08Z"
},
{
"tag": "v0.0.1",
"kind": "patch",
"published_at": "2026-04-11T20:07:38Z"
}
],
"recent_commits": [
{
"oid": "8336b6b6f48cc3e25370f580c095accf8c499898",
"body": "fix(layout): sidebar 幅の不安定要因を解消(cleanup経路のrelayout統一・hook拡充・-l 40排除)",
"is_bot": false,
"headline": "Merge pull request #70 from ishii1648/feat/20260720-150851",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:45:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "439ba8bb8fbf5ed240fc05e0cddc1ad3fa9492b5",
"body": "intent(layout): sidebar の横幅が安定しない。herdr/cmux の実装を調査し tmux-sidebar との差分から原因を潰す\nlearned(research): herdr(独自TUI)/cmux(macOS GUI)は tmux 非依存で参考にならず。同方式の workmux (raine/workmux) との差分が hook カバレッジと resize-pane -x 直打ち経路の有無だった\ndecision(cleanup): cleanup-if-only-sidebar の resize-pane -x 直打ちを relayoutOneWindow(\n[…]\n存 e2e が TMUX 環境変数に裸のソケット名を渡しており接続エラー→no-op で偽 pass していた。execTmux ヘルパー(TMUX_SIDEBAR_SOCKET 注入)で隔離を修復\nlearned(doctor): client-resized 検査の needle が '@pane_role' で実際の推奨 hook 文字列と不一致の既存バグを発見、'relayout' に修正",
"is_bot": false,
"headline": "fix(layout): sidebar 幅の不安定要因を解消(cleanup経路のrelayout統一・hook拡充・-l 40排除)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:43:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c202866ad4afe8cac61240797f47b6e6055d76d6",
"body": "picker起動をnew-window化しfable launcherを追加",
"is_bot": false,
"headline": "Merge pull request #69 from ishii1648/feat/20260720-124720",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:40:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd943258adecc90c396018c02964a1673a933e6c",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0029 を起票(先に実装したため close 状態で記録)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:37:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07557de3311f5a062407aec45d7c8a961caea7aa",
"body": "issues/0022で「popup内では入力補完が効かず不便」を理由にnew-window化\nしたが、issues/0025でpicker自体が自由入力のテキストボックスを完全に\n撤廃した(repo選択・branch checkout listともにlistからの選択のみ)ため、\npopupを避ける根拠が構造的に無くなっていた。\n\n既定のframingをdisplay-popupに戻す。new-windowはwindow一覧を汚したく\nない場合やtmux 3.2未満での代替として引き続きサポート(runNewは元々\nframing非依存の設計のためコード変更不要)。internal/doctorのtmux\npopup supportチェックも復活させた。\n\n実機でalt-screen有効のままpopup内でpickerを起動し、開閉時の見た目に\n問題が無いことを確認した。",
"is_bot": false,
"headline": "feat: pickerの既定framingをnew-windowからpopupに戻す (issues/0029)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:37:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2dfdf5e63ce864a48842bf66aaec99dcc7bc3d8e",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0028 を起票(先に実装したため close 状態で記録)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:28:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "24b2c193869196af0b833007b585070cabc88725",
"body": "…es/0028)\n\nTabは2026-06-27の変更以来worktree on/offのper-session toggleだったが、\n「同じユーザがほぼ常に同じlauncherを使う」という当時の前提が、fable\nlauncher追加(issues/0023)以降のclaude/fable使い分けという実運用と\n合わなくなっていた。\n\nTabをlauncher toggle(claude ↔ fable)に戻す。旧来のclaude ↔ codexでは\nなくclaude ↔ fableにしたのは、実際にユーザが使い分けているのがこの\n2つだから。起動時launacherがcodexの場合\n[…]\ntoggleはpickerから撤廃し、常にworktree\nを作成する固定動作にした。~/.config/dispatch/no-worktree-reposによる\nrepo単位の自動off判定とCLIの--no-worktreeは独立した経路のため影響\nを受けない。\n\n実機確認: Tabを押すたびにlauncher chipがclaude→fable→claudeと\n正しく切り替わることを確認。",
"is_bot": false,
"headline": "feat: pickerのTabをworktree on/off toggleからclaude/fable toggleに変更 (issu…",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:28:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8d0cc50bf032272778279250c979f3210198c64b",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0027 を起票(先に実装したため close 状態で記録)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:09:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6e10cc15cd1d424a513474cf234f78ad278511a",
"body": "CreateWorktreeはbranch新規作成判定の直前に必ずgit fetch originを\n実行しているが、直後のbranchExistsRemoteがgit ls-remote --heads origin\nでリモートに再度問い合わせており、fetchで既に得ている情報を無駄に\n再取得していた(計測: fetch 2.556s + ls-remote 2.240s)。\n\nbranchExistsRemoteをgit show-ref --verify refs/remotes/origin/<name>\n(ローカル参照)に変更し、正確性を落とさず1回のネットワーク往復を削減。\ndispatch全体のレイテンシが5.7秒→3.5秒に短縮された。\n\ngit fetch origin自体(残り約2.5秒)を省略する案も検討したが、\n「常に最新のorigin/defaultから分岐する安全性」を優先しユーザの\n判断で現状維持。",
"is_bot": false,
"headline": "perf(dispatch): branchExistsRemoteの重複ネットワーク往復を削除 (issues/0027)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T06:09:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c182a04feac2536cebd8dec1e6d8e202764c86fb",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0026 を起票(先に実装したため close 状態で記録)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T05:59:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86b3a3f1ac1cd3b11a66ac8e888494e9205c0c02",
"body": "tmuxはnew-session -s時に session名中の`.`/`:`(target構文の区切り文字)\nを内部的に`_`へ自動置換するが、Go側のsessionName変数はこれを知らず\n元の文字列を使い続けていたため、後続のswitch-clientが実際には存在\nしないセッション名を参照して失敗していた(例: repo \"Backlog.md\")。\n\nissues/0025でpickerが常にSwitch: trueを立てるようになったことで、\nこの既存バグを日常的に踏むようになっていた。\n\nsanitizeSessionNameを新設し、tmuxが行うのと同じ`.`/`:`→`_`置換を\nLaunch内でsessionName計算直後に適用するよう修正。\n\n実機で MrLesk/Backlog.md を対象にdispatch --switchが成功することを\n確認した。",
"is_bot": false,
"headline": "fix(dispatch): repo名の.や:を含むsession名でswitch-clientが失敗するのを修正 (issues/0026)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T05:59:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06381b6f4c29fa05fa08fc1636b3519f0e255bad",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0025 を起票(先に実装したため close 状態で記録)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T05:50:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23a9da1cec64e2ee3d2c69a508fd00e083de69e2",
"body": "issues/0024でStep2を「prompt入力」から「branch名ヒント入力」に変えたが、\nそれでも実launcher TUIの@file/slash command補完を持たないcustom\ntextareaであることに変わりなく、根本解決になっていなかった。\n\nherdr/manaflow-ai cmuxを再調査した結果、いずれも「作成時に良い名前を\n入力させる」のをやめ、生成は完全自動(空入力可/テンプレート)にして\n後からrenameする設計だった(herdr-plugin-renamerは会話の最初のprompt\nから事後的にbranch名をrenameする)。\n\nこれに倣\n[…]\nmptが完全に不要になったため削除した。\n\n実機確認: repo選択→即Enter→attached clientが新sessionへ自動switch→\n実Claude Code TUIがidle(branch名はtimestampフォールバック、prompt\n未送信)で起動することを確認。`:`でcheckout listが開き既存branchが\n正しく列挙され、Escで復帰することも確認した。",
"is_bot": false,
"headline": "feat: pickerのbranch名ヒント入力を撤廃しcheckout listに置換 (issues/0025)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T05:50:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c908384a80146e41c76dd8d41600ba86ad55ee8e",
"body": "通常は issue 起票 → 実装 → close の順だが、今回はユーザとの議論の\n流れで先に実装まで進めたため、対応方針と解決方法をまとめて closed/\nに記録する。",
"is_bot": false,
"headline": "docs(issues): 0024 を起票(先に実装したため close 状態で記録)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T05:20:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4eb4aae87f07333e2e1f118735a50067e30526f1",
"body": "popup→new-window化(issues/0022)しても「入力補完が効かず不便」は解消\nしなかった。実launcherセッションは元々popup/new-window内では動いておらず、\n不便の実質的な原因はpicker step2が自前のcustom bubbletea textareaで\nあり、実際のclaude/codex/fable TUIが持つ@file補完やslash command補完を\n一切持たないことだった。\n\nherdr/craigsc cmux/workmux/manaflow-ai cmuxを調査した結果、いずれも\n「popup→別セッション」の二段階UIを持\n[…]\nternal/dispatch(CLI /\n/dispatch skill)自体の挙動は変更なし。\n\n実機確認: picker→repo選択→branch名ヒント入力→Enter で、実際に\nattached clientが新sessionへ自動switchし、実Claude Code TUIがidle\n(prompt未送信)で起動、branch名も入力ヒントから適切に生成されることを\n確認した。",
"is_bot": false,
"headline": "feat: pickerのstep2をprompt入力からbranch名ヒント入力に変更 (issues/0024)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T05:20:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b0981b6e847ab62b544d6c29337167515ffb3e3a",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0023 の close 記録(Completed/解決方法)を反映",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T04:39:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "675205d4a31d2da4c910bc2c9fa33d74429a062f",
"body": "dotfiles の fable fish function (Fable 5 メインループ + Sonnet\nsubagent 固定の claude ラッパー) を、claude/codex と並列の第3\nlauncher として選べるようにした。fable は中身が claude そのものであり\nhook も claude hook として飛んでくるため、sidebar/hook 側の agent kind\nは新設せず既存の claude にマップする (writeInitialPaneState)。\n\nTMUX_SIDEBAR_LAUNCHER=fable / ~/.config/tmux-sidebar/launcher で選択\nでき、picker のヘッダーチップにも反映される。dotfiles の fable 関数を\n実機で `fable < promptfile` として起動し、--permission-mode plan 固定\nでも stdin 経由の初期 prompt が正しく渡り、委譲不要な軽微な確認は自律\n的に実行されることを確認した。",
"is_bot": false,
"headline": "feat: dispatch/picker に fable launcher を追加する (issues/0023)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T04:39:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90569e0d3d27406507e743efd60dc5bbe4707b57",
"body": null,
"is_bot": false,
"headline": "docs(issues): 0022 の close 記録(Completed/解決方法)を反映",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T04:34:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "190eaebc8c99c517046f7ad0746251ea88ade932",
"body": "tmux popup 内では入力補完まわりが不便という報告を受け、picker\n(`tmux-sidebar new`) の想定起動方法を display-popup から new-window に\n変更した。runNew 自体は元々 framing に依存しない設計のため、コード側の\n変更は help 文言・alt-screen 有効化・doctor の popup support チェック\n削除にとどまる。alt-screen は new-window では pane mode 同様に有効化\nした方が終了時の画面が綺麗になるため、TMUX_SIDEBAR_NO_ALT_SCREEN ゲート\n付きで有効化した。display-popup で囲む旧来の呼び方も引き続き動作する。\n\ndocs/spec.md・docs/design.md・docs/setup.md を new-window 前提に更新し、\ndocs/history.md に ADR-069 からの方針反転として経緯を追記した。",
"is_bot": false,
"headline": "feat: tmux-sidebar new を new-window 起動前提に変更する (issues/0022)",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T04:23:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe60fbdff70e8868cbfd760307bcc8e8f75931a3",
"body": "dotfilesのfable fish function(Fable 5メインループ+Sonnet subagent固定\nのclaudeラッパー)を、claude/codexと並列の第3launcherとして\ndispatch/pickerから選べるようにする変更案をissue化した。",
"is_bot": false,
"headline": "feat(issues): dispatch/pickerにfable launcherを追加する変更案を起票",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T04:10:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa665ec09e099e6c4958215d98ce077d236c819a",
"body": "tmux popupだと補完まわりが不便という要望を受け、tmux-sidebar new の\n起動経路をdisplay-popupからnew-windowに変更する変更案をissue化した。",
"is_bot": false,
"headline": "feat(issues): popup起動をnew-windowに変更する変更案を起票",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-20T04:10:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f5ac03085fdaacce55f6c84e9391b14732d350be",
"body": "…idebar-window\n\nfix(ui): sidebar 経由の window/session close 反映ラグを解消",
"is_bot": false,
"headline": "Merge pull request #68 from ishii1648/feat/tmux-sidebar-tmux-window-s…",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-07-15T16:34:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a087bb968c8ad8da5fa05b15d7d8a5f9b6191b02",
"body": "直前のコミットで issues/closed/ への git mv 自体は入っていたが、\nCompleted 日付・完了条件チェック・解決方法セクションの追記が working tree に\n残ったままコミットへ反映されていなかったため取りこぼしを解消する。",
"is_bot": false,
"headline": "docs(issues): 0021 の close 記録(Completed/解決方法)を反映",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-15T16:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0fa6b0b6f800b6b989d035b808c10be8a1355c1",
"body": "intent: d/Dキーでのwindow/session kill後、sidebarから対象が消えるまでのラグを解消したい(issue 0021)\ndecision: capture-pane/describe-windowはkill前提のデータ収集のため据え置き、graveyard.Save(atomic write + opportunistic GC)だけをkill実行の後に回す\nrejected(async-goroutine): Save非同期化は自window/session kill時にプロセスがSIGHUPで自壊し退避データを失う競合を生むため見送り。同期のまま順序を入れ替えるだけで目的を達成\nlearned: opportunistic GCはgraveyard.List()でエントリ全件を毎回ReadFile+Unmarshalする O(N) 処理で、これがkill前に同期実行されていたため実際のtmux kill-window発火(window-unlinkedフック→全sidebarへのSIGUSR1伝播)を遅らせていた",
"is_bot": false,
"headline": "fix(ui): kill前のgraveyard永続化(GC込み)をkill後に回してsidebar反映ラグを解消",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-15T16:03:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "215221c4a284b149d8555f4e6d82cef3a5737fad",
"body": "decision: graveyard.Save を KillWindow/KillSession の後段に回す案Aを採用。\ncapture/describe は kill 前提のため据え置き、永続化(書き込み+GC)のみ非同期化する方針。\n実装前に完了条件をチェックリスト化し、自window kill時の競合リスクを明記した。",
"is_bot": false,
"headline": "docs(issues): 0021 に案A採用と完了条件を追記",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-15T15:54:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "01201bac803faa866a80dec217aa3b13972b2fd6",
"body": "graveyard 機能導入(e5007f4)以降、CapturePane/DescribeWindow/graveyard.Save(GC込み)を\nKillWindow実行前に直列実行しているため、window close がsidebarに反映されるまでの\n体感ラグが増加している。原因調査結果と対応方針(候補)をissue化。",
"is_bot": false,
"headline": "bug: sidebar 経由の window close で反映までにラグが生じる issue を追加",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-15T15:51:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d538dd4ee28b81f9751bf660c5f47ad2830ecd9",
"body": "fix(dispatch): fall back to no-worktree for zero-commit repos",
"is_bot": false,
"headline": "Merge pull request #67 from ishii1648/fix/tmux-sidebar-dispatch",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-07-05T07:05:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b828f0bec1f6fe983f42b7351756335803a0d88",
"body": "`git worktree add -b` fails with \"fatal: invalid reference: HEAD\" when\nthe target repo has no commits yet (fresh `git init`, no origin): HEAD\nis unborn and there's no commit to branch off of. Detect this via a\nnew hasCommits check and promote to NoWorktree, mirroring the existing\nno-worktree-repos config fallback so dispatch still starts directly in\nthe main worktree instead of failing silently behind `tmux run-shell -b`.",
"is_bot": false,
"headline": "fix(dispatch): fall back to no-worktree for zero-commit repos",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-07-05T07:03:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "90baa6b39b9ecd60f06ee63e448287dedbb5a29d",
"body": "fix(graveyard): skip sidebar pane when restoring killed window/session",
"is_bot": false,
"headline": "Merge pull request #65 from ishii1648/fix/undo-broken",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-06-28T04:11:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea87d0c576c2fe9c56c76e72cc92a4318bc750b1",
"body": "…tays 40 cols\n\nintent(undo-close): session restore 後にサイドバー幅が広く(~132 cols)表示されるユーザ報告\ndecision(restore-size): new-session に -x/-y で現在の client 幅・高さを渡す(restoreEntry が ClientSize を取って NewSession に転送)\nrejected(post-create-resize): restore 後に sidebar pane を resize-pane -x 40 で叩く案 — after-new-session フックが -\n[…]\nch では走らないので、生成時点で正しいサイズを与えるしかない\nlearned(tmux-layout-scaling): detached new-session が default-size (80x24) で作られると、フックの split-window -l 40 が 50% 比率を残し、後で switch-client したときに比率保存リサイズで sidebar が ~半分の幅に膨れる",
"is_bot": false,
"headline": "fix(graveyard): pass client size to new-session so restored sidebar s…",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-28T04:10:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "057bf21f20e229bb9535d2a62b191a2dc6890b01",
"body": "intent(undo-close): undo した window/session に移動すると作業 pane が消えて tmux-sidebar 起動だけになる、というユーザ報告\ndecision(restore-pane-pick): Panes[0] 固定をやめ、StartCommand != \"tmux-sidebar\" の最初の pane を「作業 pane」として採用\nrejected(capture-time-filter): capture 側で sidebar pane を弾く案 — 既存 graveyard JSON が救えない / capture は raw を保つ責務\n[…]\nr pane を自動で生やすので、graveyard から sidebar pane を復元する必要はない(むしろ二重起動になる)\nlearned(pane-index-ordering): split-window -hfb で生やした sidebar pane のほうが低い pane_index を持ちがちで、Panes[0] は作業 pane ではなく sidebar pane になっていた",
"is_bot": false,
"headline": "fix(graveyard): skip sidebar pane when restoring killed window/session",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-28T03:54:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4d3fc5fc03dd0d789e6589301f98e87d18a10f3b",
"body": "feat(graveyard): undo close for windows/sessions via u key",
"is_bot": false,
"headline": "Merge pull request #63 from ishii1648/feat/session-issue",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-06-28T03:31:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5a41655d113fcf44aee5a66a53c1d05b80ce61c",
"body": "# Conflicts:\n#\tdocs/history.md",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main' into feat/session-issue",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-28T03:07:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "699076bb55c2ac00fe0c044a977c68936a955718",
"body": "…e-code-codex\n\nfeat(picker): tab toggles worktree on/off; launcher fixed by config",
"is_bot": false,
"headline": "Merge pull request #64 from ishii1648/feat/session-git-worktree-claud…",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-06-28T03:06:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c8a199078f5f8d425f84a861dd344d68a7533b0",
"body": "Repurpose the popup picker's Tab key from launcher (claude/codex)\nswitching to a per-session worktree on/off toggle. The launcher is\nnow fixed at popup startup from ~/.config/tmux-sidebar/launcher and\nTMUX_SIDEBAR_LAUNCHER, matching the observation that users rarely\nswitch launchers per session but \n[…]\nng branch.\n\n`:<branch>` checkout-mode and worktree off are mutually exclusive\n(the former requires worktree creation); the picker rejects the\ncombination before spawning dispatch.\n\nCloses issues/0020.",
"is_bot": false,
"headline": "feat(picker): tab toggles worktree on/off; launcher fixed by config",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-27T13:56:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "92ad3d0e8090a7ac87e3fc6d3fa887da1783234c",
"body": "Replace the popup picker's Tab launcher-toggle with a per-session\nworktree on/off toggle, and fix the launcher selection to the\nlauncher config / TMUX_SIDEBAR_LAUNCHER env.",
"is_bot": false,
"headline": "docs(issues): add 0020 — tab toggles worktree on/off in picker",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-27T13:56:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc802109b4986d021912b1450c337e64ecaca138",
"body": "intent(issue-tracking): 直前コミットでファイルを git mv したが本文変更(Completed 日付・checklist チェック・解決方法セクション)が staged されていなかったので追加コミット",
"is_bot": false,
"headline": "docs(issues): record 0006 完了内容 — Completed / 解決方法",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-27T13:12:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0af361e5e5fb06eb0a85d9867f51c9c247ee3f89",
"body": "intent(issue-tracking): 0006 完了に伴い Completed と解決方法を追記、closed/ へ移動。実装の詳細は直前コミット(feat(graveyard): undo close ...)と docs/history.md「Undo close(軽量復元)の採用(2026-06-27)」を参照",
"is_bot": false,
"headline": "docs(issues): close 0006 — undo close 軽量復元を実装",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-27T13:10:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5007f4796c3b1d8252e335fafa50e1ea6e8b505",
"body": "intent(undo-close): 誤って閉じた window / session を「サイドバーから戻せる」レベルの安心感を出したい。capture-pane の静的 scrollback dump だけでは agent context を失う恐怖を消せず、issue 0006 として reopen していた要望に対応\ndecision(scope): 構造復元のみ — session/window 名・先頭 pane の cwd・先頭 pane の起動コマンドまで。layout / 追加 pane / scrollback / running agent の進行状態は v1 では復元し\n[…]\n kill 自体は止めない。退避エラーは UI に出さず、JSON 側だけは少なくとも書き残す\nlearned(window-layout-format): #{window_layout} 文字列は pane 番号(pane_id の数値部分)を含むため、別 session で同じ文字列を流し込んでも tmux が拒否する。layout 復元はパース→renumber→Format の往復が必要",
"is_bot": false,
"headline": "feat(graveyard): undo close for windows/sessions via u key",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-27T13:10:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "96142b3e3778ae519ef7567a7cbf527812744f13",
"body": "fix: GC stale pane state files on reload to fix kill lag",
"is_bot": false,
"headline": "Merge pull request #62 from ishii1648/feat/window-or-session-sidebar",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-06-09T14:29:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adb18e0113bf7127186c06d330753b0e32c2e58a",
"body": "Closes 0019. /tmp/agent-pane-state accumulates one file per past pane\nbecause hooks have no post-death cleanup hook. Read() then pays O(total\nfiles) ReadFile syscalls per reload, slowing kill response and every\nfsnotify-driven refresh.\n\nReader gains ReadAndGC(live) which unlinks pane_N* files whose \n[…]\nsting ReadDir scan. loadData passes\nthe set built from tmux ListAll; loadStateOnly stays GC-free and relies\non the new 80ms fsnotify debounce in main.go to fold hook write bursts\ninto a single reload.",
"is_bot": false,
"headline": "fix: garbage-collect stale pane state files on reload",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-09T14:19:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "aff90a1f31f753fa9fdf264b377411067264dbad",
"body": null,
"is_bot": false,
"headline": "docs(issues): add 0019 — state file GC on reload to fix kill lag",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-09T14:07:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3cfb4eec05731aa607ffb7f0607cce2fb22238d8",
"body": "fix: running 経過時間が中断ターンを跨いで累積する問題を修正 (issues/0018)",
"is_bot": false,
"headline": "Merge pull request #61 from ishii1648/feat/running-idle-running",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-06-03T05:45:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c28bc703332ef5b76641833a7889c0aaa882a501",
"body": "…pted turns",
"is_bot": false,
"headline": "docs(issues): close 0018 — running elapsed accumulates across interru…",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-03T02:01:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8b83dc97e724b071237949a2b292f1f17c92d20",
"body": "running 経過時間の起点 pane_N_started が Stop hook の --reset でしか\nクリアされず、Esc 中断やクラッシュで Stop が発火しないとターンを跨いで\n起点が残り、次のターンの running が古い起点を引き継いで経過時間が累積、\n巨大な値(実機で 256 分)を表示していた(issues/0018)。\n\nintent: ターン開始(新しいユーザ入力)を確実な境界として起点を張り直し、\n中断・クラッシュに構造的に強くする(案 A2)。\ndecision: hook の --reset を status 依存にし、running --reset で\n\n[…]\nヘルプ/コメントを二境界に更新\n- docs(setup/design/spec): UserPromptSubmit 再アンカーを反映\n- docs(history): 前提反転と却下案を append\n- tests: hook 再アンカー / doctor 必須化・欠落検出 / e2e 中断後再アンカー\n\nScope: Claude のみ(Codex は issue 0013 の方針を継続)",
"is_bot": false,
"headline": "fix: re-anchor running elapsed clock at turn start via UserPromptSubmit",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-03T02:01:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bcf57d8752974093bf3fa9664267d579105ba493",
"body": "…ed turns",
"is_bot": false,
"headline": "docs(issues): add 0018 — running elapsed accumulates across interrupt…",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-06-02T09:51:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f3649bc0a21a4bd616423d14d7971e4f8d0784f",
"body": "fix: evict stale PR badge when window path no longer resolves",
"is_bot": false,
"headline": "Merge pull request #60 from ishii1648/feat/pr-status",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-31T13:17:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f81d4caa88dd41484408ac26cdf11d740d8fd9d",
"body": null,
"is_bot": false,
"headline": "docs(issues): close 0017 — stale PR status on deleted worktree",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T13:11:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9d7bb69b54ccec4b36b6ea92ceba92c2bdd2bf9",
"body": "A window whose pane cwd points at a deleted worktree (common after merging\nand removing the worktree) keeps returning an empty gitInfo, which the\nmerge-only gitDataMsg never overwrote — so a pre-merge PR badge (draft/open)\nlingered indefinitely. loadGitInfo now reports such visible windows as stale\nand the handler evicts them from gitData; filtered-out windows are untouched.",
"is_bot": false,
"headline": "fix: evict stale PR badge when window path no longer resolves",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T13:11:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "827f9ce026e1eebdcc986ffe3dd123c87a4f9dc0",
"body": null,
"is_bot": false,
"headline": "docs(issues): add 0017 — stale PR status on deleted worktree",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T13:08:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6be6af19ef2bb12aa81f8bc9b582aa94227fd4ef",
"body": "fix: preserve claude running elapsed across per-tool idle",
"is_bot": false,
"headline": "Merge pull request #59 from ishii1648/feat/running",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-31T08:50:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a69f746c8c590d05d7558fbb79ae300d63b4f9f",
"body": "実 tmux + 実バイナリの hook サブコマンドで Claude の 1 ターン\n(PreToolUse/PostToolUse=running を tool ごと → Stop=idle --reset) を再現し、\nサイドバーがターン中 running バッジを維持し経過時間を保持すること、Stop で\nバッジが消え pane_N_started が削除されること、次ターンで起点が再生成される\nことを検証する。",
"is_bot": false,
"headline": "test(e2e): verify claude turn keeps running badge via hook subcommand",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T08:48:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a79fbdfd947032420cf905b59a00d2e4e20551d4",
"body": null,
"is_bot": false,
"headline": "docs(issues): close 0016 — claude running badge flicker fix",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T07:15:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5799364ae61e5fcc245e914af44677184dbdcd2e",
"body": "PostToolUse を idle から running に変更。Claude の 1 ターンは tool 実行と\n応答生成を行き来するが全体が作業中なので、tool 完了ごとに idle に戻すと\nバッジが flicker し、d/D の confirm 強度も running 中なのに単純確認になる。\n\nPostToolUse→running なら tool 間もバッジが安定し、Notification で書いた\npermission(💬) も tool 完了時に running へクリアされる。idle は Stop のみ。\n\n- doctor: Claude PostToolUse \n[…]\nrunning に変更。upsertHookGroup の\n 置換を canonical 以外の tmux-sidebar hook 全除去に強化し idle→running の\n status 跨ぎ移行で重複させない\n- docs(spec/design/history/setup): ターン中=running の方針と option2→3 の反転を記録\n\nRefs: issues/0016",
"is_bot": false,
"headline": "fix: keep claude running badge stable across tool boundaries",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T07:15:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5f21fb9c584586bd9049742a4512cf12919c0a1a",
"body": "…n tools",
"is_bot": false,
"headline": "docs(issues): add 0016 — claude running badge flickers to idle betwee…",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T07:12:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "804648358ff8af3596e196d96850010a95452109",
"body": "review-loop round1 (codex) の指摘対応:\n- canonical 判定を substring から正規化厳密比較に変更。PostToolUse(claude)\n に紛れた --reset を mismatch として検出・自動修正する\n- isStaleCodexPostToolUse を hookCmdParts ベースに変更し、--reset 付き等の\n flag/kind 変種も stale として検出する",
"is_bot": false,
"headline": "fix(doctor): detect stray --reset on PostToolUse via exact match",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T06:51:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2eef8260c86726def7f74525e2134c9b2cdd71ff",
"body": null,
"is_bot": false,
"headline": "docs(issues): close 0015 — claude running elapsed reset fix",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T06:46:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9f6fe60d5eefde87e0d4dd7034e20519338e021",
"body": "Claude の推奨 hook は PostToolUse で idle を書くため、1 ターン中の\nrunning→idle→running を跨ぐたびに pane_N_started が現在時刻にリセットされ、\nrunning バッジの経過時間が tool ごとに 0s に戻っていた。\n\npane_N_started を「直前が running のときだけ保持」から「ファイルが無いとき\nだけ作成」へ変更し、ターン終了 (Stop) の hook が --reset で明示的に削除する\n方式にした。これにより経過時間が 1 ターンを通して累積する。\n\n- main.go: hook サブコマンドに --reset を追加\n- doctor: Claude/Codex の Stop hook を --reset 付きに更新し、旧 hook idle を\n 同一 (status,kind) 置換で upgrade(重複させない)\n- docs(spec/design/history/setup): 経過時間のライフサイクルと設計反転を記録",
"is_bot": false,
"headline": "fix: preserve claude running elapsed across per-tool idle",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T06:46:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ece8233435285f4ed4f9f1522809e985262e668c",
"body": null,
"is_bot": false,
"headline": "docs(issues): add 0015 — claude running elapsed resets on each tool",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-31T06:36:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "644c424e2d93f143c3aeff45a3eb049c350eccea",
"body": "fix: authenticate GitHub releases API request in upgrade",
"is_bot": false,
"headline": "Merge pull request #58 from ishii1648/fix/upgrade-github-api-auth",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-25T16:55:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca28a5821bdd8c5fcbfa57fec1a081a91bf42b32",
"body": "後追いで PR #58 に対応する issue を closed として記録する。",
"is_bot": false,
"headline": "chore: add closed issue for upgrade github api auth fix",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-25T16:53:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb3eab2f9c6217aec497a3568c0d619c8bc46273",
"body": "Unauthenticated requests to api.github.com share a 60 req/h limit per IP,\nwhich causes 'tmux-sidebar upgrade' to fail with 403 'API rate limit\nexceeded' (x-ratelimit-limit: 60, x-ratelimit-remaining: 0) on shared NAT\nor after a few retries. Switch fetchLatestRelease from http.Get to\nhttp.NewRequest + DefaultClient.Do, set the standard GitHub headers\n(User-Agent, Accept), and attach 'Authorization: Bearer <token>' when\nGITHUB_TOKEN or GH_TOKEN is set (GITHUB_TOKEN wins).",
"is_bot": false,
"headline": "fix: authenticate GitHub releases API request in upgrade",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-25T16:47:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81152162999940cae76e521fe4a192479f3ba97d",
"body": "fix: stabilize codex sidebar badges",
"is_bot": false,
"headline": "Merge pull request #57 from ishii1648/feat/codex",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-25T14:37:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa24d3323b88311ac338c7f8a52cd350f6a167a9",
"body": null,
"is_bot": false,
"headline": "chore: add issue for codex badge stability",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-25T14:30:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "375a29b3dbe6fecbb5913209a9f11da213a87221",
"body": null,
"is_bot": false,
"headline": "fix: preserve running badge elapsed time",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-25T14:11:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f3760d766addd83c493c5da42e3c09f6cf7436c2",
"body": null,
"is_bot": false,
"headline": "fix: stabilize codex sidebar badges",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-25T11:13:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2a47325bb8bdcaba58af362f3c463375c842ddbc",
"body": "feat(picker): configure default launcher via file and env var",
"is_bot": false,
"headline": "Merge pull request #56 from ishii1648/feat/claude-codex-config",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-23T07:32:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecc64a639329ac083c34ee0156e26125a8deab05",
"body": "… note",
"is_bot": false,
"headline": "docs(issues): record 0012 — launcher default config as after-the-fact…",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-23T07:24:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8477911613e70d8da459843ec0d6c821375f5435",
"body": "popup picker の初期 launcher を `~/.config/tmux-sidebar/launcher` または\n`TMUX_SIDEBAR_LAUNCHER` で指定できるようにする。env > file > 既定の claude\nの順で解決し、不正値は無視。`Tab` での実行時切替は従来どおり。",
"is_bot": false,
"headline": "feat(picker): configure default launcher via file and env var",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-23T07:24:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f8c2fb7f2cc33b05dbcb16b10a89d66d0165c65",
"body": "docs(issues): reopen #0006 with reduced scope — lightweight undo close",
"is_bot": false,
"headline": "Merge pull request #55 from ishii1648/feat/tmux-window-session-issue",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-21T01:23:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "866795c79d21b86cf62aaa6acc69d94c4b645ee5",
"body": "scrollback 完全復元を scope から外し、誤削除リカバリ用途に絞った\n軽量 undo(session/window の構造 + 名前 + cwd + 起動コマンド + layout\nの復元)へ scope を縮小して active に戻す。完全復元は history §105 通り\n別レイヤ責務として scope 外を維持。",
"is_bot": false,
"headline": "docs(issues): reopen #0006 with reduced scope — lightweight undo close",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-20T07:55:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a720721f13d2793a22f5e375318bec52b381bcbb",
"body": "…e-notification\n\ndocs(issues): register #0011 — Claude Code permission_prompt hook regression",
"is_bot": false,
"headline": "Merge pull request #53 from ishii1648/feat/issues-0011-bug-claude-cod…",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-16T03:51:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9385fc06891fac1b865c3e5f3063dbdb96a116eb",
"body": "intent(issue-0011): record that the permission_prompt hook breakage is an upstream Claude Code regression so future sessions don't re-investigate the sidebar side\nlearned(claude-code-versions): bisected on 2026-05-16 — 2.1.138/2.1.140 fire correctly, 2.1.141/2.1.142 do not; regression boundary is 2.\n[…]\neartbeat hypothesis in the upstream issue\ndecision(issue-0011): keep open and pursue fallback (option C) in parallel — even after upstream fix lands, a version-independent state source is worth having",
"is_bot": false,
"headline": "docs(issues): mark #0011 root cause as upstream claude-code#58909",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-15T17:43:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "85d5d4d5a950b6d7af2c80e1924f23642fe5d2f5",
"body": "investigate: claude-code Notification event not firing for permission UI",
"is_bot": false,
"headline": "Merge pull request #52 from ishii1648/feat/permission-wait-running",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-15T16:15:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f4eae1ddc7bf634f11ac433660aab37a2c9c097",
"body": "…ssion UI",
"is_bot": false,
"headline": "docs: file issue 0011 — claude-code notification not firing for permi…",
"author_name": "sho ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-15T11:05:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d0d86c5bf607312da928102f948fc20b7eb7d96",
"body": "…es-iUw0e\n\ndesign: file issue 0007 — rethink `claude -p` branch naming vs Agent View auto-naming",
"is_bot": false,
"headline": "Merge pull request #51 from ishii1648/claude/update-deprecated-featur…",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-13T13:06:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac41e8e854002e7b3f12e530cfbedbd094571841",
"body": "…and history.md\n\nAdd \"Agent View (`claude agents`) との分担\" section to docs/spec.md after the tmux-native-coexistence section, declaring `tmux-sidebar new` = repo-crossing dispatcher and `claude agents` = in-repo dispatcher with a usage cheatsheet and a non-conflict table. Append the policy decision to\n[…]\nistory.md: keep current mechanisms during the research preview, minimum conflict avoidance only, with explicit re-evaluation triggers (GA, schema stability, `@<host>/<owner>/<repo>` resolution, etc.).",
"is_bot": false,
"headline": "design: close 0010 — document Agent View dispatcher split in spec.md …",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T01:31:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "142fb7ba7191c5c33e40b644d99b045b89d0ba07",
"body": "Adopt case D (差別化を spec に明文化) and reject cases A/B/C. Code stays unchanged; spec.md gains a \"Agent View との分担\" section declaring tmux-sidebar new = repo-crossing dispatcher, claude agents = in-repo dispatcher. Aligns with #0007〜#0009 pending decisions: keep current mechanisms, minimum conflict avoidance only, re-evaluate post-GA.",
"is_bot": false,
"headline": "design: commit 0010 to case D — document the dispatcher split in spec.md",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T01:27:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7327d73243fa47fbe059769518ba3b2230c7c3b2",
"body": "…son schema is stable\n\n`~/.claude/jobs/<id>/state.json` and `daemon/roster.json` are not documented as stable APIs yet. Current hook flow treats Claude and Codex symmetrically through `pane_N`, with no resource conflict against Agent View. Hold the migration until schema stability is announced.",
"is_bot": false,
"headline": "design: pending 0009 — keep hook-based state until Agent View state.j…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T01:26:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82e26c2c4ae4766a78a54946eac128ba559cddc8",
"body": "…nt View stability\n\nResearch preview status, unstable `claude --bg` output schema, interactive-accept requirement for `bypassPermissions`/`auto`, and `disableAgentView` opt-out all argue against migrating now. Preserve launcher symmetry (Claude/Codex), tmux native integration, and ghq cross-repo dispatch by staying on current model.",
"is_bot": false,
"headline": "design: pending 0008 — keep tmux-session claude launcher; observe Age…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T01:25:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4283353fbf7cbcae6d237ed8cc604ea37f40bcbb",
"body": "…nging `claude -p` naming\n\nAgent View is still research preview; `claude -p --model <haiku>` flag stability and an API to read Agent-View-generated session names from outside are both unconfirmed. Keep `ClaudeNamer` → slugify as-is and revisit after GA / public API guarantees.",
"is_bot": false,
"headline": "design: pending 0007 — observe Agent View research preview before cha…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T01:25:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b678a325f4bce7b7aba30b9e7b37a119fd3f8f67",
"body": "The existing rule was a one-liner that's easy to skim past, especially when GitHub MCP tools are advertised in the environment. Make the prohibition explicit so future sessions don't reach for `gh issue create` / `mcp__github__issue_write` when the user says \"issue を追加して\".",
"is_bot": false,
"headline": "docs: spell out that issues live under `issues/` only, never GitHub",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T00:59:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9d212f48dac600707e7dec1414468779b6c10f1",
"body": "Agent View's bottom input now dispatches background sessions and accepts `@<repo>`, `/<skill>`, `@<agent>`, image paste, and Shift+Enter attach. Our `tmux-sidebar new` popup overlaps heavily for the Claude launcher path; ghq, codex, `:<branch>` checkout, and dup-session switch remain unique. File an issue to decide whether to specialise the picker, wrap `claude --bg`, or simply document the split.",
"is_bot": false,
"headline": "design: file issue 0010 — popup picker vs Agent View dispatch input",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T00:58:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48eae2865e239d4bfdb64204d5ffd30d30f71c81",
"body": "…/state.json` instead of pane hook\n\nAgent View's supervisor writes per-session state to `~/.claude/jobs/<id>/state.json` and a roster to `~/.claude/daemon/roster.json`. Our hook-based `/tmp/agent-pane-state/pane_N` flow duplicates that for Claude and forces users to wire up `tmux-sidebar hook`. File an issue to decide whether to keep, augment, or replace the hook path for Claude (Codex stays on hooks).",
"is_bot": false,
"headline": "design: file issue 0009 — read Claude state from `~/.claude/jobs/<id>…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T00:58:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f09f078923a6cedde670eef28c21fd0cb511c876",
"body": "… `claude --bg` supervisor model\n\nAgent View introduced `claude --bg`, supervisor-hosted background sessions, and auto-worktrees under `.claude/worktrees/`. Our dispatch engine spawns claude inside a tmux pane, which duplicates those mechanisms and ties claude to tmux lifetime. File an issue to decide between status quo, full migration, hybrid `--bg` opt-in, or removing the claude launcher entirely.",
"is_bot": false,
"headline": "design: file issue 0008 — reconcile `dispatch --launcher claude` with…",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T00:57:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dfc45d63bff3b9b80f7972792cc3395334e9cc95",
"body": "…View auto-naming\n\nClaude Code v2.1.139+ ships Agent View which auto-names background sessions with a Haiku-class model. internal/dispatch/branch.go's ClaudeNamer shells out to `claude -p` for the same kind of short-summary task. File an issue to decide whether to drop the LLM naming, switch to Haiku, or delegate to Agent View entirely.",
"is_bot": false,
"headline": "design: file issue 0007 — rethink `claude -p` branch naming vs Agent …",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-05-13T00:56:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d9757a04ae29dc5dc65d88514c4dc99b28f3870f",
"body": "docs(readme): ASCII スケッチを実機キャプチャに差し替え",
"is_bot": false,
"headline": "Merge pull request #50 from ishii1648/feat/readme-md-capture",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:44:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ed82560c12f32d57e804b5fde31e353cb27cffe",
"body": "Subcommands / keyboard shortcuts / state badges / environment vars /\nconfiguration files の各テーブルは docs/spec.md / docs/setup.md と\n内容が重複し、README 側で改修するたび二重管理になっていた。\nREADME はプロジェクト概要 + hero capture + Required tools +\nInstallation + Setup の入口だけに絞り、詳細は spec.md / setup.md /\ndesign.md / history.md にリンクで誘導する。",
"is_bot": false,
"headline": "docs(readme): trim to essentials, delegate detail to docs/",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:42:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4fbb4102b61474486bef647c90f7c8a00d1ac99",
"body": "`tmux-sidebar new` の挙動を text 説明だけでは伝えづらいので、\nsidebar 画像と並べて popup picker の screenshot を冒頭に追加。",
"is_bot": false,
"headline": "docs(readme): add tmux-sidebar new popup picker capture",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:39:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62d546f6c1365c8d01f9113a41eaefb074e8eb0b",
"body": "ASCII の擬似レイアウトより実機 screenshot のほうが、\nagent タグ・状態バッジ・pin・現在ウィンドウのハイライトといった\n視覚情報を一目で伝えられるため差し替え。",
"is_bot": false,
"headline": "docs(readme): replace ASCII layout sketch with real terminal capture",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:34:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b267cf87195b043946c7ff8f1a2e13e78d32782",
"body": "…7-110000-docs\n\ndocs: retire TODO.md, migrate rationale to history.md",
"is_bot": false,
"headline": "Merge pull request #49 from ishii1648/feat/https-caddi-tech-2026-04-0…",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:08:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d00b4062dd6e4b27d1b20aa9dbd3acf4ea8a1a17",
"body": "The deleted TODO.md had two items explicitly marked \"保留\" (held) rather\nthan rejected: session MRU auto-sort (UX clash with cursor-follow logic)\nand full undo-close (waiting on tmux-resurrect integration design).\nBurying them in history.md alone leaves them undiscoverable as\nforward-looking work, so \n[…]\ne rejections with rationale and\ncorrectly stay in history.md (CLAUDE.md mandates that). gg/G is\nborderline — \"実需が出れば追加\" is demand-driven, not blocked on\nanything specific, so it stays in history-only.",
"is_bot": false,
"headline": "docs(issues): register MRU sort and undo-close as pending issues",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:07:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c237cbd55f1167cd1126460d5fca1151b6c7a93d",
"body": "Template entries should only describe shape with parenthetical prose\n(matching existing 概要/根拠/対応方針/解決方法 entries). The concrete\nsample data (picker.go file paths, specific checklist tasks) was leaking\nissue 0001's content into CLAUDE.md, which is meta-guidance, not a place\nfor project-specific examples.",
"is_bot": false,
"headline": "docs(issues): drop concrete examples from template placeholders",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:06:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f89a61b4e48b9ddb206e1b0dfdf0e262026cf32",
"body": "Two new optional sections in the issue template, slotted between 対応方針\nand 解決方法. They're for non-trivial issues only — explicit \"(任意)\"\nqualifiers prevent template bloat on one-line bug fixes.\n\nInspired by the caddi.tech Usecase Design Doc article: forward-looking\nimplementation artifacts (change-loca\n[…]\nsign doc itself so AI agents can pick up the work without\nneeding the human to reconstruct intent each time. Note added that they\nshould be written before implementing, not retrofitted after the fact.",
"is_bot": false,
"headline": "docs(issues): add optional 変更箇所 / 実装チェックリスト sections",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:06:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6aa3721d23401b7a42f943bff7dfca586ac2f451",
"body": "Phase 1–5 are all complete and the deferred-features table is either\ncovered by existing history.md sections or now appended for the two\nuncovered items (server boundary control, MRU auto-sort). The rationale\nordering block was redundant with §238 / §280 phase renumbering history.\n\nAligns the doc layout with CLAUDE.md's 3-pillar rule (spec / design /\nhistory) + issues/, removing the orphan TODO.md outside the structure.",
"is_bot": false,
"headline": "docs: retire TODO.md, migrate rationale to history.md",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T11:06:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "398ee665b3c4ef46b934149933fd67b4fec296ca",
"body": "fix(picker): tmux-sidebar new のプロンプト入力で左右キーが効かない問題を修正",
"is_bot": false,
"headline": "Merge pull request #48 from ishii1648/feat/tmux-sidebar-new",
"author_name": "sho",
"author_login": "ishii1648",
"committed_at": "2026-05-08T10:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce88e1bf9863f8f07e84cf63430b63e07fe99fe8",
"body": null,
"is_bot": false,
"headline": "docs(issues): close #0004 — prompt cursor low-contrast block",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T10:22:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae02f966a766990d53b55895e33156fc390c3c5c",
"body": "…everse-video\n\nreverse-video was font-independent (the goal of the prior fix) but theme-dependent: on a transparent / low-contrast dark background the inverted cell looked nearly identical to its neighbours, so the cursor was effectively invisible even though the rune at it stayed legible.\n\nSwitch s\n[…]\ner(\"\\x00\")` itself, so the helper keeps working when the configured colour profile picks 4-bit (`\\x1b[44m`) instead of 256-colour or RGB. Existing assertions for `<X>` cursor markers continue to pass.",
"is_bot": false,
"headline": "fix(picker): paint block cursor with explicit blue/white instead of r…",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T10:22:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fe3867c02fe7597e149c8b993c95afe69e7e56c2",
"body": null,
"is_bot": false,
"headline": "docs(issues): register #0004 for prompt cursor low-contrast block",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T10:21:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "272e854cd6d9c7f1a9def560174aed766e34cba9",
"body": null,
"is_bot": false,
"headline": "docs(issues): close #0003 — prompt cursor hiding next rune",
"author_name": "Sho Ishii",
"author_login": "ishii1648",
"committed_at": "2026-05-08T10:15:07Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 21,
"commits_last_year": 286,
"latest_release_at": "2026-07-20T06:46:00Z",
"latest_release_tag": "v0.0.21",
"releases_from_tags": false,
"days_since_last_push": 1,
"active_weeks_last_year": 13,
"days_since_latest_release": 1,
"mean_days_between_releases": 8.7
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": false,
"has_contributing": false,
"health_percentage": 28,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "github.com/ishii1648/tmux-sidebar",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/ishii1648/tmux-sidebar",
"is_deprecated": false,
"latest_version": "v0.0.21",
"repository_url": "https://github.com/ishii1648/tmux-sidebar",
"versions_count": 22,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-20T06:45:25Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [
{
"date": "2026-06-20",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_stars": 1
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 78835,
"source_files_sampled": 39,
"oversized_source_files": 2,
"agent_instruction_files": [
"CLAUDE.md",
"issues/CLAUDE.md"
],
"agent_instruction_max_bytes": 3686
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/charmbracelet/bubbletea",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.10"
},
{
"name": "github.com/charmbracelet/lipgloss",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.1.0"
},
{
"name": "github.com/fsnotify/fsnotify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.0"
},
{
"name": "github.com/mattn/go-runewidth",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.16"
},
{
"name": "github.com/muesli/termenv",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.16.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 63,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 4,
"closed_unmerged_prs": 3
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "ishii1648",
"commits": 276,
"avatar_url": "https://avatars.githubusercontent.com/u/7684738?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.965
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 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": 10,
"reason": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/5 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 9,
"reason": "1 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "8336b6b6f48cc3e25370f580c095accf8c499898",
"ran_at": "2026-07-21T18:44:42Z",
"aggregate_score": 3.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/ishii1648/tmux-sidebar",
"host": "github.com",
"name": "tmux-sidebar",
"owner": "ishii1648"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"security": 39,
"vitality": 80,
"community": 15,
"governance": 59,
"engineering": 67
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 80,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 73,
"inputs": {
"commits_last_year": 286,
"human_commit_share": 1,
"days_since_last_push": 1,
"active_weeks_last_year": 13
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "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": "286 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 286
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 21,
"latest_release_tag": "v0.0.21",
"releases_from_tags": false,
"days_since_latest_release": 1,
"mean_days_between_releases": 8.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "21 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 21
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~8.7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 8.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 15,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "at_risk",
"name": "Community health",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"has_readme": true,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"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": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 59,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 18,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.965
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 96% of commits",
"points": 0.8,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 96
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 83,
"inputs": {
"merged_prs": 63,
"open_issues": 0,
"closed_issues": 4,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 3
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "63/66 decided PRs merged",
"points": 36.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 63,
"decided": 66
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/5 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": 53,
"inputs": {
"followers": 9,
"owner_type": "User",
"is_verified": null,
"owner_login": "ishii1648",
"public_repos": 65,
"account_age_days": 4441
},
"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": "9 followers of ishii1648",
"points": 7.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 9,
"login": "ishii1648"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "65 public repos, account ~12 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 65
}
},
{
"code": "account_age_years",
"params": {
"years": 12
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/ishii1648/tmux-sidebar"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 1
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 1 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 1
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "22 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 22
}
}
],
"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": 67,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 39,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": null,
"notes": [],
"value": 39,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 3.9
},
"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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/5 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 76,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.99,
"agent_instruction_files": [
"CLAUDE.md",
"issues/CLAUDE.md"
],
"agent_instruction_max_bytes": 3686
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md, issues/CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md, issues/CLAUDE.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": "99 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 99,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 97,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 78835,
"source_files_sampled": 39,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/39 source files over 60KB",
"points": 52.2,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 39,
"oversized": 2
}
}
],
"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": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-21T18:44:57.527012Z",
"schema_version": "0.23.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/i/ishii1648/tmux-sidebar.svg",
"full_name": "ishii1648/tmux-sidebar",
"license_state": "absent",
"license_spdx": null
}