Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 11:36 UTC

ashaychangwani / imprint

Record a browser workflow once, get a deterministic MCP tool your AI agent can call. Zero tokens at runtime. Postman for AI agents.

TypeScriptMIT★ 18 Sterne⑂ 1 Forkseit Mai 2026Auf GitHub ansehen ↗

ashaychangwani/imprint erreicht einen Gesundheitsindex von 57 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (81/100) ab, am schwächsten bei Security (31/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

57
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.

57
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

Ashay ChangwaniPersönliches Konto
15 Follower113 öffentliche Reposseit Juni 2017

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öffentlicht
npmimprint-mcp0.6.52.52524vor 5 Tagen

Metriken nach Kategorie

Vitalität

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

73Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
8.3/36Commit-Rhythmus — 12/52 Wochen mit Commits
18/18Commit-Volumen — 282 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_year282
human_commit_share1
days_since_last_push0
active_weeks_last_year12
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 25 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 2,4 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count25
latest_release_tagv0.6.5
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases2,4

Community & Verbreitung

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

47Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
20/60Stars — 18 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars18
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)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
45.4/80Downloads pro Monat — 2.525 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesimprint-mcp
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.525
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?

48Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
9.3/46.8Issue-Lösungsquote — 20 % der Issues geschlossen
35.6/38.3PR-Annahme — 108/116 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs108
open_issues4
closed_issues1
issue_closed_ratio0,2
closed_unmerged_prs8
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
8.7/25Reichweite des Inhabers — 15 Follower von ashaychangwani
25/25Kontohistorie — 113 öffentliche Repos, Kontoalter ca. 9 Jahre
Verwendete Eingangsdaten
followers15
owner_typeUser
is_verified
owner_loginashaychangwani
public_repos113
account_age_days3.314
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 — 24 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesimprint-mcp
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

81Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://github.com/ashaychangwani/imprint
10/10Repository-Beschreibung
10/10Topics — 9 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsai-agents, browser-automation, bun, claude, llm, mcp, mcp-server, typescript, web-scraping
has_wikija
homepagehttps://github.com/ashaychangwani/imprint
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

31Gefährdet · 16 % des Gesamtindex

Sicherheitslage

31Gefährdet
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
2.5/2.5CI-Tests — 17 out of 17 merged PRs checked by a CI test -- score normalized to 10
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
10/10Dangerous-Workflow — no dangerous workflow patterns detected
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
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 35 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,1

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.

66Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 99 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,99
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes10.645
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — tsconfig.json
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 54 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configstsconfig.json
agent_commit_share0,54
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
52.6/55Handhabbare Dateigrößen — 11/249 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes189.362
source_files_sampled249
oversized_source_files11
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
20/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalja
api_schema_files

Eckdaten

18GitHub-Sterne
1Mitwirkende
282Commits, letzte 12 Monate
0Tage seit letztem Push
25Releases
1Bus-Faktor
4offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 3.1 / 10
3.1Gesamtwert

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-23 11:36 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests17 out of 17 merged PRs checked by a CI test -- score normalized to 10
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
10Dangerous-Workflowno dangerous workflow patterns detected
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
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities35 existing vulnerabilities detected
Direkte Abhängigkeiten 29
RegistryPaketVersionsvorgabeManifest
npm@anthropic-ai/sdk^0.52.0package.json
npm@arizeai/phoenix-otel^1.0.2package.json
npm@clack/prompts^1.3.0package.json
npm@modelcontextprotocol/sdk^1.0.0package.json
npm@napi-rs/keyring^1.3.0package.json
npm@noble/hashes^2.2.0package.json
npm@opentelemetry/api^1.9.1package.json
npmchrome-remote-interface^0.33.0package.json
npmenv-paths^3.0.0package.json
npmlibsodium-wrappers^0.8.4package.json
npmnode-cron^3.0.3package.json
npmplaywright^1.49.0package.json
npmplaywright-extra^4.3.6package.json
npmpuppeteer-extra-plugin-stealth^2.11.2package.json
npmredactum^1.1.0package.json
npmsemver^7.8.4package.json
npmtldts^7.4.8package.json
npmyaml^2.8.4package.json
npmzod^3.24.0package.json
npm@vitejs/plugin-react6.0.1web/package.json
npmhighlight.js^11.11.1web/package.json
npmreact19.2.6web/package.json
npmreact-dom19.2.6web/package.json
npmreact-markdown^10.1.0web/package.json
npmreact-router-dom^7.15.0web/package.json
npmrehype-highlight^7.0.2web/package.json
npmrehype-slug^6.0.0web/package.json
npmremark-gfm^4.0.1web/package.json
npmvite8.0.12web/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": [
        "ai-agents",
        "browser-automation",
        "bun",
        "claude",
        "llm",
        "mcp",
        "mcp-server",
        "typescript",
        "web-scraping"
      ],
      "is_fork": false,
      "size_kb": 3780,
      "has_wiki": true,
      "homepage": "https://github.com/ashaychangwani/imprint",
      "languages": {
        "CSS": 14106,
        "HTML": 513,
        "Shell": 7972,
        "JavaScript": 49414,
        "TypeScript": 3120767
      },
      "pushed_at": "2026-07-23T10:38:13Z",
      "created_at": "2026-05-03T21:18:37Z",
      "owner_type": "User",
      "updated_at": "2026-07-18T07:17:25Z",
      "description": "Record a browser workflow once, get a deterministic MCP tool your AI agent can call. Zero tokens at runtime. Postman for AI agents.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://prospify.app",
      "name": "Ashay Changwani",
      "type": "User",
      "login": "ashaychangwani",
      "company": null,
      "location": null,
      "followers": 15,
      "avatar_url": "https://avatars.githubusercontent.com/u/29693329?v=4",
      "created_at": "2017-06-25T18:40:50Z",
      "is_verified": null,
      "public_repos": 113,
      "account_age_days": 3314
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2026-07-18T02:28:49Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-07-17T03:10:52Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2026-07-16T01:26:44Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-07-15T02:03:33Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-07-13T22:05:11Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-07-09T23:14:15Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-07-01T02:43:16Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-06-26T19:40:54Z"
        },
        {
          "tag": "v0.4.11",
          "kind": "patch",
          "published_at": "2026-06-26T12:38:06Z"
        },
        {
          "tag": "v0.4.10",
          "kind": "patch",
          "published_at": "2026-06-26T11:57:01Z"
        },
        {
          "tag": "v0.4.9",
          "kind": "patch",
          "published_at": "2026-06-26T09:55:31Z"
        },
        {
          "tag": "v0.4.8",
          "kind": "patch",
          "published_at": "2026-06-26T08:56:50Z"
        },
        {
          "tag": "v0.4.7",
          "kind": "patch",
          "published_at": "2026-06-25T00:29:20Z"
        },
        {
          "tag": "v0.4.6",
          "kind": "patch",
          "published_at": "2026-06-22T23:41:05Z"
        },
        {
          "tag": "v0.4.5",
          "kind": "patch",
          "published_at": "2026-06-22T22:00:51Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-06-20T05:53:22Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-06-19T02:45:01Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-06-18T23:18:29Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-06-18T20:58:16Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-17T07:18:05Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-06-07T23:35:45Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-06T21:42:06Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-05-27T07:34:46Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-05-14T11:06:47Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-05-05T08:55:46Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a16fdfc4a50a049a52b6adffbaea588c21d2c384",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.5",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-18T02:28:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "848004b15a8f8b6761e866ef5b1572829552e1f2",
          "body": "* feat(teach): make tool selection dependency-aware\n\n* refactor(teach): simplify dependency-aware selection",
          "is_bot": false,
          "headline": "feat(teach): make tool selection dependency-aware (#123)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-18T02:05:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "def4991d4efeb916a4a876f50114697d70c67e02",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.4",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-17T03:10:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "959cf8d5402a89e92c8c09f57e08433400f79688",
          "body": "* fix(record): recover missing React Flight bodies\n\n* chore(skills): add PR review convergence workflow\n\n* fix(record): tighten React Flight response recovery\n\nKeep streamed recovery narrowly bounded to missing React Flight bodies, preserve\npriority capacity under mixed load, and route header-only Flight responses through\nstructural redaction. Remove benchmark artifacts and unrelated behavioral changes.",
          "is_bot": false,
          "headline": "fix(record): recover missing React Flight bodies (#122)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-17T02:47:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "200389d1627ea87f56d625c7fcfcd30db7b66bee",
          "body": "* fix(tracing): delegate model cost calculation to Phoenix\n\n* fix(tracing): preserve Phoenix cost accuracy\n\n* fix(tracing): handle delayed and retried usage\n\n* fix(tracing): resolve legacy unpriced models\n\n* fix(tracing): distinguish unresolved Phoenix costs\n\n* fix(tracing): preserve settled span costs",
          "is_bot": false,
          "headline": "fix(tracing): delegate model cost calculation to Phoenix (#121)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-16T11:07:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bc994583cb1a9fb9584fcf55eae61f5ee895d8d",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.3",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-16T01:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c91c9dfde80f769cb0ee1bc54fd9c4e909167a27",
          "body": "* fix(audit): scope headless audits to eligible tools\n\nPrevent unattended audits from initiating authentication that can require human continuation. Preserve audit coverage diagnostics for skipped and detected-but-unemitted tools without affecting the accuracy denominator.\n\n* feat(teach): add tool-s\n[…]\nbudget, bound incomplete verifier runs separately, and require a completed infrastructure-only report before explicit unverified acceptance. Use the independent Terra verifier for both compiler paths.",
          "is_bot": false,
          "headline": "fix(teach): harden reteach verification and audits (#120)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-16T00:43:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e608188d2bc505f03135e5985902310fc42987f",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.2",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-15T02:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc4e2d1252c0ca5682b77934bc546648c2a119c7",
          "body": "* feat(teach): add agentic live verification\n\nDelegate final integration judgment to an independent verifier with\ndurable evidence, real-time logs, backend preparation, and compiler\nfeedback loops.\n\nAdd generic browser navigation interactions, resilient reteach phase\nselection, and backend-cache preservation.\n\n* fix(teach): harden agentic verification lifecycle\n\n* fix(audit): keep evaluation types internal",
          "is_bot": false,
          "headline": "feat(teach): add agentic live verification (#119)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-15T02:00:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "432661b9958e97d84ad0e9c1c7f8cdc89fd5acc4",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.1",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-13T22:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ea44e5a8acb9985a30cb223ad8c76172631ccaf",
          "body": "* feat(auth): support checkpointed Codex compilation\n\nRefresh the laddered auth compiler on v0.6.0, keep live browser state\nacross 2FA phases, and require recording-grounded completion without a\nplaybook fallback.\n\n* feat(llm): add gpt-5.6 Codex models\n\n* feat(auth): compile recording-grounded actio\n[…]\nh): skip browser-only form checks in CI\n\n* test(backends): isolate fetch integration coverage\n\n* test(backends): avoid browser bootstrap in cache test\n\n* test(backends): stabilize memo timing coverage",
          "is_bot": false,
          "headline": "feat(auth): compile recording-grounded auth actions with Codex (#118)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-13T22:02:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a30e12fa5f64571b10b4badc6e704aa350987bbc",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.6.0",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-09T23:13:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98ddbe673c5bc374943ce20e5099f924d14dcd2d",
          "body": "Squash merge PR #116 after PR #115 landed.",
          "is_bot": false,
          "headline": "feat(examples): refresh Google Hotels and Southwest tools",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-09T23:10:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed6b92e79578b1f1779046ed5e73d751a677dc8f",
          "body": "Squash merge PR #115.",
          "is_bot": false,
          "headline": "fix(teach): harden diagnostics and browser-backed replay",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-09T23:07:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebd2e91e16da31173e201cf865ffde896ed4d4ff",
          "body": "* fix(audit): strengthen parameter coverage and token contracts\n\n* feat(examples): refresh google flights tools\n\n* chore(release): v0.5.1\n\n* docs(skills): capture google flights audit workflows\n\n* fix(audit): honor token and parameter audit signals",
          "is_bot": false,
          "headline": "fix(audit): strengthen parameter coverage and token contracts (#114)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-07-01T03:09:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "898ae94094a3a3fe34acd9eaf400139283fbf188",
          "body": "…ens (#111)\n\ngoogle-flights compiled 0/5 from a clean recording. The root cause was a\nverifier regression in the plan-time dependency contract: contractedInputGate\nsearched the JSON-escaped workflow text using the *unescaped* literal as the\nneedle, so any static header whose value contains double-qu\n[…]\nnner now contracts f.sid/bl as browser_state for all five tools.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): unblock google-flights compile + contract URL session tok…",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-30T09:30:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "969ce4049b4949cbb723b64e0adc563791ae712b",
          "body": "…(#113)\n\nA parallel audit of the codebase surfaced eight places where core logic was\ncoupled to a single site, vendor, or wire format rather than deriving behavior\ngenerically. Overfitting like this silently mis-handles every other site (a\ndecoder keyed to one envelope shape, an endpoint-grouping re\n[…]\nck it), so a live Southwest run is the\nfinal confirmation there.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: generalize site-specific code in core (remove overfitting) …",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-30T09:21:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "41638cab221a9328e7da521b1546c3435230c2ef",
          "body": "The compile-time backend ladder runs cdp-replay inside probe subprocesses\nthat each launch a real Chrome. When a probe finished by calling\nprocess.exit(0) before the cdp pool's 15s idle-close timer fired, the Chrome\nwas never closed — and across a full `imprint teach` run these orphans\naccumulated (\n[…]\nogle-flights re-teach finished with a\nChrome process count of 0.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ladder): kill orphaned compile Chrome processes on exit (#112)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-30T06:24:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f61fa943aa13df4cf24aee2c6a8ded93cee0dc6d",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.5.0",
          "author_name": "Ashay Changwani",
          "author_login": null,
          "committed_at": "2026-06-26T19:40:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c3cf5749d84627092fb4cf0e83cdc302f4a7513",
          "body": "…session continuity (#105)\n\n* feat(auth): laddered authenticate tools with structural 2FA + serialized-session attempt\n\nMake `imprint teach` detect a site's login requirement, compile an\n`authenticate` tool BEFORE the data tools, and drive it to the 2FA\nchallenge — using whatever rung of the backend\n[…]\n Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(auth): agent-orchestrated 2FA — segmented compile + cross-phase …",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T19:23:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7b1cc81951ab50dff6fe0ac33018bec565efa6c",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.11",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T12:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ce0bb240fc13b1589a2fea419c1921053ed37ab",
          "body": "Fix carrier-code filters by using Google Flights include slot and surface non-exhaustive search scope with available airline filters.",
          "is_bot": false,
          "headline": "fix(google-flights): encode carrier filters as includes",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T12:36:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd98055359d890eb3f480b64f09a93264c1d30e0",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.10",
          "author_name": "Ashay Changwani",
          "author_login": null,
          "committed_at": "2026-06-26T11:56:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbfc002fac0887d762bb37fda038f42aef99055c",
          "body": "…enerated tools (#110)\n\nThe published npm package's `files` whitelist shipped src/, prompts/, and\nexamples/ but omitted tsconfig.json. On any global/npm install of imprint\n(e.g. `bun add -g imprint-mcp`), REPO_ROOT resolves to the install dir, so the\ngenerated-artifact typecheck step — typecheckArti\n[…]\nacefully when the root tsconfig is absent is tracked separately.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(packaging): ship tsconfig.json so global installs can typecheck g…",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T11:54:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f746d73a9aafec9682efab5b52701c17dd6ae205",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.9",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T09:55:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4517a785d9cfb1df9d383189ed7321aba822228a",
          "body": "Fix Google Flights one-way request shaping and deterministic calendar lows.",
          "is_bot": false,
          "headline": "fix(google-flights): harden one-way search and calendar prices",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T09:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5c11ad4987af2dfa4563b7d6e9529f0eb904d3a",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.8",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T08:56:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2345f399a0ed38e7a0003baa2a38641e27fd2902",
          "body": null,
          "is_bot": false,
          "headline": "fix(google-flights): reject false zeroes and keep cdp warm",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-26T08:55:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0956065203508dfda5045b08f46d20e79a67abfe",
          "body": "This reverts commit 192f595cdbf93a9f97cdb9fa65532918285864f5.",
          "is_bot": false,
          "headline": "Revert \"fix(mcp): pace warm Google Flights searches (#100)\"",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-25T00:31:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a02840c5438a5e612b73d9e7b737aaf3f69868f6",
          "body": "This reverts commit 909afe0fbb1a61cfaf5f3401e56eb4b4369a7be7.",
          "is_bot": false,
          "headline": "Revert \"chore(release): v0.4.7\"",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-25T00:31:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "909afe0fbb1a61cfaf5f3401e56eb4b4369a7be7",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.7",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-25T00:29:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "192f595cdbf93a9f97cdb9fa65532918285864f5",
          "body": "* fix(mcp): pace warm Google Flights searches\n\nGoogle Flights can return fast empty payloads when warm CDP-backed search calls\nare issued back-to-back. Let workflows declare MCP call spacing, require the\nbrowser-minted page tokens used by the example requests, and fail malformed\nbatchexecute respons\n[…]\nrkflow metadata edits, and match the current Google Flights round-trip request classifier so generated searches do not send the stale return-leg shape.\n\n* fix(mcp): reuse browser-observed flight state",
          "is_bot": false,
          "headline": "fix(mcp): pace warm Google Flights searches (#100)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-25T00:27:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2cd0305d7fcefcb9384d276597414f86600a3717",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.6",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-22T23:40:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76f85b111261284fbcb3e724601d8b5b76afa008",
          "body": "* fix(teach): keep triaged public API candidates\n\n* fix(teach): share telemetry filtering\n\n* fix(teach): narrow event telemetry detection\n\n* fix(teach): filter triage prompt events\n\n* fix(teach): satisfy deadcode export checks",
          "is_bot": false,
          "headline": "fix(teach): keep triaged public API candidates (#97)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-22T23:38:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5a137ecd5c4c2ce0edfe21e7b3dcf37a7b7c7be",
          "body": "…e (#99)\n\nThe LLM-based triage step runs before detect-candidates and was freely\ndropping login requests whose bodies contain ${credential.username} /\n${credential.password} placeholders. By the time detect-candidates ran\non the triaged session, the credential-bearing requests were gone — so\nthe com\n[…]\n\nprompt also gets a belt-and-suspenders bullet about credential\nplaceholders.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(triage): preserve credential-bearing login requests through triag…",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-22T23:20:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a720cdf933a1e95b8d4ea80dc2ecc94ec6d6f64",
          "body": "…(#98)\n\nClaude CLI ≥2.1.170 made MCP server startup non-blocking by default.\nThe compile agent was launching with zero tools because the\nimprint-compile MCP server hadn't finished connecting when the first\nmodel turn started — the model output text, ended its turn, and the\nsession completed after 1 \n[…]\nonfigured MCP servers are loaded\nand the wait applies only to our own server.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): block on MCP server connection before first model turn …",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-22T21:59:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a0bdfb602477c4f57be321adfdf87691984556b",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.4",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-20T05:53:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a67627c44b54c7e9299ab359286c7be69c3dba5d",
          "body": "* fix(mcp): serialize same-site tool calls\n\n* test: add backend memo timeout headroom",
          "is_bot": false,
          "headline": "fix(mcp): serialize same-site tool calls (#96)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-20T05:52:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f034d9ba7a24050937db7ae645a6efadffb53682",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.3",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-19T00:16:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83959e4fc97bde9338a8ffecda03d0bba340a2c3",
          "body": "Do not persist or trust playbook as a preferred fallback unless it has a successful backend result. Bound MCP playbook fallback runtime and diagnostic screenshots so a stale DOM path cannot outlive the Hermes tool timeout.",
          "is_bot": false,
          "headline": "fix(backend): bound playbook fallback preferences (#95)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-19T00:15:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93829db222e582d7746f30f9cb11b9a48d3fdcd7",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.2",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-18T23:17:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78f827bb49ba078be1ff5e20a6f2880b9f05e994",
          "body": null,
          "is_bot": false,
          "headline": "fix(mcp): persist backend preferences (#94)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-18T23:16:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb879a0bed3700151e8a46a1b00d03650e3165c5",
          "body": "* feat(cli): add `imprint update` command and doctor version check\n\nAdd a self-update mechanism so users can check for and install newer\nversions without leaving the CLI. Two entry points:\n\n- `imprint update` — queries the npm registry for the latest\n  imprint-mcp version and runs `bun install -g im\n[…]\ntypecheck\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): add `imprint update` command and doctor version check (#93)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-18T21:37:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "da3084a532231b21a64e54a70fd4094d510e404a",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.1",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-18T20:57:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc7334ad1c60cce1cf111289bea437a701e5134f",
          "body": "CDP command promises can remain pending when Chrome or the target page stops answering, which left MCP tool calls stuck before cleanup ran. Add per-command deadlines, close failed sessions, apply workflow defaults before browser bootstrap substitution, and cover the stuck-CDP and Southwest default-param regressions.",
          "is_bot": false,
          "headline": "fix(cdp): bound browser-backed replay commands (#92)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-18T20:55:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e95f2287ee1186c4c5f6b3a0b44b827f6050f3c",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.4.0",
          "author_name": "Ashay Changwani",
          "author_login": null,
          "committed_at": "2026-06-17T07:17:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87446929ea6625785dd3c0242301ff1c52d7b904",
          "body": "…e MCP sharing (#91)\n\n* feat(cli): add `imprint export` and `imprint import` for cross-machine MCP sharing\n\nBefore this change, sharing generated MCP tools across machines required\nmanually copying ~/.imprint/<site>/ directories and separately running\n`imprint credential export` per site. There was \n[…]\ng import.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): add `imprint export` and `imprint import` for cross-machin…",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-17T07:16:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8bd23e241afd16aac970c2963d3707a622758a94",
          "body": "…from issues (#90)\n\n* fix(mcp): prune sessionless _pending at status time, drop incomplete from issues\n\nThe _pending prune fix (dd820d7) only ran inside teach(), so stale entries\npersisted in `imprint mcp` status output until the user re-taught each site.\nAdditionally, the prune logic required stem-\n[…]\none line.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(mcp): prune sessionless _pending at status time, drop incomplete …",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-17T05:42:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd820d71b97e74ffdc5c334dd7ddbb6f2b4fe738",
          "body": null,
          "is_bot": false,
          "headline": "fix(teach): prune stale pending resume state (#88)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-08T09:09:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a1c5832ea19d0daadc682ef960145920d251fe1",
          "body": null,
          "is_bot": false,
          "headline": "fix(teach): persist triaged session paths (#89)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-08T08:51:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a50575729b61159aeb5b0eec6596bdba3ad3a140",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.3.1",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-07T23:34:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "349b49e7c1ee833d600d975ad7ce36f08bfe8b29",
          "body": null,
          "is_bot": false,
          "headline": "chore(agents): document npm release publishing",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-07T23:33:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b490443973a82137e2ebac87e203df54bb50611",
          "body": "* fix(examples): make checked-in MCPs self-contained\n\n* fix(compile): typecheck artifacts from real tmp paths\n\n* chore(agents): add project workflow skills\n\n* fix(install): make browser-backed MCPs self-bootstrapping",
          "is_bot": false,
          "headline": "fix: make browser-backed MCP installs self-bootstrapping (#87)",
          "author_name": "Ashay Changwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-07T23:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c703a6ad4353c9c7b6414b313052b89657c2af76",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.3.0",
          "author_name": "Ashay Changwani",
          "author_login": null,
          "committed_at": "2026-06-06T21:41:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32a3f290f5ec6122dab3b555df0b4ba24920dfcf",
          "body": "…es, docs & demo (#84)\n\n* fix(compile): contain + amortize the compile CDP pool, prefer cdp-replay\n\n`runWorkflowWithLadder` (the compile/test path) created its CDP pool fresh per\ncall and never closed it. A winning cdp-replay therefore left a real Chrome open\nafter the function returned: `bun test` \n[…]\nild pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): reliable compile/ladder/audit pipeline + refreshed exampl…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-06T21:37:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b36253c6aa2514b6cf2e59866540af587c3ed82a",
          "body": "…y at exit (#86)\n\nPreviously, all three compile backends (in-process agent loop, claude-cli,\ncodex-cli) accumulated the conversation log in memory and wrote it to disk\nin a single writeFileSync at the very end. This meant that during a 10-20\nminute teach run, the log file either didn't exist or was \n[…]\ns the path computation that was previously split\n  between init and teardown.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): flush .compile-log.json after every turn instead of onl…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-06T01:32:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6c60e0a9947241097ccb3e8ccd3d152ab48121e3",
          "body": "Consolidated all the scattered debugging env vars, CLI flags, log file\npaths, and diagnostic commands for `imprint teach` into two places:\n\n1. A new CLAUDE.md section (\"Debugging teach runs\") with quick-reference\n   tables for env vars (IMPRINT_DEBUG, IMPRINT_REPLAY_DEBUG,\n   IMPRINT_TRACE, IMPRINT_\n[…]\ndit) in CLAUDE.md's skill index so all three are\ndiscoverable from one place.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add teach debugging guide and /debug-teach skill (#85)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T22:56:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ca6bb890f84e4be420e063751e02ccc8fdb5a9b2",
          "body": "The multi-progress renderer uses CSI CPL (\\x1b[nF) to move the cursor\nback up N lines before redrawing. It tracked N as the number of logical\nentries (map size), but when a line exceeded the terminal width it\nwrapped to 2+ physical lines, making the CPL count too small — the\ncursor didn't go back fa\n[…]\nape-sequence modes (CPL, CPL-raw, DECSC, CR)\nfor cross-terminal verification.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tui): truncate progress lines to prevent wrap-induced pile-up (#83)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T20:25:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "44f59198cc2db941c250ffc56909249a0d2b3806",
          "body": "* docs: overhaul README for professional open source look\n\n* docs: refine README with nav links, HTML table diagram, collapsible install\n\n* docs: add GitHub alert callout for security tip\n\n* docs: add tracing guide, param grounding, CDP pool, and cost rollup docs\n\nAdd standalone tracing.md deep-dive\n[…]\nmanifest.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: overhaul README and add deep-dive documentation (#82)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T19:19:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "df525aa0e8ab176e210353f932123bb22e23fa3c",
          "body": "* feat(compile): parallel probe, CDP pool, pickBaseUrl fix, date injection\n\nGeneral compile-time and runtime improvements for anti-bot sites:\n\n1. Parallel probe: race fetch/cdp-replay/stealth-fetch on the first\n   compile-time call (45s deadline). The fastest success wins and gets\n   memoized — a ta\n[…]\ngnostics.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): parallel probe, CDP pool, ladder fallback fixes (#81)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T11:34:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b05e9879f9765024230d8c8639896503f03846b3",
          "body": "…down (#80)\n\nPhoenix shows $0 on cli.teach / cli.audit root spans because cost\nattributes were only emitted on leaf LLM spans. Root spans had no\naggregate cost, so the trace-level view was blind to total spend.\n\nAdd `tracedWithCostRollup` — wraps `traced` with an AsyncLocalStorage\naccumulator that e\n[…]\n rolled-up cost and\nskip root spans in sumCostTotal to avoid double-counting.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tracing): roll up LLM costs to root spans with cache-aware break…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T05:32:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a8b981f65ef706e007a42df38e7801bba67f33a0",
          "body": "…and candidate-segmentation fix (#76)\n\n* feat(compile): differential param grounding + input-value provenance hints\n\nTwo grounding signals surfaced to the compile agent via read_session_summary, so\nit wires parameters from evidence in the recording instead of eyeballing one\nrequest and guessing.\n\n1.\n[…]\nnsistent.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(compile): differential param grounding, input-value provenance, …",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T00:35:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "40da218b6cc673f86ed87dce1c7381b9da78ecc3",
          "body": "Two local dev-workflow skills used while iterating on teach/audit runs:\n- imprint-teach-deepdive: structured deep-dive into a teach run's artifacts\n  (detect-candidates, build-plan, compile logs) for debugging compile output.\n- imprint-reteach-audit: re-teach a site from scratch and audit it end-to-\n[…]\nted tool artifacts and any recorded sessions\nare deliberately left untracked.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: add imprint reteach-audit + teach-deepdive dev skills (#79)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-05T00:34:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c422e2f319b491eb6d5dda7c180686ffc52c3205",
          "body": "… the tool (#78)\n\n* feat(audit): differentially test every advertised parameter, not just the tool\n\nThe audit was too shallow: it ran \"one realistic call + 1-2 edge cases per\ntool\" and scored purely on per-invocation verdicts. A parameter that is\ntemplated and reaches the API but has NO observable e\n[…]\nvel line.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(audit): differentially test every advertised parameter, not just…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-04T10:51:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "deb7aec971bc03b206ff554c73a5b7b400e0e610",
          "body": "* fix(teach): route build-plan progress through TUI spinner\n\nThe planning subtree (build-plan, teach-plan, prereq-builder) was writing\nprogress and failure messages directly to stderr via the module logger,\nwhich collided with the TUI spinner and produced garbled output during\n`imprint teach`.\n\nAdd \n[…]\n-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): route build-plan progress through TUI spinner (#74)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-04T07:25:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e011c08405692abfd04f0be677a935435aa4d1a7",
          "body": "…tch-bootstrap (#71)\n\nLands the full Akamai-surviving API-replay effort on main: fetch-bootstrap + cdp-replay rungs, NETWORK escalation across rungs, stealth Playwright/UA, compile-time capture cross-checks + bounded live .act volume, audit live-invocation gate, and the prereq-builder stale-import fix (valid shared signers no longer wrongly pruned). Squash of the fix-bot-defense-escape-hatch stack (incl. #72).",
          "is_bot": false,
          "headline": "fix(ladder): escalate NETWORK across rungs; stealth Playwright for fe…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-03T20:35:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b164593eb2b18961a8be693b9980550eead3073",
          "body": "The `llm.analyze` cost path was cache-blind. Verified against live Phoenix\ntraces: every recent LLM span was `llm.analyze` (playbook compilation, triage,\nprereq planning, tool-candidate/plan), 0/50 carried any cache-token data, and\nmany fell back to a chars/4 token estimate. Providers report `usage.\n[…]\nict (exit 3) with cost\nand turn counts recorded. 884 tests pass.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tracing): make LLM analyze + audit cost cache-aware in traces (#73)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-01T23:14:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b91e1eb5072aebcf24fc0b6029e38635834e45b",
          "body": "`imprint mcp` audited untracked session recordings as a fixable\n\"orphan-session\" issue: it listed each one, counted them per site, exposed\nthem in --json, and its interactive \"Fix an issue\" flow deleted them behind a\nsingle confirm. That contradicts Imprint's core principle — the recording IS\nthe ir\n[…]\ntay on disk, and updates the maintenance + troubleshooting docs.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(mcp): never report or delete orphan recordings (#70)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-01T02:01:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "54d1e8ba75c43eff5a2344385063eb4f278b4d8b",
          "body": "… gate (#69)\n\n* feat(teach): plan-driven multi-tool compile and headless-claude audit gate\n\nRaise MCP-tool execution accuracy by making the multi-tool teach pipeline\nplan-first and observable, and prove it with an automated acceptance gate.\n\nThe branch had grown two competing strategies for accuracy\n[…]\n-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(teach): plan-driven multi-tool compile and headless-claude audit…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-06-01T01:09:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "206a3de985fdf8510ee37896ff75a77ed1207992",
          "body": "…(#68)\n\n* feat(teach): parallel contract test framework + playbook extract fix\n\nAdds a TDD-like contract test framework that generates and runs test specs\nin parallel with the compile agent during `imprint teach`. When the compile\nagent finishes producing workflow.json + parser.ts, pre-written contr\n[…]\n Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(teach): parallel contract test framework + playbook extract fix …",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-29T10:17:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18cbb0494eba063817e94135d19e1271737b5c69",
          "body": "Configure the npm-publish release job to use npm's trusted publishing\nfeature, which authenticates via GitHub Actions OIDC — no NPM_TOKEN\nsecret needed. Requires Node 24 (ships npm >=11.5.1 which handles the\nOIDC token exchange internally). Provenance attestation is added\nautomatically by the truste\n[…]\nher config on npmjs.com.\n\nAlso bumps version to 0.2.1 and removes the .npmrc token template\nthat was causing local auth conflicts.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(release): add tokenless npm trusted publishing via OIDC",
          "author_name": "Ashay Changwani",
          "author_login": null,
          "committed_at": "2026-05-27T07:47:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4c75dbcff01db1d9d7c8745b5e6f977a0f05a7c1",
          "body": "* feat(dist): publish as npm package and standalone binary\n\nImprint was only installable via git clone + bun link. This adds two\ndistribution channels so users can install without cloning:\n\n**npm** — `bun install -g imprint-mcp` or `bunx imprint-mcp`. Ships\nTypeScript source directly (Bun runs it na\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(dist): publish as npm package and standalone binary (#63)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-27T06:48:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e53f6830287023bb61e16262163a6d13cc0baf74",
          "body": "The previous 10-minute default was too tight for complex tools that\ninvolve multi-request workflows. The compile agent writes the full MCP\nserver and runs thorough verification tests, so 10-15 minutes is\ntypical for non-trivial sites. Bumping to 20 minutes reduces spurious\ntimeouts without requiring\n[…]\nhat was\nalready out of date with the previous 10-minute default.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(compile): increase default timeout to 20 minutes (#65)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-27T00:23:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d194004dd486cddf156b5aee05d4ababf2f1e914",
          "body": "* fix(teach): make credential extraction body-shape-agnostic\n\nWhen generating MCP tools for the panw-canteen site, three tools shipped\nwith `userid`/`password` modelled as required workflow parameters\n(templated as `${param.X}` in the LOGIN body) instead of pulling from\nthe credential store via `${c\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): make credential extraction body-shape-agnostic (#64)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-27T00:13:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a59551290fbfed2c5c70351d4601fecd1cb47911",
          "body": "* feat(compile): interactive timeout extension for compile agents\n\nWhen a compile agent hits the wall-clock deadline (default 10 minutes),\nthe user is now prompted \"Give it more time?\" instead of the agent being\nkilled immediately. Accepting extends the deadline by 10 more minutes\n(repeatable). Decl\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(compile): interactive timeout extension for compile agents (#59)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-26T09:26:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "54793ab398f90735d1810100d97c3ab14cdf8c0d",
          "body": "* feat(teach): offer to combine past sessions before compile\n\nAfter recording a new session, `imprint teach` now lists past recordings\nfor the same site and offers to merge them with the new one. The combined\nsession feeds into triage and candidate detection so the LLM sees all\nrequests, events, and\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(teach): combine past sessions before compile (#61)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-26T08:59:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0660fa30abbc1c8a60a353eab2f3bb78927f7a40",
          "body": "Vertex required a billing-enabled GCP project, Vertex AI API access, and\nAnthropic Claude model allow-listing — a heavy setup burden that blocked\nsolo developers and OSS contributors. Now that anthropic-api, claude-cli,\nand codex-cli cover all use cases, Vertex adds complexity without unique\nvalue.\n\n[…]\nection test, Vertex-specific detection and status tests removed.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(llm): remove Vertex AI provider (#60)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-25T00:03:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e6ea9fb784c4af02a99830724816333d52d391ed",
          "body": "…(#58)\n\n* perf(compile): inline data + capture hints + credential pass-through\n\nThe compile agent was timing out on simple 2-3 request tools because the\nsession summary withheld all request/response content, forcing 20-30\nserial MCP tool calls that inflated context from 20K to 130K tokens.\nPhoenix t\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(compile): inline data + capture hints + credential pass-through …",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-24T06:56:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1d6d4823d224d4fbc3697da0dcf407d284e3fb26",
          "body": "…line (#57)\n\n* fix(teach): preserve cross-origin API requests in tool detection pipeline\n\nWeb apps that serve their frontend and API from different registrable domains\n(e.g. zipthruordering.com frontend + mynextep.net API) had all non-auth API\nrequests silently dropped at three independent stages: i\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): preserve cross-origin API requests in tool detection pipe…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-23T00:30:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a24e90abead107d1cbd2d2f0a6b9315c2dab0280",
          "body": "When --from-session was used and a .redacted.json already existed from\na previous run, the teach pipeline skipped the redact step entirely\n(startFrom = 'replay-and-diff'). This meant extractCredentials() never\nre-ran, so any improvements to credential detection (like the\nUSERNAME_KEY_RE expansion) h\n[…]\nes extraction always runs with the latest field detection logic.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): always re-run redaction for --from-session (#56)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T23:20:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ee5a9c40982eee9ca41429887f4905a6471b420",
          "body": "RPC-style APIs (e.g. panw-canteen's /foundation/api/execute) multiplex\nmany distinct operations through a single URL, distinguishing them only\nby request body content. The triage compaction grouped requests by\n[method, url, paramSignature, resourceType, status, mimeType] — no body\ninformation — so a\n[…]\nepeated requests (same URL + same\nbody) still compact correctly.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): include bodyDigest in triage grouping key (#55)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T22:54:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "174429351efabe2768bd0492375ff610996d93db",
          "body": "* fix(teach): auto-save credentials for userid/loginid login forms\n\nThe credential extractor (extractCredentials) missed login forms using\nfield names like `userid` or `loginid` because USERNAME_KEY_RE only\nmatched `user`, `username`, `email`, `login`, `account`, and patron\nvariants. Meanwhile `user\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): auto-save credentials for userid/loginid login forms (#54)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T21:55:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c8b3ba393ec3e0b25f95d7b6f66e76b137ee95bc",
          "body": "…C/DECRC (#53)\n\nThe multi-line compile progress display used DECSC/DECRC (\\x1b7/\\x1b8) for\ncursor save/restore. These are DEC private escape sequences that not all\nterminals implement — Warp being the notable one. When silently ignored,\nevery redraw appended all status lines instead of overwriting i\n[…]\nne. Also removes the now-unnecessary cursorSaved\nstate variable.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): use standard CSI CPL for multi-progress instead of DECS…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T21:25:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "69f213f4d45dd66c689dd9e508a58bbb618fc1fc",
          "body": "The replay-and-diff stage replays the entire recorded flow in a fresh\nbrowser session to classify request values as constant vs browser-minted\n(timestamps, CSRF tokens, etc.). This takes ~2 minutes and was previously\nalways-on unless --skip-replay was passed.\n\nNow, in interactive mode, the user is a\n[…]\nn-interactive mode and --skip-replay continue\nto work as before.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(teach): prompt user before replay stage (#52)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T21:03:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11b1908272d19c9cf08f0c35d62e0405ffa1147a",
          "body": "* feat: install emitted MCP servers\n\n* fix(install): address review findings from PR #49\n\nDeduplicate shellQuote and PLATFORMS — both were defined identically in\nintegrations.ts and install.ts. Now exported once from integrations.ts\nand imported everywhere (cli.ts, install.ts).\n\nAdd error handling f\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: install emitted MCP servers (#49)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T20:19:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7977092f011b9661ae43f978782f08c8f4cc7551",
          "body": "`imprint mcp` interactive flow previously presented \"Fix an issue\" as a\nsingle-select, so when the status scan turned up a long list of\nincomplete workflows, missing-session pointers, and orphan recordings,\nyou had to re-enter the menu once per issue. With long lists from a\nreal working directory (~\n[…]\nthe existing single-issue fix paths via a new `fixIssue` helper.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): bulk-fix issues via multi-select with select all/none (#51)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T20:12:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ee1b84c95db5a0efa4da8e07162131b819a2cb50",
          "body": "* feat(mcp): add maintenance utility\n\n* fix(mcp): clean up help text, unused params, and add interactive delete confirmation\n\nThree minor review fixes for the mcp maintenance commands:\n\n1. The --client flag description now mentions \"all\" as a valid value,\n   matching the usage line that already show\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(mcp): add maintenance commands (#50)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-22T19:57:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a1ecb4ebfb38abdcfa128a4a430a577b100ce423",
          "body": "* fix(compile): eliminate agent spinning and reduce compile time 5x\n\nTraced a 16-minute compile run via Phoenix and found five root causes for\nwasted turns:\n\n1. The system prompt referenced `src/imprint/types.ts` and told the agent\n   to read WorkflowSchema from it. The agent used `run_bash` with `s\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): eliminate agent spinning and reduce compile time 5x (#48)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-21T05:10:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ebf4ff6a918e32220291438478f30d54052c15d0",
          "body": "…and session discovery (#47)\n\n* fix(compile): increase default timeout to 10m, fix triage compaction and session discovery\n\nThe compile agent was timing out on complex sites (e.g., 84KB responses\nrequiring 15+ turns of exploration and debugging). The 5-minute default\nwas too tight for Opus on Vertex\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): increase default timeout to 10m, fix triage compaction …",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-16T07:10:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ab3898efd7f0bf039b14e34eb13c5e5546a24d62",
          "body": "…s (#45)\n\n* fix(compile): retry integration test 3x before failing verification\n\nLive API endpoints can return transient empty responses — the Avis mrbb\nendpoint intermittently returns 0 vehicles between calls even with identical\nparameters. A single flaky response was triggering a full verification\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tracing): parent agent.turn spans under compile agent in CLI path…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T11:43:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5c1d721cdb98cebdf63e5fd33300b93e527ccfe1",
          "body": "…#46)\n\nLive API endpoints can return transient empty responses — the Avis mrbb\nendpoint intermittently returns 0 vehicles between calls even with identical\nparameters. A single flaky response was triggering a full verification cycle\nretry (30-100s and thousands of tokens wasted).\n\nNow retries the in\n[…]\nthe time, a single transient glitch shouldn't block compilation.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): retry integration test 3x before failing verification (…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T11:16:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b609319ca69a6171921d27d232a54b9eb8878aa8",
          "body": "…ll (#44)\n\n* fix(compile): fix runtime JSON parsing, compile agent path discovery, and pre-install\n\nThree root causes made `imprint teach` / `imprint generate` fail or time out\non sites whose APIs return non-standard Content-Type headers (e.g. Avis returning\n`text/html` with a JSON body):\n\n1. The ru\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(compile): fix runtime JSON parsing, path discovery, and pre-insta…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T10:58:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "44739bc49ee2c8b89dccc8da259896fda2aa283b",
          "body": "* feat(llm): expand available model lists for all providers\n\nThe model dropdowns in `imprint teach` only offered 2 models per\nprovider, missing many current options. Updated to include:\n\n- Anthropic: added claude-haiku-4-5, claude-opus-4-6, claude-sonnet-4-5,\n  claude-opus-4-5 alongside the existing\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(llm): expand available model lists for all providers (#43)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T09:27:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c3ade1413b838ffdf10ae9286eb96e6fb49c7cd5",
          "body": "…rallelism (#42)\n\nMajor teach pipeline overhaul with four interrelated changes:\n\n1. Site-level dual-pass replay: replays the entire recording in a fresh\n   browser using raw DOM events (not per-tool playbooks) to classify\n   values as constant/server_derived/browser_minted. Replaces the broken\n   pe\n[…]\ndetect → select]\n→ generate → compile-playbook → emit → register\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(teach): dual-pass replay, compile timeout, model picker, deep pa…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T09:18:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4686a8024ddf1f373a2ced81a751042480eabdc0",
          "body": "…g (#41)\n\n* fix(teach): use DECSC/DECRC for reliable multi-tool progress rendering\n\nThe multi-tool compile progress in `imprint teach` was printing noisy\nscrolling output instead of updating lines in-place. The root cause was\ntwofold:\n\n1. The previous implementation used CSI CUU (`\\x1b[nA`) relative\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): use DECSC/DECRC for reliable multi-tool progress renderin…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T07:10:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0ee832cdac5fc4051492b12581cf75da4ecf960d",
          "body": "…harness (#40)\n\nThe OpenTelemetry SDK defaults to 128 attributes per span. Phoenix's\ngetLLMAttributes() flattens each input message into 2+ attributes (role,\ncontent, tool_calls…), so conversations past ~56 messages silently hit\nthe cap. When that happens, setSpanAttributes() after the LLM response\n\n[…]\n\nthat wasted ~28 turns and ~500k tokens in the Avis compilation.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): fix tracing token loss and pre-install @types in compile …",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T02:36:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e45f178e1e6d2a666b4c8389e9e16fe358d01df1",
          "body": "Generated tools at ~/.imprint/<site>/<tool>/index.ts import from\n'imprint/runtime', resolved through a node_modules/imprint symlink\ncreated by `imprint emit`. The symlink targets the repo path that ran\nemit. If that path moves or vanishes (Conductor workspaces, git\nworktrees, repo relocations), ever\n[…]\nloaded\nand the link now points at the running repo.\n\nDocs updated to reflect that the symlink is maintained at both emit\nand runtime.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>",
          "is_bot": false,
          "headline": "fix(runtime): self-heal node_modules/imprint symlink at tool load (#36)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T01:59:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fafc64780d425caa6f98ccbbd70f39a07925c2bd",
          "body": "…#38)\n\nThe --keep-test flag on `teach` and `generate` retains the agent-generated\nparser.test.ts and integration.test.ts after compilation. Previously it was\nonly available as a CLI flag, which meant users who always want test retention\nhad to pass it every time.\n\nNow IMPRINT_KEEP_TEST=1 works as an\n[…]\n ?raw imports from docs/, so changes flow through automatically.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cli): support IMPRINT_KEEP_TEST=1 env var for --keep-test flag (…",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T01:58:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "413741c742347fbc4716cf76d200ff2f0a4b3339",
          "body": "* fix(teach): update multi-tool progress lines in-place instead of scrolling\n\nWhen `imprint teach` compiles multiple tools concurrently, each agent fires\n30-80+ progress events (\"thinking\" → \"running command\" → \"thinking\" → …).\nWith concurrency 3, the old code wrote every update as a new stderr line\n[…]\n Claude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(teach): update multi-tool progress lines in-place (#35)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T01:56:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6becad0da7529cfb39b33abe3f73716c810aecb3",
          "body": "Every push and PR was triggering a Vercel preview build for the website,\nwhich is unnecessary churn — the site only needs to deploy on merges to\nmain. Added `ignoreCommand` to `web/vercel.json` that checks\n`$VERCEL_ENV`: preview builds exit 0 (skip), production builds exit 1\n(proceed). This is the o\n[…]\nly documented approach from Vercel's\nproject configuration docs.\n\nCo-authored-by: Ashay Changwani <achangwani@paloaltonetworks.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(web): disable Vercel preview deployments (#37)",
          "author_name": "ashaychangwani",
          "author_login": "ashaychangwani",
          "committed_at": "2026-05-15T01:56:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 25,
      "commits_last_year": 282,
      "latest_release_at": "2026-07-18T02:28:49Z",
      "latest_release_tag": "v0.6.5",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 12,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 2.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "imprint-mcp",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/imprint-mcp",
          "is_deprecated": false,
          "latest_version": "0.6.5",
          "repository_url": "https://github.com/ashaychangwani/imprint",
          "versions_count": 24,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2525,
          "first_published_at": "2026-05-27T07:09:25.255000Z",
          "latest_published_at": "2026-07-18T02:29:05.772000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 18,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-05-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 7
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 189362,
      "source_files_sampled": 249,
      "oversized_source_files": 11,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 10645
    },
    "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": "@anthropic-ai/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.52.0"
        },
        {
          "name": "@arizeai/phoenix-otel",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.2"
        },
        {
          "name": "@clack/prompts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.3.0"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "@napi-rs/keyring",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.3.0"
        },
        {
          "name": "@noble/hashes",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.0"
        },
        {
          "name": "@opentelemetry/api",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.9.1"
        },
        {
          "name": "chrome-remote-interface",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.33.0"
        },
        {
          "name": "env-paths",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "libsodium-wrappers",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.8.4"
        },
        {
          "name": "node-cron",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.3"
        },
        {
          "name": "playwright",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.49.0"
        },
        {
          "name": "playwright-extra",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        },
        {
          "name": "puppeteer-extra-plugin-stealth",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.2"
        },
        {
          "name": "redactum",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.0"
        },
        {
          "name": "semver",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.8.4"
        },
        {
          "name": "tldts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.4.8"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.8.4"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.24.0"
        },
        {
          "name": "@vitejs/plugin-react",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "6.0.1"
        },
        {
          "name": "highlight.js",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.11.1"
        },
        {
          "name": "react",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.6"
        },
        {
          "name": "react-dom",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.6"
        },
        {
          "name": "react-markdown",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.1.0"
        },
        {
          "name": "react-router-dom",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.15.0"
        },
        {
          "name": "rehype-highlight",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.2"
        },
        {
          "name": "rehype-slug",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.0"
        },
        {
          "name": "remark-gfm",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "vite",
          "manifest": "web/package.json",
          "ecosystem": "npm",
          "version_constraint": "8.0.12"
        }
      ],
      "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": 3,
        "merged_prs": 108,
        "open_issues": 4,
        "closed_ratio": 0.2,
        "closed_issues": 1,
        "closed_unmerged_prs": 8
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "ashaychangwani",
          "commits": 128,
          "avatar_url": "https://avatars.githubusercontent.com/u/29693329?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "commitlint.yml",
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/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": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "35 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a16fdfc4a50a049a52b6adffbaea588c21d2c384",
        "ran_at": "2026-07-23T11:36:13Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-18T02:29:12Z",
      "oldest_open_prs": [
        {
          "number": 12,
          "created_at": "2026-05-06T20:03:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 77,
          "created_at": "2026-06-04T10:39:55Z",
          "last_comment_at": "2026-06-04T10:40:02Z",
          "last_comment_author": "vercel"
        },
        {
          "number": 124,
          "created_at": "2026-07-21T05:02:23Z",
          "last_comment_at": "2026-07-21T05:02:29Z",
          "last_comment_author": "vercel"
        }
      ],
      "last_merged_pr_at": "2026-07-18T02:05:35Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 101,
          "created_at": "2026-06-24T18:16:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 104,
          "created_at": "2026-06-25T01:19:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 107,
          "created_at": "2026-06-26T08:13:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 117,
          "created_at": "2026-07-09T09:20:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ashaychangwani/imprint",
    "host": "github.com",
    "name": "imprint",
    "owner": "ashaychangwani"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 57,
      "inputs": {
        "security": 31,
        "vitality": 73,
        "community": 47,
        "governance": 48,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 73,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "commits_last_year": 282,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 12
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "12/52 weeks with commits",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 12
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "282 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 282
                    }
                  }
                ],
                "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": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 25,
              "latest_release_tag": "v0.6.5",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 2.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "25 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 25
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 47,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "forks": 1,
              "stars": 18,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "18 stars",
                "points": 20,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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": 18,
                "status": "met",
                "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": 57,
            "inputs": {
              "packages": [
                "imprint-mcp"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2525
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,525 downloads/month across npm",
                "points": 45.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2525,
                      "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "merged_prs": 108,
              "open_issues": 4,
              "closed_issues": 1,
              "issue_closed_ratio": 0.2,
              "closed_unmerged_prs": 8
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "20% of issues closed",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 20
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "108/116 decided PRs merged",
                "points": 35.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 108,
                      "decided": 116
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "followers": 15,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "ashaychangwani",
              "public_repos": 113,
              "account_age_days": 3314
            },
            "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": "15 followers of ashaychangwani",
                "points": 8.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 15,
                      "login": "ashaychangwani"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "113 public repos, account ~9 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 113
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "imprint-mcp"
              ],
              "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": "24 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 81,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "ai-agents",
                "browser-automation",
                "bun",
                "claude",
                "llm",
                "mcp",
                "mcp-server",
                "typescript",
                "web-scraping"
              ],
              "has_wiki": true,
              "homepage": "https://github.com/ashaychangwani/imprint",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://github.com/ashaychangwani/imprint",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.1
            },
            "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": "17 out of 17 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/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 dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "35 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "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": "moderate",
        "name": "AI Readiness",
        "value": 66,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 10645
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.54,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "54 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 54,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 189362,
              "source_files_sampled": 249,
              "oversized_source_files": 11
            },
            "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": "11/249 source files over 60KB",
                "points": 52.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 249,
                      "oversized": 11
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:imprint-mcp@0.6.5; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T11:36:28.474668Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/ashaychangwani/imprint.svg",
  "full_name": "ashaychangwani/imprint",
  "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.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.