Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-25 04:18 UTC

saaranshM / unsnooze

Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps

JavaScriptMIT★ 60 stars⑂ 3 forkssince Jul 2026View on GitHub ↗

saaranshM/unsnooze holds a health index of 59 out of 100, placing it in the Moderate band. It scores highest on Vitality (74/100) and lowest on AI Readiness (43/100). It was last updated 4 days ago. A single contributor accounts for most of its recent work.

59
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

59
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

Saaransh MenonPersonal account
5 followers28 public repossince Jan 2019Mosambee

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

74Good · 22% of overall
How it's scored
36/36Push recency — last push 4 days ago
2.1/36Commit cadence — 3/52 weeks with commits
18/18Commit volume — 153 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year153
human_commit_share1
days_since_last_push4
active_weeks_last_year3

Release discipline

100Excellent
How it's scored
27/27Ships releases — 15 releases published
36/36Release recency — latest release 5 days ago
27/27Release cadence — a release every ~0.8 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count15
latest_release_tagv1.14.0
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases0.8
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

44At risk · 18% of overall
How it's scored
28.7/60Stars — 60 stars
2.5/25Forks — 3 forks
0/15Watchers — 0 watchers
Inputs used
forks3
stars60
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
45/80Monthly downloads — 2,363 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesunsnooze
dependents
ecosystemsnpm
total_downloads
monthly_downloads2,363
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

57Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
46.8/46.8Issue resolution — 100% of issues closed
38.2/38.3PR acceptance — 1/1 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs1
open_issues0
closed_issues1
issue_closed_ratio1
closed_unmerged_prs0
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
5.6/25Owner reach — 5 followers of saaranshM
22.6/25Track record — 28 public repos, account ~7 yr old
Inputs used
followers5
owner_typeUser
is_verified
owner_loginsaaranshM
public_repos28
account_age_days2,747
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 5 days ago
20/20Version history — 15 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesunsnooze
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Engineering Quality

Are baseline engineering and documentation practices in place?

66Moderate · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://unsnooze.combustortech.in
10/10Repository description
10/10Topics — 20 topics
10/10Wiki
Inputs used
topicsagentic-coding, ai-agents, anthropic, auto-resume, claude-code, cli, codex, codex-cli, grok, openai, rate-limit, tmux, usage-limit, claude, antigravity, kimi, opencode, openrouter, qwen, zellij
has_wikiyes
homepagehttps://unsnooze.combustortech.in
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

47At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — no data
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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 13 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3.4
Excluded from scoring (no data or not applicable): ci_tests, signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages45
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:unsnooze@1.14.0 runtime dependency closure — what installing the published package pulls in — 45 packages. Reachability is not analyzed.

AI Readiness

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.

43At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 97 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.97
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
0/11Static type checking
10/10Reproducible environment — lockfile
6/10Demonstrated agent practice — 3 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0.03
toolchain_manifests
dependency_bot_commit_share0
How it's scored
0/45Type-checkable code — JavaScript without a type-check config
55/55Manageable file sizes — 0/159 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes56,273
source_files_sampled159
oversized_source_files0

Key facts

60GitHub stars
1contributors
153commits, last 12 months
4days since last push
15releases
1bus factor
0open issues
npmpackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 3 ⇿
0Stars
3Forks
7Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

222333322026-072026-072026-07
Major 0Minor 4Patch 3
OpenSSF Scorecard 3.4 / 10
3.4aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-25 04:18 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
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
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities13 existing vulnerabilities detected
Direct dependencies 9
RegistryPackageVersion constraintManifest
npm@clack/prompts^1.7.0package.json
npmink^7.1.1package.json
npmpicocolors^1.1.1package.json
npmreact^19.2.7package.json
npmframer-motion^12.23.0website/package.json
npmmarked^18.0.6website/package.json
npmnext^16.2.0website/package.json
npmreact^19.2.0website/package.json
npmreact-dom^19.2.0website/package.json
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Dependency advisories 0

Installing npm:unsnooze@1.14.0 pulls in 45 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "agentic-coding",
        "ai-agents",
        "anthropic",
        "auto-resume",
        "claude-code",
        "cli",
        "codex",
        "codex-cli",
        "grok",
        "openai",
        "rate-limit",
        "tmux",
        "usage-limit",
        "claude",
        "antigravity",
        "kimi",
        "opencode",
        "openrouter",
        "qwen",
        "zellij"
      ],
      "is_fork": false,
      "size_kb": 3452,
      "has_wiki": true,
      "homepage": "https://unsnooze.combustortech.in",
      "languages": {
        "CSS": 28792,
        "Shell": 33449,
        "JavaScript": 1242539
      },
      "pushed_at": "2026-07-20T17:24:10Z",
      "created_at": "2026-07-10T11:27:52Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T18:31:34Z",
      "description": "Auto-resume Claude Code, Codex CLI, Grok, Qwen Code, Kimi CLI, OpenCode & Antigravity when the 5-hour/weekly usage limit resets — tmux, Zellij, VS Code & desktop apps",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "saaranshmenon.me",
      "name": "Saaransh Menon",
      "type": "User",
      "login": "saaranshM",
      "company": "Mosambee",
      "location": "Mumbai, Maharashta",
      "followers": 5,
      "avatar_url": "https://avatars.githubusercontent.com/u/46712446?v=4",
      "created_at": "2019-01-15T11:58:43Z",
      "is_verified": null,
      "public_repos": 28,
      "account_age_days": 2747
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2026-07-19T07:15:32Z"
        },
        {
          "tag": "v1.12.2",
          "kind": "patch",
          "published_at": "2026-07-16T11:07:27Z"
        },
        {
          "tag": "v1.12.1",
          "kind": "patch",
          "published_at": "2026-07-16T11:07:27Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-07-14T07:38:47Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-07-13T08:18:57Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2026-07-12T19:45:18Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-07-12T19:15:49Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-12T10:55:45Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-11T20:36:56Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-11T19:52:47Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-07-11T19:52:45Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-07-11T19:43:46Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-10T17:48:56Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-10T11:28:29Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-07-10T11:28:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c9428e49cc4450044fed37585d8a521eddabdc8d",
          "body": "The docked sun only re-measured its landing spot on scroll-progress\nchanges, so a mobile URL-bar collapse, overscroll bounce, or late layout\nshift moved the footer horizon out from under it. It now re-syncs on\nwindow/visualViewport scroll+resize and a body ResizeObserver, and lands\nfully at 99.5% sc\n[…]\nwhole pill\nis the trigger, idling as a live terminal line with a blinking caret. On\ntap the command dims and a tiny sun rises inside the pill with \"copied\" —\nthe site's night-to-dawn arc in miniature.",
          "is_bot": false,
          "headline": "fix(site): mobile sun-horizon alignment; install pill is the copy button",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-20T17:24:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1157e9ee4cb9fed72918806ac2f5ba17256a029c",
          "body": "…button\n\nThe hero badge was hardcoded v1.13 while npm latest is 1.12.2 — now the\nhome page reads the same npm-cross-checked changelog source at build time,\nso the badge always matches what actually shipped. Install-pill copy\nbutton swaps its text label for a clipboard/check icon that fits on\nmobile.",
          "is_bot": false,
          "headline": "fix(site): hero version badge from npm-verified changelog; icon copy …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-20T17:05:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8def7e0a07d0b5bea1dc842ebe1f8f238aaaf23d",
          "body": null,
          "is_bot": false,
          "headline": "chore(site): IndexNow key file for search engine submission",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-19T07:30:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c989f5b4a6e574c4302f3666cd8ba513c07217b",
          "body": "…ows shipped history up to npm latest\n\n- package.json homepage + README site link + repo homepage → the new domain\n- website changelog: a dated section at or below npm's latest is shipped\n  history even when folded into a later publish (1.13.0 ships inside 1.14.0)",
          "is_bot": false,
          "headline": "chore: point homepage at unsnooze.combustortech.in; changelog page sh…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-19T07:14:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ae72c0b8a7b3f89fc531bea07caa038473fb1fb",
          "body": "- guards grid in #prompts was glued to the terminal (elsewhere it follows a\n  lede with bottom margin) — 18px top margin\n- the queued-prompt terminal now scrolls horizontally instead of wrapping\n  its aligned log lines on mobile\n- the center-rising sun dims to 35% while crossing the text column on wide\n  screens (mobile already dimmed), restoring to full as it docks in the\n  footer — command/FAQ rows stay readable during the sunrise leg",
          "is_bot": false,
          "headline": "fix(site): prompts-section spacing + sun readability over text",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-19T06:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6210dc0ac911178add648bcdae872462688e8ef",
          "body": "…p does not exist on win32)",
          "is_bot": false,
          "headline": "ci: cross-platform project fixture in prompt-cli tests (hardcoded /tm…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T23:05:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bf87955d165257e1549ed1bf193fbee4921bed5",
          "body": "…skip unix-only 0700/fake-ssh asserts",
          "is_bot": false,
          "headline": "ci: fix win32 test failures — file:// ESM import in mouse exit test, …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T23:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a340eb1db0828861cffef6f28fb356b6beb3416",
          "body": "…oard prompts tab, command row",
          "is_bot": false,
          "headline": "feat(site): queued prompts on the landing page — 03:00 section, dashb…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T22:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3bcbe91b55dc2ab011becafa7a3c905c836662b",
          "body": "…covery, statusline anchor, CLI/TUI traps\n\nFinal-review fix wave: CAS-guard every exit from 'launching' (retry/fail/\ndeliver) so a concurrent cancel can never be resurrected or spuriously\nnotified; stamp launchedAt and sweep crash-stranded launches back to\npending; feed the statusline-exact reset in\n[…]\nare trailing --host instead of silently clearing the local queue;\nsuppress dashboard global keys during the remove y/n confirm, not just\nthe add-form; and measure verify delay from the real send time.",
          "is_bot": false,
          "headline": "fix: prompt-queue hardening — launching-state CAS, stranded/orphan re…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T22:22:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b15a9b82b7d536c0adee5546e68fa731e346e9ca",
          "body": "…bsite)",
          "is_bot": false,
          "headline": "docs: dashboard tab lists include fleet and prompts (help, README, we…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T22:00:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5d4306f53ab392ea50fb42ee22d7d6704ffaf6b",
          "body": null,
          "is_bot": false,
          "headline": "docs: queued prompts — README, website docs, changelog 1.14.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4647252c8933ab1000090978e835cbb089069c12",
          "body": "submitFinal had zero automated coverage (local queueAdd branch, remote\nremoteQueueAdd branch, duplicate-error formatting, success onRefresh/\nonStatus/setForm wiring). Extract it into an exported submitFinal(state,\nvalue, deps) alongside the existing formReduce/initFormState pure\nhelpers, with queueA\n[…]\nAddFn/readHostsFn injected so tests\nnever spawn or hit the network. Extract removeEntry the same way for the\nlist view's y/n confirmation. PromptsTab now calls both with real deps;\nbehavior unchanged.",
          "is_bot": false,
          "headline": "test: cover Prompts-tab write path via extracted submit handler",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:42:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c3470d60577327e8782ee567f89261818f3aa4f",
          "body": null,
          "is_bot": false,
          "headline": "feat: dashboard Prompts tab — queue list, add-form, TextInput",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:31:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83b02719af881c8ef542471e356b649464a1fd9a",
          "body": "…unts)",
          "is_bot": false,
          "headline": "feat: dashboard read surfaces for prompt queue (status hint, fleet co…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:11:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9d87f6550bec01792f3f981a8789b8791ebef3f",
          "body": "…ue gate",
          "is_bot": false,
          "headline": "feat: fleet prompt queue — remote verbs, controller client, remoteQue…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T21:02:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cb787aa0cb6b7ca20a4d5a875af47d528f7dd52",
          "body": null,
          "is_bot": false,
          "headline": "feat: unsnooze prompt — queue CLI (add/list/remove/clear), status block",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:46:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c54989c1721a0bf970beb3ad0bcea9088ceafb6d",
          "body": "… stars, starfield on subpages\n\nShared deterministic <Stars /> component: every star gets its own phase and\nduration so the sky never pulses in sync; ~1 in 6 stars glints with a soft\nglow and scale-up. Docs, changelog, feedback and 404 get a dimmed static\nlayer of the same sky. Reduced-motion stills everything as before.",
          "is_bot": false,
          "headline": "feat(site): livelier star twinkle — per-star periods, glinting bright…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:40:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9362f9bf331ac7d62f01d536f00145024c83ea95",
          "body": "…ublished versions only\n\nThe changelog page now cross-checks CHANGELOG.md entries against the npm\nregistry at build time — merged-but-unpublished versions (currently 1.13.0)\nstay off the site until they actually ship, no hardcoded exclusions.",
          "is_bot": false,
          "headline": "feat(site): animated sleeping z's in the brand; changelog shows npm-p…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:35:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f7606c3ce38de0c33bbd66aa8919f78e4fb8427",
          "body": "updateEntry returns the post-state regardless of who performed the\ntransition, so a losing concurrent dispatchPromptEntry call read\nstatus: 'launching' back even though it applied a no-op patch, and\nproceeded to open a second window. Capture the CAS outcome directly\nin the mutator closure instead of inferring it from the returned\nstatus.",
          "is_bot": false,
          "headline": "fix: prompt dispatch CAS actually detects a lost pending→launching race",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1c52c59d1bb55447fd8eba62f2e8422b5f49749",
          "body": "… lifecycle, notify",
          "is_bot": false,
          "headline": "feat: prompt queue delivery — fresh-session dispatch at reset, daemon…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:24:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a88ef50e8ebc504e005ea9977c91006448565152",
          "body": "…links under 560px",
          "is_bot": false,
          "headline": "fix(site): mobile nav — nowrap brand, two-row layout with scrollable …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T19:02:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14f2c4ac9a31bb26ed6d2076aedfbc1eef994241",
          "body": null,
          "is_bot": false,
          "headline": "refactor: adapter launchArgs + extract awaitReadyAndSend from reopen",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:56:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f82d3d4d3dda74ed128d341090193fec99478f2",
          "body": null,
          "is_bot": false,
          "headline": "chore: gitignore .vercel and .env* (vercel link artifacts)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e50a583f003e4c2f748d9bc4ae6a5c4fd5d81bf9",
          "body": "… labeled compare header\n\n- --faint #5b6470 → #78828f (3.26:1 → ≥4.8:1 on night/panel backgrounds)\n- contract dl: Reveal renders the group div directly (dl > div > dt+dd)\n- comparison table corner header gets an sr-only 'Capability' label",
          "is_bot": false,
          "headline": "fix(site): a11y to 100 — AA contrast for faint text, valid dl groups,…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:52:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02d11af3b51dfd3d6c0e00150fc3bfa8ac9d8f32",
          "body": "…ueue.js)",
          "is_bot": false,
          "headline": "feat: prompt queue core — state promptQueue + CRUD/due-ness (prompt-q…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:47:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e25730c1f562372bb0cbe628ef476bc415edaf86",
          "body": "- App Router in website/: / + /docs/ + /changelog/ statically generated\n  (full HTML at build), /feedback/ force-dynamic SSR so fresh submissions\n  are server-rendered into every response\n- changelog reads ../CHANGELOG.md at build via fs (same in-sync guarantee)\n- SEO: per-route keyword-tuned metada\n[…]\npositioned celestial; Lighthouse perf 97 / SEO 100\n- retire GitHub Pages (workflow deleted); Vercel deploys from website/ root\n- env renamed to NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY",
          "is_bot": false,
          "headline": "feat: migrate website to Next.js 16 — SSR on Vercel, max SEO",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T18:31:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c3d80876b618d1fe7714518195167427ba95f7d",
          "body": "…❯ brand restored\n\n- /feedback/ route: bug/idea board backed by Supabase (thin PostgREST client,\n  honeypot, RLS: anon may insert visible+new and read non-hidden — no\n  update/delete); schema in website/supabase/schema.sql, deploy env via\n  repo Variables in pages.yml\n- docs: full multi-host fleet s\n[…]\nard mock: fleet tab, real tab order, doctor tab matches real TUI\n- logo experiment reverted — back to the amber ❯ brand everywhere\n- celestial: moon starts below the nav; docks into the footer horizon",
          "is_bot": false,
          "headline": "feat: website v2 — supabase feedback board, fleet docs, audit fixes; …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T17:51:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c3defa2c827bbd44451b9e907edffd56c52cb56",
          "body": "Each Fleet-tab host header now shows a dim auth tag (`key`, `pw:command`,\n`pw:keychain`, `pw:env`, `pw:prompt`) from the host descriptor, so you can\ntell at a glance what a host authenticates with — and, for a needs-auth\nhost, why. Absent descriptor → no badge (legacy-safe).",
          "is_bot": false,
          "headline": "feat: fleet dashboard — per-host auth badge (key / pw:<source>)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T11:21:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0602962c38481373b30d1349b1c794a154d8aabb",
          "body": "…urface the secret)\n\nresolveCommand's AuthError embedded the failed command's stderr (capped/\nstripped but not redacted), so a secret-manager command that debug-prints\nthe password to its own stderr on failure could show a short value in the\nuser's `hosts test` output. Build the message from the exit code alone:\ndefaultShellRun now carries `.status` and no stderr; resolveCommand reports\nonly `command source failed (exit N)`. Removes the now-unused\nstripControlChars helper.",
          "is_bot": false,
          "headline": "fix: redact command-source stderr from resolveCommand errors (never s…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T11:14:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f76a8bf94e6993dc40634463cf31c29e734eda5",
          "body": "The unsnooze mark — a crescent moon cradling the terminal prompt, z's\ndrifting off — as assets/logo.svg, inlined in the site nav (LogoMark),\ncarried by every page favicon, and atop the README.\n\nWebsite: Vite + React, three static routes (landing / docs / changelog,\nthe changelog rendered straight from CHANGELOG.md), night-sky-to-dawn\nscroll treatment. Deployed to Pages by .github/workflows/pages.yml on\npushes touching website/ (build in CI; dist/ and node_modules stay\nuntracked).",
          "is_bot": false,
          "headline": "feat: logo + project website (GitHub Pages)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T10:52:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1524b99d1adef25a99b03a298197f47ad60d88fc",
          "body": "…SKPASS actually runs; confirm-prompt guard, serial interactive prompts, tightened auth-fail match",
          "is_bot": false,
          "headline": "fix: fleet password auth — drop BatchMode for password hosts so SSH_A…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T08:30:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b73d28338e260847feb402242e34d37c7d8ef81",
          "body": null,
          "is_bot": false,
          "headline": "docs: changelog — attribute keychain recipes to the right OS",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T08:05:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c7edd0043ef764e9c46682ccefb6750d242376d",
          "body": null,
          "is_bot": false,
          "headline": "docs: fleet password auth — sources, per-OS recipes, security posture",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T08:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9dcc93e611bc1a96ed973f5e7c95912b941c303",
          "body": "fetchHost/remoteAction now surface a distinct state:'needs-auth' (HostResult)\n/needsAuth flag (ActionResult) instead of a plain unreachable/error, either\nwhen sshEnvForHost has no resolvable credential (short-circuits before\nspawning ssh at all) or when ssh exits 255 with an auth-failure stderr on a\n[…]\nare dest string) from\nthe dashboard's Fleet tab into remoteAction, so R/C resume/cancel from the\ndashboard actually uses a password host's configured auth instead of\nsilently falling back to key auth.",
          "is_bot": false,
          "headline": "feat: fleet needs-auth state + hosts test pre-flight",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:49:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05633a8afbd20a5716336df365ba5e7dc39ec832",
          "body": "…r gated by ssh flavor",
          "is_bot": false,
          "headline": "feat: fleet ssh wiring — askpass env for password hosts, ControlMaste…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:33:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dc1843eebf01e2ec14c8bf68eb6e63871b160f6",
          "body": "…lper provisioning",
          "is_bot": false,
          "headline": "feat: _askpass helper — no-echo prompt, secret-to-stdout contract, he…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a0d6558b1a3deadc2f4070c79dde9da6f2bb026",
          "body": "…cted\n\ncommand source shell-executes the user's own trusted cmd string\n(git-credential-helper style) instead of naive argv-splitting, so\nquoted args with spaces work correctly. Built-in keychain support is\nmacOS-only; Windows and Linux throw AuthError pointing at --source\ncommand, dropping the unverified Windows CredRead P/Invoke blob.",
          "is_bot": false,
          "headline": "feat: askpass source resolvers (env/command/keychain/prompt), OS-inje…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T07:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52d84b43c87c6493256ab9611f9e1785853d8ac1",
          "body": "…tion, add flags",
          "is_bot": false,
          "headline": "feat: fleet host descriptors — per-host auth/source, string→key migra…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T06:59:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15a1c7ba847844dbec0f8779ad4efc5cfba2d1a2",
          "body": "…ion was silently empty)",
          "is_bot": false,
          "headline": "fix: capture ssh -V banner from stderr via spawnSync (live ssh detect…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T06:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "895e1be3026c8d378198032545e64d7f901fe1f5",
          "body": "…scovery",
          "is_bot": false,
          "headline": "feat: fleet — parse ssh -V for version/flavor + cross-platform ssh di…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-18T06:37:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7b3fd064df3af2d04ebb940c251076cefcb6035",
          "body": "… on ingest (no paste-RCE / row spoofing)",
          "is_bot": false,
          "headline": "fix: fleet — validate muxSession in attach hints, strip newlines/tabs…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:41:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2254d035760aeea754f5a91eac4e0b23a0d9fcd",
          "body": null,
          "is_bot": false,
          "headline": "docs: fleet resume key is uppercase R (lowercase r refreshes)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:29:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "925bdaca3ac1163f5360a9b1d3a16cb135f22b70",
          "body": "…tup)",
          "is_bot": false,
          "headline": "docs: fleet — multi-host sessions over your own ssh (trust story + se…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd89ac3777c4129353044045503cf4ca6fb19875",
          "body": "…tach hints",
          "is_bot": false,
          "headline": "feat: dashboard fleet tab — cross-host sessions with staleness and at…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:15:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce0c7e5ac314171fd0dd1e110f9ca5c8ebde4b0f",
          "body": "…read",
          "is_bot": false,
          "headline": "fix: self-contained fetch timeout + re-sanitize stale fleet cache on …",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T13:07:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dfb008d03349e1fd27ae1d5d184f44cc6e2d749",
          "body": "…d sanitized ingest",
          "is_bot": false,
          "headline": "feat: unsnooze fleet — parallel ssh fan-out with cache, staleness, an…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:58:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7259f0ad9e3ab73b60a53372b4eb23df792d9289",
          "body": null,
          "is_bot": false,
          "headline": "fix: _remote always emits one framed line even on write-path exceptions",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:49:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "caca207ed56d7ea6146e3001012a81bb6b1e23da",
          "body": "…/resume/cancel)",
          "is_bot": false,
          "headline": "feat: unsnooze _remote — forced-command-safe fleet entrypoint (status…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b8a253ec9e6c6d051889feafdba613234af74a9",
          "body": null,
          "is_bot": false,
          "headline": "feat: status --json + shared markResumeNow core for remote triggering",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:32:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0598f56b6ee7f2d6434649c3bddc076a55fccb7e",
          "body": "… handler exists",
          "is_bot": false,
          "headline": "fix: keep strict asserts in fleet tests; don't route fleet before its…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c2321df9eea4a8a0023b51439570a5cdd2a50fe",
          "body": null,
          "is_bot": false,
          "headline": "feat: unsnooze hosts — registry for fleet ssh destinations",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6136679b647dac2f41551e779c9a00f5dfc4bf46",
          "body": "… sanitized envelopes",
          "is_bot": false,
          "headline": "feat: fleet primitives — host validation, hardened ssh argv, framed +…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T12:10:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6954432c51ca1648f9282d411888df0478bddb77",
          "body": "… on re-enable",
          "is_bot": false,
          "headline": "fix: ignore horizontal wheel, deflake SIGTERM test, reset mouse carry…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T06:13:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce8290339fa0661056f50119985d91a307949e5d",
          "body": null,
          "is_bot": false,
          "headline": "docs: dashboard mouse support (settings, help, changelog)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T06:04:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5166a1c48fd135115fae90820ecb9f1c9b9a028",
          "body": null,
          "is_bot": false,
          "headline": "feat: wheel scrollback window in the logs tab",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:57:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1edba669d138e639c90e0e0b0bda98c6f2287556",
          "body": null,
          "is_bot": false,
          "headline": "feat: click a session row to select it (status/sessions tabs)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:51:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1354b22a4d24175202d8f97b113af0ef9a7a0c3",
          "body": null,
          "is_bot": false,
          "headline": "feat: clickable tabs/footer, wheel routing, m toggle in dashboard",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adb551557a16692da1ffe44c8d2eaabd4c29f254",
          "body": "… paths",
          "is_bot": false,
          "headline": "fix: SIGTSTP actually suspends after mouse-off; cover SIGTERM/SIGTSTP…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f337ac59f7f0e81c2a41d90026a03d17eb2fbbd0",
          "body": null,
          "is_bot": false,
          "headline": "feat: crash/signal-safe mouse-off cleanup around the dashboard",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:26:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ef548f67a45fad35febc0b92f999692f795a2eb",
          "body": null,
          "is_bot": false,
          "headline": "fix: mouse dispatch — press path filters to onClick zones",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:22:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e011dc4de4fdda653afb1972824eadfa55cb35fd",
          "body": null,
          "is_bot": false,
          "headline": "feat: MouseProvider + Clickable zones over ink measureElement",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:16:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aae59dbe54c5e53f68c50a04551620abdae0a89",
          "body": "… cap\n\n- Extra mouse buttons (b >= 128, xterm 8-11) now return button: null instead of\n  aliasing to left/middle/right via base = b & 3\n- Horizontal wheel events (base 2/3 for button codes 66/67) return wheel: null\n  instead of fabricated 'up' direction\n- Cap rest carry at 32 chars to prevent unbounded growth on malformed input",
          "is_bot": false,
          "headline": "fix: mouse protocol — extra buttons null, horizontal wheel null, rest…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:12:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "400d4c0b55550281edd0c6eb984a7b8c04e2add8",
          "body": null,
          "is_bot": false,
          "headline": "feat: SGR-1006 mouse protocol parser (chunk-safe) + hit-testing",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:07:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a55e33138c8d728c3178424b3c1732d0f20754e7",
          "body": null,
          "is_bot": false,
          "headline": "feat: mouse config key for the dashboard (default on, UNSNOOZE_MOUSE)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T05:03:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "559ae456406b615858a3ab699f7c593f9554ce50",
          "body": null,
          "is_bot": false,
          "headline": "release: 1.13.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T04:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a708f5f27f3b2c4a8ee32cb67e85bde45ca03f5",
          "body": "…e-now\n\nA live pane scrape of \"resets 12:04am (UTC)\" seen at 9pm parsed to ~21h in\nthe past (undated + non-ambiguous times deliberately stay past to avoid the\nold blind +24h on stale text). The monitor's first-tick corroboration then\nrejected the stop entirely — any pane-scraped limit stop within ~5\n[…]\nto qualify — beyond any window. Stale text still\nstays past → due-now.\n\nFound by the detection suite's futureBanner(3) failing between 21:00 and\n24:00 UTC; regression tests pin both sides of the rule.",
          "is_bot": false,
          "headline": "fix: roll undated midnight-crossing banners to tomorrow instead of du…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T04:42:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72334f8a4510779a5c8010db2ee99bc90fe16b45",
          "body": "unsnooze usage — burn-rate & time-to-limit forecast per agent × window:\n- signal ladder (exact statusline % → calibrated-from-observed-stops →\n  estimated) with provenance labels on every figure\n- weighted token burn (cache_read ×0.1, formulaV-versioned), active-minutes\n  denominator, account-wide i\n[…]\n; eighth-block gauges; 80×24 floor with\n  compact one-line mark\n- animated \"❯ + rising z z z\" brand mark shared by dashboard and plain\n  chrome, driven by ink useAnimation, static under screen readers",
          "is_bot": false,
          "headline": "feat: usage forecast, pre-wall warnings, and live dashboard (1.13)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-17T04:42:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b06383e3040521051674576fb7319af9fd5a545d",
          "body": null,
          "is_bot": false,
          "headline": "release: 1.12.2",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T11:04:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2c03e7f9ec111f001de0e554a7fed438522ac32",
          "body": null,
          "is_bot": false,
          "headline": "ci: skip unix-only launch-surface tests on win32 runners",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:53:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16bc41a59295021e3bbb65f21e320afd513d89d9",
          "body": null,
          "is_bot": false,
          "headline": "release: 1.12.1",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:49:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa03a4bb2c786ad7b8ace50bbb591c0c444545b8",
          "body": "…d on Linux runners)",
          "is_bot": false,
          "headline": "ci: pin platform in doctor applyFixes test (launchctl assertion faile…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:37:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76823dcbae474ac4e31ff95aa2a16ca0e3bfdc96",
          "body": "Daemon PATH fix (launchd revivals died with spawn tmux ENOENT — silent),\n`unsnooze preview` dry-run sharing its decision core with dispatch,\nntfy push notifications (additive, emoji-safe JSON publish, terse privacy\nmode), Trust & security README section + SECURITY.md, npm trusted-publishing\nrelease workflow with provenance, and a reproducible VHS demo tape.\nFailed records now survive the sweeper so give-ups stay explainable.",
          "is_bot": false,
          "headline": "release: 1.12.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T10:06:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbbbc4c8fc4def46e48591b32b5546628a8daa26",
          "body": "unsnooze doctor [--fix] (csg migration sweep + install health check),\npane identity & ownership (stamp + lease liveness before any inject/close;\nmonitors exit with their lease), launch failures degrade to the unwatched\nagent instead of dying, zellij scrollback capture with pre-0.35 fallback,\nweekly-DST and garbage-clock reset-time fixes, CAS status sweeps,\npid-verified state-lock steal, reap skips active resumed panes, and\npristine .unsnooze-orig install backups.",
          "is_bot": false,
          "headline": "release: 1.11.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T07:30:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ce47cb572b9cae9b88bdc9f1b1a18bf17e1011a",
          "body": "Upgrade-window fail-safe (never brick claude during npm -g reinstall),\ndaemon crash-loop guards (ThrottleInterval / Restart=always + RestartSec,\nversion-skew self-restart), 5 MB log rotation (copy-truncate for the\nlaunchd-held daemon.log), resume-retry backoff with resume-now exemption,\natomic singleton lock with recycled-pid takeover, and a once-daily update\nnotice on the launch path.",
          "is_bot": false,
          "headline": "release: 1.10.1",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-16T06:46:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38e1b7526e857f9cfe8c71e545f67e384fe8752f",
          "body": "Session-name ownership (no more duplicate session: unsnooze), reset-time\naccuracy (banner-anchored times + probing), and upgrade-safe state migration.",
          "is_bot": false,
          "headline": "release: 1.10.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7035b1fabd9776b2a96c612e3afac70f6137ff8",
          "body": "Existing installs must keep working after the ownership + reset-time\nchanges:\n\n- Heal legacy tmux paneOwner=sessionName so leases match again\n- Pull old blind 5h fallback waits into the probe window (absolute/relative\n  untouched)\n- Keep TMUX_SESSION_NAME as a MUX_SESSION_NAME alias\n- Treat \"try aga\n[…]\nin 0 minutes\" as relative zero, not a fallback miss\n  (restores GUI e2e S13 and real just-lifted banners)\n\nAdd compat-upgrade tests. Verified: 435 unit tests, full tmux e2e (S1–S16),\nzellij smoke e2e.",
          "is_bot": false,
          "headline": "fix: upgrade-safe migrations and zero-minute relative parse",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:35:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d97ec720ef3de79ff47c9ecd57e5dfde9a64f20d",
          "body": "…racy\n\nAfter stacking session-name ownership with reset-time accuracy, update tests\nfor reviveTarget sessionExists and fmtResetProvenance export, and record the\nreset-time work under Unreleased.",
          "is_bot": false,
          "headline": "fix: merge plan1/plan2 test expectations and document reset-time accu…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:22:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07a6acbe2614c8f42d8dd4eabcc339f2c0ab2408",
          "body": "Wrong wake times came from scraping undated pane text and sleeping for\nFALLBACK_RESET_MS (now+5h) when nothing parsed — and from rolling already-\npast absolute clock times forward 24h.\n\n- Thread bannerAt through resetAtMs; relative offsets and next-occurrence\n  math anchor to the banner's own time (\n[…]\nration (transcript or future absolute).\n- Later ticks may upgrade fallback/relative estimates to absolute.\n- Persist bannerAt; status shows provenance (absolute, from transcript /\n  guessed: probing).",
          "is_bot": false,
          "headline": "fix: anchor reset times to the banner, probe instead of guessing 5h",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:20:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c1176ec122c2849a962e7e96823ed88c3937a64",
          "body": "…h revival\n\nInteractive launcher owns the base name `unsnooze` (and unsnooze-2… on\ncollision); the resumer may join a live session but only creates\n`unsnooze-resumed`. Live session discovery via sessionForPane replaces the\nfrozen MUX_SESSION_NAME constant; tmux newWindow returns paneOwner null;\nuninstall stops the resumer; failed wrap degrades to unwatched CLI; new\nsessions/reap commands and scheduled record sweep/stale abandonment.",
          "is_bot": false,
          "headline": "fix: session-name ownership so interactive launches never collide wit…",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-14T07:18:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57dbb89d98b91cbbf3285e8b2ab719d356e846c7",
          "body": "contextGuard: estimate a stopped session's context size before waking it;\ninform of or pause on expensive cold-cache resumes.",
          "is_bot": false,
          "headline": "release: 1.9.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-13T08:17:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "330ac9e6749a83733a006c8612dc21bebd8c9f47",
          "body": "Waking a session hours after a limit stop re-reads its entire context at\nfull uncached price (the prompt cache expires in minutes) — a 150k-token\nsession can eat a large slice of a fresh 5h window the moment it wakes,\nand unsnooze spent that quota silently.\n\nNow the context size is estimated from Cl\n[…]\neason>'). Claude-only v1 via the optional adapter hook\ncontextTokens(rec); Codex rollouts carry the same data for a follow-up.\n\nPrompted by r/ClaudeAI feedback on a resume consuming 30% of a 5h quota.",
          "is_bot": false,
          "headline": "Add contextGuard: see and gate the cost of big-context wakes",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-13T08:15:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a463b5150548ffb7f08ec013b54dd7d9fa43368",
          "body": "Ship SEO package description/keywords to npm (1.8.0 already published with\nthe pre-refresh metadata).",
          "is_bot": false,
          "headline": "release: 1.8.1",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a5496d7b5c1fbc07b234457efaf9860b7776882",
          "body": "Expand package description/keywords and the README comparison table so\ndiscovery matches Qwen, Kimi, OpenCode, Antigravity, OpenRouter, and Zellij.\nGitHub description and topics updated to match.",
          "is_bot": false,
          "headline": "docs: refresh SEO for multi-agent support (1.7+)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:43:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2778fb3d37609847f605372af4c3e4e6375fd051",
          "body": "Notification channels (OSC/BEL/native), dual tmux/Zellij multiplexer, and\nChatGPT desktop app codex resolution. CHANGELOG Unreleased → 1.8.0.",
          "is_bot": false,
          "headline": "release: 1.8.0",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:15:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a03f3eb740e3a380cb0a5cc106196205d6a37721",
          "body": null,
          "is_bot": false,
          "headline": "fix: correct notification channel docs accuracy",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1afd1bbef8eb68a3cc986e10487311c8c12f6832",
          "body": "README support matrix and config; CLI help; CHANGELOG entry.",
          "is_bot": false,
          "headline": "Document notification channels (OSC, BEL, native)",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d46b4cb395133a2a4fac82a1fadb77390a9ffdd7",
          "body": "Enable OSC/BEL channels for in-mux sessions; leave pane-less callers on native.",
          "is_bot": false,
          "headline": "Pass pane context into notify from monitor and resumer",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4ea13c72e186a0ccf47ad112ea742472dc9fc19",
          "body": "Dispatch auto/native/osc/bell with pane context; fall back to native\nwhen OSC/BEL undeliverable so notifications are never silently lost.",
          "is_bot": false,
          "headline": "Wire notify channel dispatch for OSC, BEL, and native",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6fc670a5cb203fab4c46bfa12204dd81d156d13",
          "body": null,
          "is_bot": false,
          "headline": "fix: force OSC respects caller denylist even when server is stale",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d43f968c15534d8f2486a11ca0d13a00fc8522b4",
          "body": null,
          "is_bot": false,
          "headline": "fix: address review feedback for Add notify-tty module for OSC and BEL",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7786cf399ad19f82a660d11450cd85e12c3f7c04",
          "body": "Terminal-branded notifications via client tty OSC and pane BEL, with\nsanitization and injectable fs/mux for tests.",
          "is_bot": false,
          "headline": "Add notify-tty module for OSC 9/777 and BEL channels",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2153f22009aede310b465e76290513bb5b3fb390",
          "body": null,
          "is_bot": false,
          "headline": "fix: address review feedback for Add tmux tty discovery methods",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aaa915ea6ebc4a4db648109110dc8de813dba5e",
          "body": "Enable OSC-to-client-tty and BEL channels without caching pane/client paths.",
          "is_bot": false,
          "headline": "Add tmux clientTtys, paneTty, and globalEnv discovery",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70c9e3cc254f6325114d29cdac99515605bec9f9",
          "body": "Support auto|native|osc|bell via DEFAULTS, UNSNOOZE_NOTIFY_CHANNEL env, and ENUMS.",
          "is_bot": false,
          "headline": "Add notifyChannel config setting",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T19:07:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3acc2fd4dc44f6890c8fe2c2f3ee0b399f6cef8b",
          "body": "Since July 2026 the Codex app is the ChatGPT desktop app; its bundled\ncodex app-server writes the same ~/.codex/sessions rollouts, so the\nwatcher channel keeps working — verified against a real install with a\nlive probe session (codex-cli 0.144.0-alpha.4): same rollout path and\nnaming, token_count r\n[…]\nover the bundle). Pinned parser behavior for the new\nreason-string rate_limit_reached_type values (workspace credit/limit\nvariants bind the latest-resetting window) and the unified-app rollout\nshapes.",
          "is_bot": false,
          "headline": "codex: support the unified ChatGPT desktop app",
          "author_name": "saaranshM",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T16:02:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4b845da1907263759c06a3faa55612e33961607",
          "body": "Add zellij backend (dual tmux + zellij multiplexer support)",
          "is_bot": false,
          "headline": "zellij backend: dual tmux + zellij multiplexer support (#1)",
          "author_name": "Saaransh Menon",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T15:36:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05fd7f7e57b7337069476c0e3fe00bff4c9c133c",
          "body": "tmux 3.7b prints a blank line and exits 0 when the -t target does not\nexist, so paneAlive returned true for any pane id. On this branch that\nmade dead-pane revival burn all five attempts in the capture-retry path\n(e2e S5 red on 3.7b); on pre-refactor main the same quirk only leaked\nzombie monitors b\n[…]\ns own pane id back.\n\nVerified on tmux 3.7b: all 16 e2e-simulate scenarios pass, plus live\nzellij 0.44.3 pipeline runs (lease-authorized injection and dead-pane\nrevival for all seven agents' adapters).",
          "is_bot": false,
          "headline": "fix(tmux): paneAlive must not trust display-message's exit code",
          "author_name": "Saaransh Menon",
          "author_login": "saaranshM",
          "committed_at": "2026-07-12T15:35:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fedb1689705feb239ce08679507d70422f7db40d",
          "body": "Address saaranshM's PR review:\n- reopenEnv: whitelist rec.env + UNSNOOZE control vars only — never\n  spread process.env into launch argv (zellij persists the command line\n  in pane metadata, so daemon env was readable via ps/list-panes).\n- verifyOne: persist verifyRetries on the record; after 3 retr\n[…]\n tmux e2e-simulate green. Live zellij smoke +\nresumer integration green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01E9nxdQBeVr8RZTkyVEeuJw",
          "is_bot": false,
          "headline": "review: env whitelist, resuming escape hatch, defer owned panes",
          "author_name": "Wave Consulting",
          "author_login": null,
          "committed_at": "2026-07-12T12:18:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a7e53d885877eb40717742f15f4e51ce3fc6912d",
          "body": "Harness-only update (no src/ changes) so the 15-scenario tmux suite\npasses again after the tmux->zellij refactor:\n- _monitor invoked with the new <mux> <owner> <pane> <agent> <leaseId>\n  signature; S5/S8 exercise the structured reopen launchSpec.\n- seeded records use mux/paneOwner/muxSession/leaseId\n[…]\nemon scenarios pin the tmux backend against inherited env.\n\nVerified: two consecutive green full runs (E2E OK), npm test 233 pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(e2e): modernize tmux e2e-simulate.sh for the multiplexer refactor",
          "author_name": "Wave Consulting",
          "author_login": null,
          "committed_at": "2026-07-12T12:05:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "52a5932ade3a6444ad3ccbd76c902d69dd6a9f2a",
          "body": "zellij's list-panes pane_command includes arguments (e.g.\n'claude --resume <id>', 'node -e ...'), so basename(pane_command)\nreturned garbage and isForegroundCommand always failed — the live-pane\nresume path never authorized and every resume fell back to reopen.\nTake the first whitespace token, then \n[…]\n.\n\nCaught by a live resumer->zellij-pane integration test; the unit\nfixture had no args so it passed. Added the arg-bearing cases.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(zellij): paneCurrentCommand must strip args before basename",
          "author_name": "Wave Consulting",
          "author_login": null,
          "committed_at": "2026-07-12T12:05:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 15,
      "commits_last_year": 153,
      "latest_release_at": "2026-07-19T07:15:32Z",
      "latest_release_tag": "v1.14.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 0.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "unsnooze",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude",
            "claude-code",
            "codex",
            "codex-cli",
            "openai",
            "anthropic",
            "grok",
            "xai",
            "qwen",
            "qwen-code",
            "kimi",
            "kimi-cli",
            "moonshot",
            "opencode",
            "antigravity",
            "antigravity-cli",
            "gemini",
            "google",
            "openrouter",
            "chatgpt",
            "usage-limit",
            "usage limit",
            "rate-limit",
            "rate limit",
            "5-hour limit",
            "weekly limit",
            "auto-resume",
            "auto-retry",
            "resume",
            "retry",
            "tmux",
            "zellij",
            "ai-agents",
            "agentic-coding",
            "cli",
            "developer-tools"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/unsnooze",
          "is_deprecated": false,
          "latest_version": "1.14.0",
          "repository_url": "https://github.com/saaranshM/unsnooze",
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2363,
          "first_published_at": "2026-07-10T08:21:30.829000Z",
          "latest_published_at": "2026-07-19T07:16:40.185000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 60,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-12",
            "count": 2
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 56273,
      "source_files_sampled": 159,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "website/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 45,
        "malicious_count": 0,
        "assessed_package": "npm:unsnooze@1.14.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@clack/prompts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "ink",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.1.1"
        },
        {
          "name": "picocolors",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.1"
        },
        {
          "name": "react",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "framer-motion",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.23.0"
        },
        {
          "name": "marked",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^18.0.6"
        },
        {
          "name": "next",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.2.0"
        },
        {
          "name": "react",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.0"
        },
        {
          "name": "react-dom",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 1,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "saaranshM",
          "commits": 147,
          "avatar_url": "https://avatars.githubusercontent.com/u/46712446?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 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": "13 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c9428e49cc4450044fed37585d8a521eddabdc8d",
        "ran_at": "2026-07-25T04:18:45Z",
        "aggregate_score": 3.4,
        "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-20T17:25:44Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-12T15:36:24Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/saaranshM/unsnooze",
    "host": "github.com",
    "name": "unsnooze",
    "owner": "saaranshM"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 47,
        "vitality": 74,
        "community": 44,
        "governance": 57,
        "engineering": 66
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 153,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "153 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 153
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 15,
              "latest_release_tag": "v1.14.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 0.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "15 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "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 ~0.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 44,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "forks": 3,
              "stars": 60,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "60 stars",
                "points": 28.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 60
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "packages": [
                "unsnooze"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2363
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,363 downloads/month across npm",
                "points": 45,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2363,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 57,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 1,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1/1 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "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": 48,
            "inputs": {
              "followers": 5,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "saaranshM",
              "public_repos": 28,
              "account_age_days": 2747
            },
            "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": "5 followers of saaranshM",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 5,
                      "login": "saaranshM"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "28 public repos, account ~7 yr old",
                "points": 22.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 28
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "unsnooze"
              ],
              "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": "15 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "agentic-coding",
                "ai-agents",
                "anthropic",
                "auto-resume",
                "claude-code",
                "cli",
                "codex",
                "codex-cli",
                "grok",
                "openai",
                "rate-limit",
                "tmux",
                "usage-limit",
                "claude",
                "antigravity",
                "kimi",
                "opencode",
                "openrouter",
                "qwen",
                "zellij"
              ],
              "has_wiki": true,
              "homepage": "https://unsnooze.combustortech.in",
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://unsnooze.combustortech.in",
                "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": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "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": 47,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "13 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:unsnooze@1.14.0 runtime dependency closure — what installing the published package pulls in — 45 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:unsnooze@1.14.0",
                  "assessed": 45
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 45,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 45,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 43,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.97,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 41,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.03,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "3 of the last 100 commits agent-authored or agent-credited",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 3,
                      "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 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 56273,
              "source_files_sampled": 159,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/159 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 159,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T04:18:50.075976Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/saaranshM/unsnooze.svg",
  "full_name": "saaranshM/unsnooze",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.