Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 15:11 UTC

ysxdyt-001 / claude-capture

Capture and inspect Claude Code ↔ Anthropic HTTP traffic via mitmproxy, with a built-in viewer UI

TypeScript · JavaScript · CSSMIT★ 2 Sterne⑂ 0 Forksseit Juli 2026Auf GitHub ansehen ↗

ysxdyt-001/claude-capture erreicht einen Gesundheitsindex von 52 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei AI Readiness (81/100) ab, am schwächsten bei Security (26/100). Zuletzt vor 7 Tagen aktualisiert.

52
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

52
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

ysxdyt-001Persönliches Konto
0 Follower1 öffentliches Reposeit Juli 2026

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmclaude-capture1.0.02.97318vor 5 Tagenclaudeclaude-codemitmproxyanthropiccapturedebugproxyinspector

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

69Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 7 Tagen
2.1/36Commit-Rhythmus — 3/52 Wochen mit Commits
18/18Commit-Volumen — 138 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year138
human_commit_share1
days_since_last_push7
active_weeks_last_year3
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 5 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 11 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count5
latest_release_tagv0.8.1
releases_from_tagsja
days_since_latest_release11
mean_days_between_releases1,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

32Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars2
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
46.3/80Downloads pro Monat — 2.973 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesclaude-capture
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.973
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

61Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues1
issue_closed_ratio1
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
0/25Reichweite des Inhabers — 0 Follower von ysxdyt-001
2.3/25Kontohistorie — 1 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers0
owner_typeUser
is_verified
owner_loginysxdyt-001
public_repos1
account_age_days16
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 18 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesclaude-capture
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

60Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

26Kritisch · 16 % des Gesamtindex

Sicherheitslage

26Kritisch
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

81Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes6.886
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — web/tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 87 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsweb/tsconfig.json
agent_commit_share0,87
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/36 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes24.939
source_files_sampled36
oversized_source_files0

Eckdaten

2GitHub-Sterne
-Mitwirkende
138Commits, letzte 12 Monate
7Tage seit letztem Push
5Releases
-Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Contributor list unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:claude-capture@1.0.0; advisories assessed against the repository dependency graph instead

Weitere Details

OpenSSF Scorecard 2.6 / 10
2.6Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-22 15:11 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 2
RegistryPaketVersionsvorgabeManifest
npmreact^18.3.1web/package.json
npmreact-dom^18.3.1web/package.json
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 423,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 35801,
        "HTML": 663,
        "Python": 7330,
        "JavaScript": 45368,
        "TypeScript": 111212
      },
      "pushed_at": "2026-07-15T13:29:18Z",
      "created_at": "2026-07-06T14:17:56Z",
      "owner_type": "User",
      "updated_at": "2026-07-15T13:30:50Z",
      "description": "Capture and inspect Claude Code ↔ Anthropic HTTP traffic via mitmproxy, with a built-in viewer UI",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "JavaScript",
        "CSS"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "ysxdyt-001",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/300509869?v=4",
      "created_at": "2026-07-06T14:16:00Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 16
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2026-07-11T13:51:59Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-07-11T13:42:44Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-07-07T13:55:12Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-07-07T13:46:56Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-07-06T16:31:42Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "6ae0c964175c5374ef5262d884ce69dc5827e79e",
          "body": "Feature release: OpenAI-spec capture support in the viewer. Boundary\nnormalization layer translates /chat/completions and /completions captures\ninto the existing Anthropic-shape internal model at /api/file load time.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.10.0",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T13:29:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "204f3e7116c6d5f7bb9fcfbcfb9b81d7d3e9323a",
          "body": "OpenAI-spec capture support in the viewer: boundary normalization translates\n/chat/completions and /completions captures into the existing Anthropic-shape\ninternal model at /api/file load time, so all tabs render correctly with no\naddon or orchestrator changes.",
          "is_bot": false,
          "headline": "Merge branch 'feat/openai-completions-support'",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T13:28:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5ec71bbfb439b022c87b1dab6619b74e9347d5c",
          "body": "…date spec file list\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(web): post-review cleanups — drop dead var, fix stale jsdoc, up…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T13:06:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f7e97d1e3c16a736a0575472214b826f3d292d89",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): branch ConversationTab SSE rebuild on _format",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:59:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b7227e640b5f05d9d85f3015725adfb963d36b1d",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): branch ResponseTab SSE rebuild on _format",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:58:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3f9b8f2aa9a2bba5a76dbfb2ada813fbd3e20d99",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): label OpenAI SSE chunks honestly in SseTimeline",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:58:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f341213251004e4d4068f9af65a49531b51bb27f",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): normalize OpenAI captures in fetchFile",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:54:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "689f73cec00de47a210c4da663b9683eee04fec6",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): normalizeOpenAICapture ties request + response translation",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:51:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f89cdefb49ea450e56f3dea8e42f288519c9e53e",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): rebuild assistant blocks from OpenAI SSE chunks",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:50:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "83e22935713c79f1fce577bf3caf1736a38efa37",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): translate OpenAI request body to Anthropic-shape",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:50:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "280543304b894c780b29d8840a334f46a12399f7",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): add openai.ts with detectFormat shape sniffer",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:47:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c971aa418adaaad196887b0a4909d86609668c20",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): add _format marker to Capture type for protocol sniffing",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:47:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b7c6cf7ffe2e68b0240cb49fed16b2fe35734f0f",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.9.3",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:22:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "46b833a80297309d2536892abe0832ca6970012b",
          "body": "…evated atmosphere\n\nAdd a layered shadow system and radius tokens for consistent depth;\nenrich body background with a subtle vignette; polish sidebar, toolbar,\ntab bar (animated sage underline), file items, cards, scrollbars, empty\nstate, and resize handle; add focus-visible rings for accessibility.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(web): refine visual polish — layered shadows, animated tabs, el…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T12:14:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1125fe7ce23912a66b54792f965cd1c93595134b",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.9.2",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-15T11:57:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0bf2c716304a59c11207bfff2b39dbd3063be1f3",
          "body": "…llapse callbacks\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): make Layer B actually lazy — defer smartRender to MessageCo…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:56:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "46d7070e4406211e92a81ff272e97526161325de",
          "body": "…ender)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(web): route large Message bodies through MessageCollapse (lazy r…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:45:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9897bb46c2c4796cc77ea35a856020c96ea988bd",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): add MessageCollapse component with lazy full-render",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:42:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6e8a9389ecfc1f671fdf57b96412349967f3acfd",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(web): raise ToolResult collapse threshold to 8KB/100 lines",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:39:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "21ce18474dc579bc7ca5953cd41d7e37aa1e0022",
          "body": "Co-Authored-By: Claude Opus 5.2 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(web): memoize Message bodyBlocks HTML by content identity",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:37:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a655518690c425c4270db126a00add5cf9c9f5b2",
          "body": null,
          "is_bot": false,
          "headline": "perf(web): React.memo Message/ToolPair/ToolResult to skip poll rerenders",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:33:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8590f8d49f42deb7248e154e8ad2b2d0c1e7b50d",
          "body": "…cies\n\nCo-Authored-By: Claude Opus 5.2 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): inline messages derivation to satisfy useExhaustiveDependen…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:30:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8894462970bafe78e3cd40c27f1454af37d331ef",
          "body": null,
          "is_bot": false,
          "headline": "perf(web): memoize conversation timeline + item list",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cab05237098107a5048f63e7c64ed9a9a32bb1d",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(web): skip JSON.parse in looksLikeJSON for non-{[ input",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:26:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "39620d8272461ad32fa13c5067c1480c434497b7",
          "body": "Bite-sized task plan covering memoization (Tasks 1-5) and lazy\nMessageCollapse integration (Tasks 6-7). Each task ends with build +\nlint + manual smoke check; no test framework in this project.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: viewer perf implementation plan (7 tasks)",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:15:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "70e6c39bd78339d58ea1a1a3c5613f1410fd5338",
          "body": "Spec for fixing viewer lag on large captures. Two layers: memoize\nderived timeline and HTML output to kill rerender cost, and default-\ncollapse large messages with a lazy-expand preview to kill first-paint\ncost. No new runtime dependencies.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: viewer perf design (memoization + progressive disclosure)",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-14T15:11:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5ef5e302cfd56238bd80ba8d072a7f8b21b11a4b",
          "body": "Reads version from package.json via fs.readFileSync (avoiding the\nassert → with import-attribute churn across Node 20.x).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): support --version / -v flag",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-13T16:00:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cc3c24421065e1394780d5856cf9e031ebadff9d",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.9.0",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-13T15:40:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3feaf3a9ff312fc9d13191c057b3333356bf3dff",
          "body": "- cap captures at 500 by default (--max-captures <n>); addon prunes\n  oldest on every write and at load so the viewer stays snappy\n- render AskUserQuestion options as horizontal chip cards instead of\n  vertical numbered rows\n- cap Write tool input height with in-place scroll\n- drop \"Claude Code\" / \"traffic archive\" sidebar header text\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: capture count cap + viewer refinements",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-13T15:40:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cfde43c82d45616e13c4e27019d0fb2b3ecbf1a5",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.8.1",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:51:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f10c911d86d0ae7ac45da297b51527533f0419e7",
          "body": "Fixes esbuild vulnerability (GHSA-67mh-4wv8-2f99). Build verified clean.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(web): upgrade vite 5 → 8 + plugin-react 4 → 6",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:51:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6bb56e3fded871f4fbbed5bd091eb19ffa54517d",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.8.0",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:42:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b8b075424756c32da570c2886388759e3e664713",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): show full date in timestamps (YYYY-MM-DD HH:mm:ss)",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:39:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3cc54738734ad92d034ff01e7e16672fe2488414",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): restore file size in flat request rows",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:37:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c8536f398f0fd9331352334e0906af4f3c405881",
          "body": "message_delta carries the full usage (both input and output), while\nmessage_start reports input_tokens as 0 for the glm proxy.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): read input_tokens from message_delta SSE event",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:34:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b5cde6c9144d77d4381e78a1ba061ab8c7d64612",
          "body": "Remove all tree structure (sessions, conversations, nesting, dividers).\nSidebar is now a flat virtualized list of requests in time order, each\nrow showing: colored tag dot + preview + status + tokens + time.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(web): flatten sidebar to simple request list",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:30:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e36fd3d9d4a1ae91a6377519e732ddca30d9c15a",
          "body": "- Level 1: session header with start time\n- Level 2: context headers (main/subagent as siblings, subagents\n  ordered right after their parent with ↳ branch marker)\n- Level 3: request leaves showing #N + status + input→output tokens\n- Leaves represent HTTP requests (POST /messages), not tool calls\n- \n[…]\nore 4+ level nesting)\n- Adds extractTokenUsage to server for input/output token counts\n- CSS for context labels, request numbers, token display\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: restructure sidebar to 3-level tree (session → context → requests)",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T13:23:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba875c663b6b354784f05597511ee1dd515842e5",
          "body": "…ancestry",
          "is_bot": false,
          "headline": "feat(web): render compression dividers + auto-expand nested subagent …",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T12:51:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "365a2782987ae210713b2dd3bd0aedc6a669be7a",
          "body": "…ession dividers\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): nest subagent conversations under parent turn + emit compr…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T12:47:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fc4f87abec84f161e25ae0916c029161c4cf7ea2",
          "body": "…e idempotency\n\nTwo cache-mutation bugs found in review:\n\n1. __messages deletion broke linkSubagents on subsequent polls: the\n   deletion loop in the /api/files handler removed __messages from\n   cached items, so the next poll's linkSubagents could not collect\n   fingerprints from main-agent capture\n[…]\nult as a\n   non-enumerable, immutable __originalKind; filter on that instead.\n\nVerification: 48 linked / 1 unlinked / 0 compressed (unchanged).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(server): non-enumerable __messages + __originalKind for cache-saf…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T12:40:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c06f7736e84cda2b0437f4b1e951df5096406112",
          "body": "…daries\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): link subagents to parent turn + detect compression boun…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T12:35:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "14d88e139998601f6e23f6623601d9ed86f1e18f",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for context-layer classification",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T12:22:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "34711225b732fba593cd38f83937ee2548b94fc8",
          "body": "…+ compression detection)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design spec for context-layer classification (subagent nesting …",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T12:18:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a9675f36a2c1306dd6966200415d213ac3f72ded",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): render sidebar as session → conversation → turns tree",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T10:18:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "607797d8c93f72b94270b800bacf15937258a122",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): group captures into conversations in the sidebar tree",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T06:34:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2a9558e3658282107e5e4881338698690987006a",
          "body": "…review",
          "is_bot": false,
          "headline": "feat(server): classify captures as anchor/continuation + kind-aware p…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T06:18:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3f11f307cdd28d48f941b057e16c2751491a5e3",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for sidebar conversation grouping",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T06:12:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6ecf3159bda7afe488352695c40975c84d3a4104",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design spec for sidebar conversation grouping",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T06:08:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce431a27a4755262cd1addf92092453c40ab6395",
          "body": "Replaces the inline pill (visually conflicted with the HTTP status badge)\nwith a colored left-edge stripe that's scannable peripherally, plus a\nplain-text tag label in the meta row whose color echoes the stripe.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(web): redesign tag as left-edge stripe + meta-row label",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T05:31:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8f0612ce8665f45a551c3ec1f892d831f6ae3a23",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): tag subagent/explore/utility rows in the sidebar",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T03:51:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c36583940171be5795c0419e0398fd94298af9bf",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(server): classify captures as main/subagent/explore/utility",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T03:42:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8bdd7f89e9809a90771adf6cd8a14ddafedbfa99",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for subagent sidebar tagging",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T03:24:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed21a6fe3069c2617f8697d5adfb252414770671",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design spec for subagent request tagging in sidebar",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T03:22:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72efc5cb25278700cc014e5cf87799d64812d6af",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.7.0",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-11T00:38:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "614d28cea829567f02b8fe3f5e0f4c1acf23ee6a",
          "body": null,
          "is_bot": false,
          "headline": "fix(web): add accessible group label to conversation filter chips",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T17:32:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da53cf10a3a4ce088879ffbdd511a06e8baa67b0",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): scope conversation header accent change to its own tab",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T17:25:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25709b84c47d918c685e8ff8cd8b88dde675d395",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(web): conversation filter chips + header layout",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T17:21:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c70e7603fd0bb6c7ffe173fa001ceec442257cf9",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): add conversation filter chips (system/user/assistant/tool)",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T17:18:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bbfec88eaa4c88abd5f21b3ec742017430d867e",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for conversation filter mode",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T17:15:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b035244063dc40c5413f54ba6f0d7fb24a3fc11b",
          "body": "Multi-select toggle chips (system/user/assistant/tool) inline with the\nConversation section header; all on by default, persists across capture\nbrowsing within a session.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: spec for conversation filter mode",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T17:11:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "123ab12c5600e592582c037b943342ecfa3310cf",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.6.0",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:51:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b47b42ace48aeda39e3da4a85b9652675a79e86",
          "body": "Consume the single space following ; when breaking, so the next row\nstarts at the same column as the first instead of being shifted right\nby one.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): align shell command rows after semicolons",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:47:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8bac656b27ddc288c61f7beab700547ffcced584",
          "body": "Add a dependency-free code highlighter (comments, strings, numbers,\nkeywords; comment style per language family) and route Read tool\nresults through it via a file_path→lang lookup, stripping the line-\nnumber prefix into a left gutter. Non-code files fall back to the\nexisting markdown rendering.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): syntax-highlight Read tool results by file extension",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:42:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81d6053863ff637354bc674685245a5fb8d8b5be",
          "body": "Drop italic serif display styling; thinking now uses the default UI\nfont at body size, keeping only the dim color and left rail as a cue.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(web): use normal font for assistant thinking blocks",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:36:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "48915283a3e73884452546e97cebddb8c09b1535",
          "body": "Swap escapeHtml → smartRender for thinking blocks so headings, lists,\ncode spans, and emphasis in the model's reasoning render formatted\ninstead of as plain escaped text.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): render assistant thinking blocks as markdown",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:34:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "83f6b68aac12dcb99451796e7dcf2c672812eab6",
          "body": "Keep pipelines (|), &&, and || on one line; only ; separates commands\nonto their own rows.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): only break shell commands after semicolons",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:31:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d3f818b76558e752156dc693407a57c5cd979b5f",
          "body": "Insert a line break after chain operators (;, &&, ||, |) in the shell\nhighlighter so each segment of a compound command renders on its own\nrow instead of one long line.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): break compound shell commands across rows",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:28:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f166646e8ad5ede046435a518e3309363d39f9f",
          "body": "Long/multiline non-allowlisted strings (e.g. Edit.new_string) were\nJSON.stringify'd, which escapes real newlines into literal \"\\n\". Escape\nthe raw value instead so it renders with actual line breaks in the\nexisting <pre class=\"j-block\">.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): preserve real newlines in long tool-input string fields",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:23:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ee667d7176a3782a2bd57d57f6c3f8dc9c5a6f27",
          "body": "Add a dependency-free shell highlighter (comments, strings, operators,\nkeywords, $variables) and route command/script/cmd/shell fields through\nit via SHELL_FIELDS, ahead of the markdown and JSON branches. Preserves\nreal newlines instead of JSON-escaping the command into one line.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): shell syntax highlighting for Bash command fields",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:17:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ca328df2ed1883986e5a60c84e13c2a030e8c22f",
          "body": "When req.system is an array of {type:\"text\"} blocks, extract each\nblock's .text and join, so SystemMessage renders the markdown rather\nthan escaping the whole array as a JSON string.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): render system prompt as markdown instead of JSON dump",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T16:12:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "96d47f9b06eddac46f8903d71f069f79d2d83d0f",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(web): field-row layout for structured tool inputs",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T15:59:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6294bbd08ddec3c55c8912ef44590897b681aad7",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(web): reuse renderToolInput for orphan tool_use blocks",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T15:54:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b2807606d5876b5ca9c544bd6531f1aff1ad130b",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): render tool-pair input as structured fields with markdown",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T15:50:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a0deb64983430dc67b321e806c025a7e2a71a7e",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): add toolInput renderer with markdown allowlist",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T15:47:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f227bad34b901cfbd1d3ac7a765cd46f5d9e8ce8",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for tool input markdown rendering",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T14:41:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "275bc856fd2132d0e18bbd29af4c738f141cc10d",
          "body": "Render allowlisted prose fields (description, preview, subject, etc.)\ninside tool inputs as markdown instead of escaped JSON dumps.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: spec for tool input markdown rendering",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T14:07:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "adea51c1ca021edee860566d87ae97ba263ae32c",
          "body": "New since 0.4.2:\n- Session-scoped captures (recursive addon + server scan)\n- Session tree sidebar with collapsible grouping\n- Resizable sidebar (240-600px, persisted)\n- Tree virtualization (@tanstack/react-virtual)\n- Sidebar perf cache (module-level mtime cache; ~65x faster polls)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.5.0",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T11:34:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4aeba6ebee54e955ca6c18eaaf4460a29b6890eb",
          "body": "Performance optimization layered on top of Round 1 (tree virtualization\n+ resizable sidebar):\n\n- Server: module-level per-file mtime+size cache in listCaptures;\n  cache hits return the SAME ListItem reference and skip read+parse.\n  Steady-state /api/files drops from \"parse all 314MB\" to \"stat 973\n  \n[…]\n\n- Client: leaf TreeNode wrapper cache + useCallback on toggle/onSelect\n  so TreeNodeRow's memo() actually skips re-renders for unchanged rows.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'tree-virtualization' (Round 2: perf cache)",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T11:30:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e4dd71f2976133b9178a99ca10dcecb7e0fc3722",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(web): useCallback + stable leaf TreeNode refs for memoized rows",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T11:17:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8478526f834bdd790984aef157c4692682d47473",
          "body": "Add a module-level Map<fullPath, {mtime, size, item}> cache so that\ncache hits skip the read+parse cycle and return the same ListItem\nobject reference. This eliminates ~99% of the per-poll cost for\nunchanged captures (325ms → 5ms for 278 files). The same-reference\nproperty is required for downstream React memoization (Task 2).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(server): cache listCaptures by mtime+size, reuse ListItem refs",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T11:13:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "50f8ac24f132bd40acf54ccd7769e1990fad28d0",
          "body": "Two tasks: (1) server-side module-level mtime cache in lib/server.mjs\nreturning same ListItem refs on hits; (2) client-side useCallback +\nleaf TreeNode cache so memoized TreeNodeRows skip re-render.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for sidebar perf cache",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T11:08:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0551c1ba9b2a98326283e2d8f651da40374915d5",
          "body": "Server-side per-file mtime cache (eliminates the 314MB-per-poll JSON\nparsing) + client-side memoization (useCallback on toggle/onSelect,\nstable leaf TreeNode identity) so the virtualizer stops re-rendering\nunchanged rows on every 3s poll.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design spec for sidebar perf cache",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T11:04:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c198251d0d67b467401bf01b0b72de90a41d13a2",
          "body": "Three coordinated sidebar features:\n- Depth-aware tree renderer (TreeNode model with buildTree/flattenVisible)\n- @tanstack/react-virtual for 1000+ capture directories, with dynamic\n  row measurement via measureElement\n- Drag-resize handle with localStorage persistence (240-600 px bounds)\n\nPlus two p\n[…]\nnks visibleRows\n- Removed CSS conflicts (slideIn animation + session-header sticky) that\n  fought the virtualizer's inline absolute positioning\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'tree-virtualization'",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T10:44:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd065bf73948ca5a1a7727bba3384576757f6bdd",
          "body": "…sure\n\nResizeObserver fires asynchronously after poll refreshes and collapse\ntoggles; by the time measureElement calls getItemKey, visibleRows may\nhave shrunk and the original index is out of bounds. Mirror visibleRows\ninto a ref so the closure reads the latest array, and guard the access\nas a belt-and-suspenders fallback (`__gap_N` key).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): guard getItemKey against stale visibleRows during async mea…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-10T10:42:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b81615d911b997f56898a289c01a6ad07fbbf6b4",
          "body": "…on, session sticky)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): remove CSS conflicts with virtualized rows (slideIn animati…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T20:31:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "743eb5591b4aa951ee19b275b5a2d1fd9cd063d5",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): resizable sidebar with localStorage persistence",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T16:12:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d5a79b922f7eeeba0acd0fc07a22e34662dedaa",
          "body": "…res int)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): use numeric vRow.index for data-index (measureElement requi…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T16:10:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "09577f2ea8494cfe5cedc9c5f1f1a28a5b4bd0c9",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): virtualized tree renderer with depth-aware indentation",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T15:31:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1e2e441be6220a3f1f5c2843039e18996c4c13dc",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(web): replace SessionGroup with depth-aware TreeNode model",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T15:25:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "15cf17d417b7192b446f9edae4bfa98d415a9e0a",
          "body": "Three tasks: (1) depth-aware TreeNode model with buildTree/flattenVisible;\n(2) virtualized renderer via @tanstack/react-virtual with depth-aware indent;\n(3) SidebarResizeHandle + App.tsx state + localStorage persistence.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for tree virtualization + resizable sidebar",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T15:21:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "caa548f9a2c9cfcc70c32d5f49146496bbf75257",
          "body": "Three coordinated sidebar improvements:\n- Depth-aware tree renderer (two-level today, depth-prop API for future)\n- @tanstack/react-virtual for 1000+ capture directories\n- Drag-resize handle with localStorage persistence (240-600 px bounds)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design spec for tree virtualization + resizable sidebar",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T15:17:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d98bece42c1fb3e5074ed5b25e1c383b26efa2ab",
          "body": "Mirror the on-disk structure: session directory name (UUID or\nsession-YYYYMMDD-HHMMSS-PID) is now the primary label, with capture\ncount in brackets. Drops the time/preview composite — user can expand\nto see contents.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): session header shows dirname + count",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T15:07:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ed33e1c9384fd8f8b3c3dca06c2d72e8d1045f31",
          "body": "Add two-level session tree grouping to the viewer sidebar. Newest session\nauto-expanded on data arrival; others collapsed. Header shows relative\ntime + capture count + opening-message preview. Server unchanged —\ngrouping is a pure client-side transform of the existing /api/files\nresponse.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'session-tree-sidebar'",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:57:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a613e9042a7dd60cb1b3ad4d132e355da1b723e5",
          "body": "…-render)\n\nThe original mount-only useEffect ran before /api/files resolved, so\ngroups was empty and nothing got collapsed. Switched to a useRef guard\nthat fires once when data first becomes non-empty.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(web): collapse to newest session once data arrives (init-on-first…",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:51:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ea16587d1a36507441e064b59c8e8a0d2af147c",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): session tree sidebar with collapsible grouping",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:46:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "645bd50a843d862b1d64e5a16fc20e0b1b068714",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(web): add groupSessions helper + relativeTime/truncatePreview",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:42:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "685fb5061588b5ef6a20566fc7d02b4bed604c6f",
          "body": "Two tasks: (1) pure helpers (groupSessions + format additions);\n(2) ConversationList rewrite + session-header CSS. Server unchanged.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for session tree sidebar",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:31:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ff89b4e9005f120c6571458ef5feaac4f1587fa",
          "body": "Two-level tree grouped by session-id (client-side only, server unchanged).\nNewest session expanded on load; others collapsed. Header shows relative\ntime + capture count + opening-message preview.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design spec for session tree sidebar",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:28:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "847388442e4da70fc92d7d0c345473a27c8af115",
          "body": "- addon.py: write captures to per-session subdirectories keyed by\n  X-Claude-Code-Session-Id (with process-level fallback dir for\n  headerless requests). Sanitized to filename-safe chars. Also expand\n  target paths to include OpenAI /chat/completions and /completions\n  alongside Anthropic /messages.\n[…]\nurfaces session-scoped captures. /api/file\n  now accepts subdirectory paths but still rejects path traversal via\n  path.resolve + prefix check.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(capture): session-scoped captures + OpenAI endpoint support",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:17:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a199fba4b6c434fd95a5926fe65d9334106eec2f",
          "body": "Migrate viewer UI from 1821-line vanilla-JS monolith (public/index.html)\nto React + Vite + TypeScript app under web/, built to dist/ and served\nby lib/server.mjs.\n\n16 commits, side-by-side migration with ship-when-ready parity gate.\nOld monolith deleted; viewer now renders from dist/.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'react-frontend-migration'",
          "author_name": "artf",
          "author_login": null,
          "committed_at": "2026-07-08T14:14:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 5,
      "commits_last_year": 138,
      "latest_release_at": "2026-07-11T13:51:59Z",
      "latest_release_tag": "v0.8.1",
      "releases_from_tags": true,
      "days_since_last_push": 7,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 11,
      "mean_days_between_releases": 1.2
    },
    "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": "claude-capture",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude",
            "claude-code",
            "mitmproxy",
            "anthropic",
            "capture",
            "debug",
            "proxy",
            "inspector"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/claude-capture",
          "is_deprecated": false,
          "latest_version": "1.0.0",
          "repository_url": "https://github.com/ysxdyt-001/claude-capture",
          "versions_count": 18,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2973,
          "first_published_at": "2026-07-06T14:44:24.659000Z",
          "latest_published_at": "2026-07-17T13:23:50.889000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "web/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 24939,
      "source_files_sampled": 36,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 6886
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "web/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": "react",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.1"
        },
        {
          "name": "react-dom",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.3.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": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 1,
        "closed_unmerged_prs": 0
      },
      "bus_factor": null,
      "bot_contributors": 0,
      "top_contributors": [],
      "contributors_sampled": null,
      "top_contributor_share": null
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "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": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "6ae0c964175c5374ef5262d884ce69dc5827e79e",
        "ran_at": "2026-07-22T15:11:08Z",
        "aggregate_score": 2.6,
        "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": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ysxdyt-001/claude-capture",
    "host": "github.com",
    "name": "claude-capture",
    "owner": "ysxdyt-001"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 52,
      "inputs": {
        "security": 26,
        "vitality": 69,
        "community": 32,
        "governance": 61,
        "engineering": 60
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 69,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 138,
              "human_commit_share": 1,
              "days_since_last_push": 7,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "138 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 138
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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": 88,
            "inputs": {
              "releases_count": 5,
              "latest_release_tag": "v0.8.1",
              "releases_from_tags": true,
              "days_since_latest_release": 11,
              "mean_days_between_releases": 1.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "5 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 11 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.2
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "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": 58,
            "inputs": {
              "packages": [
                "claude-capture"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2973
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,973 downloads/month across npm",
                "points": 46.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2973,
                      "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": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 1,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "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": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "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": 15,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "ysxdyt-001",
              "public_repos": 1,
              "account_age_days": 16
            },
            "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": "0 followers of ysxdyt-001",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "ysxdyt-001"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 2.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "claude-capture"
              ],
              "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": "18 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "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": 60,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 26,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 26,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "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": 81,
        "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": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 6886
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 71,
            "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": true,
              "typecheck_configs": [
                "web/tsconfig.json"
              ],
              "agent_commit_share": 0.87,
              "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": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "web/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "web/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": "87 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 87,
                      "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": 24939,
              "source_files_sampled": 36,
              "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/36 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 36,
                      "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",
    "Contributor list unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:claude-capture@1.0.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T15:11:12.672449Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/y/ysxdyt-001/claude-capture.svg",
  "full_name": "ysxdyt-001/claude-capture",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.