Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-28 21:33 UTC

Fast-Editor / Lynkr

Streamline your workflow with Lynkr, a CLI tool that acts as an HTTP proxy for efficient code interactions using Claude Code CLI.

JavaScript · Rust · MakefileApache-2.0★ 538 stars⑂ 57 forkssince Dec 2025View on GitHub ↗

Fast-Editor/Lynkr holds a health index of 65 out of 100, placing it in the Moderate band. It scores highest on Engineering Quality (90/100) and lowest on Security (35/100). It was last updated 4 days ago. A single contributor accounts for most of its recent work.

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

65
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

Fast-EditorOrganization
2 followers4 public repossince Dec 2025

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

Metrics by category

Vitality

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

80Good · 22% of overall
How it's scored
36/36Push recency — last push 4 days ago
18.7/36Commit cadence — 27/52 weeks with commits
18/18Commit volume — 209 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year209
human_commit_share1
days_since_last_push4
active_weeks_last_year27
How it's scored
27/27Ships releases — 2 releases published
36/36Release recency — latest release 35 days ago
12.6/27Release cadence — a release every ~201.2 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count2
latest_release_tagv9.6.0
releases_from_tagsno
days_since_latest_release35
mean_days_between_releases201.2

Community & Adoption

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

56Moderate · 18% of overall
How it's scored
44.3/60Stars — 538 stars
14.6/25Forks — 57 forks
2.7/15Watchers — 4 watchers
Inputs used
forks57
stars538
watchers4
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
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.2/80Monthly downloads — 2,446 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packageslynkr
dependents
ecosystemsnpm
total_downloads
monthly_downloads2,446
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?

59Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
10.9/22.5Commit distribution — top contributor authored 52% of commits
12.2/13.5Contributor breadth — 9 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled9
top_contributor_share0.517
How it's scored
42.7/46.8Issue resolution — 91% of issues closed
30.2/38.3PR acceptance — 45/57 decided PRs merged
3/15OpenSSF Scorecard: Code-Review — Found 5/22 approved changesets -- score normalized to 2
Inputs used
merged_prs45
open_issues2
closed_issues21
issue_closed_ratio0.913
closed_unmerged_prs12
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
3.4/25Owner reach — 2 followers of Fast-Editor
6.3/25Track record — 4 public repos, account ~0 yr old
Inputs used
followers2
owner_typeOrganization
is_verified
owner_loginFast-Editor
public_repos4
account_age_days225
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 6 days ago
20/20Version history — 64 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packageslynkr
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Engineering Quality

Are baseline engineering and documentation practices in place?

90Excellent · 20% of overall
How it's scored
24/24CI workflows — 5 workflow(s)
24/24Tests present
16/16Linter config — .eslintrc.cjs
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 8 out of 8 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://fast-editor.github.io/Lynkr/
10/10Repository description
10/10Topics — 20 topics
10/10Wiki
Inputs used
topicsclaude, claudecode, databricks, agents, ai, code-assistant, code-generation, developer-tools, llm, mcp, llmops, ai-gateway, cursor, llamacpp, llm-gateway, llm-proxy, llm-router, ollama, prompt-caching, self-hosted
has_wikiyes
homepagehttps://fast-editor.github.io/Lynkr/
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

35At risk · 16% of overall
How it's scored
0/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 8 out of 8 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 5/22 approved changesets -- score normalized to 2
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 45 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate2.5
Excluded from scoring (no data or not applicable): packaging. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
10/25Indirect dependencies free of known advisories — 1 affected: uuid 10.0.0 (high 7.5)
33.7/40No advisories left outstanding — 1 advisory-carrying package(s) unaddressed past 90 days; oldest published 97 days ago
Inputs used
sourceosv
advisories1
affected_packages1
assessed_packages247
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages0
Matched the npm:lynkr@9.10.0 runtime dependency closure — what installing the published package pulls in — 247 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.

61Moderate · 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 — 82 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.82
agent_instruction_files
agent_instruction_max_bytes
How it's scored
12.6/18One-command bootstrap — native/Cargo.toml (toolchain convention, no task runner)
22/22Automated tests
11/11Lint / format config — .eslintrc.cjs
11/11Static type checking — packages/ai-sdk-provider/tsconfig.json
10/10Reproducible environment — Dockerfile, lockfile
10/10Demonstrated agent practice — 47 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Inputs used
has_nixno
has_testsyes
lockfilesCargo.lock, package-lock.json
has_dockerfileyes
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configspackages/ai-sdk-provider/tsconfig.json
agent_commit_share0.47
toolchain_manifestsnative/Cargo.toml
dependency_bot_commit_share0
How it's scored
27/45Type-checkable code — JavaScript with type-check config (packages/ai-sdk-provider/tsconfig.json)
53.1/55Manageable file sizes — 11/323 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes403,191
source_files_sampled323
oversized_source_files11
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

538GitHub stars
9contributors
209commits, last 12 months
4days since last push
2releases
1bus factor
2open issues
crates.io, npm, PyPIpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'lynkr-native' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

More detail

Star and fork history 0 ★ / 57 ⇿
0Stars
57Forks
1Releases

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.

01020304050605762025-122026-042026-07
Major 0Minor 1Patch 0
OpenSSF Scorecard 2.5 / 10
2.5aggregate

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-28 21:32 UTC

0Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests8 out of 8 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 5/22 approved changesets -- score normalized to 2
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities45 existing vulnerabilities detected
Direct dependencies 29
RegistryPackageVersion constraintManifest
crates.ionapi3native/Cargo.toml
crates.ionapi-derive3native/Cargo.toml
crates.ioserde1native/Cargo.toml
crates.ioserde_json1native/Cargo.toml
crates.ioregex1native/Cargo.toml
crates.iosha20.10native/Cargo.toml
crates.iohex0.4native/Cargo.toml
crates.iomimalloc0.1native/Cargo.toml
npm@azure/openai^2.0.0package.json
npm@babel/parser^7.29.0package.json
npm@babel/traverse^7.29.0package.json
npm@blackwell-systems/gcf2.4.0package.json
npm@toon-format/toon^2.1.0package.json
npmcockatiel^3.2.1package.json
npmcompression^1.7.4package.json
npmdiff^5.2.0package.json
npmdotenv^16.4.5package.json
npmexpress^5.1.0package.json
npmexpress-rate-limit^8.2.1package.json
npmfast-glob^3.3.2package.json
npmgraphify^1.0.0package.json
npmhnswlib-node^3.0.0package.json
npmjs-tiktoken^1.0.20package.json
npmjs-yaml^4.1.1package.json
npmopenai^6.14.0package.json
npmpino^8.17.2package.json
npmpino-http^8.6.0package.json
npmpino-roll^4.0.0package.json
npmundici^6.22.0package.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 1

Installing npm:lynkr@9.10.0 pulls in 247 packages, direct and transitive: 1 carry known advisories, of which 0 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
uuid10.0.0indirecthigh113.0.1

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": [
        "claude",
        "claudecode",
        "databricks",
        "agents",
        "ai",
        "code-assistant",
        "code-generation",
        "developer-tools",
        "llm",
        "mcp",
        "llmops",
        "ai-gateway",
        "cursor",
        "llamacpp",
        "llm-gateway",
        "llm-proxy",
        "llm-router",
        "ollama",
        "prompt-caching",
        "self-hosted"
      ],
      "is_fork": false,
      "size_kb": 57193,
      "has_wiki": true,
      "homepage": "https://fast-editor.github.io/Lynkr/",
      "languages": {
        "C": 28,
        "HTML": 33138,
        "Rust": 634816,
        "Shell": 10671,
        "DTrace": 5415,
        "Python": 18597,
        "Makefile": 382882,
        "Dockerfile": 5704,
        "JavaScript": 2615620,
        "TypeScript": 1395
      },
      "pushed_at": "2026-07-24T01:42:00Z",
      "created_at": "2025-12-03T22:50:02Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-28T05:50:33Z",
      "description": "Streamline your workflow with Lynkr, a CLI tool that acts as an HTTP proxy for efficient code interactions using Claude Code CLI.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "Rust",
        "Makefile"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "Fast-Editor",
      "company": null,
      "location": null,
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/249706325?v=4",
      "created_at": "2025-12-15T08:30:52Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 225
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v9.6.0",
          "kind": "minor",
          "published_at": "2026-06-23T08:52:38Z"
        },
        {
          "tag": "0.1.0",
          "kind": "minor",
          "published_at": "2025-12-04T02:55:02Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "57f06be35d8449fb344669a3d6160e1a7ee58215",
          "body": "… stale instance",
          "is_bot": false,
          "headline": "fix(server): reject start() on bind failure so wrap can't attach to a…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-24T01:41:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5f5186f18b58d854fea979432c77a5a4d67ca5",
          "body": "…elected ids, retire dead model names",
          "is_bot": false,
          "headline": "fix(moonshot): pin temperature=1 for all kimi-k* models, honor tier-s…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-24T01:28:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71e8f5348240d5019131edc29c5a78684a9f0fcc",
          "body": null,
          "is_bot": false,
          "headline": "feat: add @lynkr/ai-sdk-provider package for the Vercel AI SDK",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-23T18:51:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57c7b4e5f5ccf1139f44ea339335ea2a6e532352",
          "body": null,
          "is_bot": false,
          "headline": "fixed test failure",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-23T05:06:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b32e988c8d6e0f615e01ba5fcedebf7686228e0a",
          "body": "…streaming, classifier v2 (#85)\n\n- Remove server-mode tool execution: Lynkr always forwards tool calls to the\n  client (deletes src/tools registry, src/agents, orphaned backends, Code Mode,\n  TOOL_EXECUTION_MODE and dead env knobs)\n- Upstream SSE streaming, default on: native Anthropic passthrough\n \n[…]\n, tool-history absence,\n  first-message fingerprint drift\n- Docs, README, Dockerfile, docker-compose aligned with all of the above\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>",
          "is_bot": false,
          "headline": "chore(release): v9.10.0 — client-only tool execution, end-to-end SSE …",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-07-22T08:20:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3831e9377b84adc40e91765f4251a609bbbd6a37",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v9.9.1",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-19T23:18:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a83c194630c069307081061fb59355d949d4428",
          "body": "…r, FORCE_REASONING\n\nNew in this release:\n\nPhase-6 LLM difficulty classifier (src/routing/difficulty-classifier.js)\n- Adjudicates borderline anchor-embedding calls; catches topic-vs-difficulty\n  confounding (\"list the exports from this file\" no longer scores REASONING\n  just because it embeds near t\n[…]\n): pytest, cargo test, go test, gh pr/issue list — full\ndispatch table with tool_use_id -> command extraction, tests in\ntoken-reduction.test.js\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(routing): Phase-6 LLM difficulty classifier, config B tier ladde…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-19T23:18:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "37b9a2c44ef5b9ee5b07254f0e266fcb7386e3bd",
          "body": null,
          "is_bot": false,
          "headline": "chore: ignore all local handoff notes, not just one",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-17T06:42:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bcd747d7e23b4800dea0958c75c51ab75b9dff2",
          "body": "…facts can never ship\n\nnpm packs were including marketing/ (business internals) because the\ncurated .npmignore predated the folder — ignore-lists fail open on new\npaths. The files allowlist fails closed: anything not listed never ships.\nGranular entries for native/ and models/ because files entries override\n.npmignore pruning inside listed directories on current npm.",
          "is_bot": false,
          "headline": "chore(publish): files allowlist — marketing/, benchmark configs, arti…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-17T05:04:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3085a31a5de9b78bb76d145b2027127a0668e5bb",
          "body": "… benchmark",
          "is_bot": false,
          "headline": "release: v9.9.0 — routing hardening, agent controls, GCF, RouterArena…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-17T04:56:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2e08b39411c9e17fb14637eca1db4e1661e9f35",
          "body": "…(#84)\n\n* feat(routing): goose + lynkr-injected client profiles; WS3 detection on OpenAI-compat paths\n\nGoose (Block's agent CLI) sends no user-agent and a distinctive 18-tool\nloadout — without a profile the agentic detector counted its baseline as\nintent and floored every request (even 'Hi') at ITER\n[…]\nned with the\n  reminder-immunity property it actually tests.\n- registers usage-stats and loop-guard tests in test:unit.\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>",
          "is_bot": false,
          "headline": "Routing hardening, agent controls, and third-party benchmark results …",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-07-17T04:54:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "24e69a7ed95faa52a7515af6ce27a932447b77bf",
          "body": "… TOON (#83)\n\n* feat(context): add opt-in GCF compression as a drop-in alternative to TOON\n\nAdds a GCF (Graph Compact Format) encoder for the large-JSON context\ncompression Lynkr already does with TOON. Same adapter contract as\nsrc/context/toon.js: encode-only, fail-open, read-only context, never\nto\n[…]\nl-open,\nnever-grow, verify-mismatch, protocol-field preservation, text-block\ncompression).\n\n* chore: pin @blackwell-systems/gcf to exact 2.4.0\n\n* chore: add @blackwell-systems/gcf to package-lock.json",
          "is_bot": false,
          "headline": "feat(context): add opt-in GCF compression as a drop-in alternative to…",
          "author_name": "Dayna Blackwell",
          "author_login": "blackwell-systems",
          "committed_at": "2026-07-17T04:35:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3352c7fecc12aca574a1e2a97bf2f8ed39c535f",
          "body": null,
          "is_bot": false,
          "headline": "Added codex wrap support",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-11T23:52:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e81a20965afc83ec7dfeb241c050fb6aed7c57c",
          "body": null,
          "is_bot": false,
          "headline": "Removed comments",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-11T17:57:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f54a7e66ab23456db62ad5bbd209604d5042f5c",
          "body": null,
          "is_bot": false,
          "headline": "Added tiers",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-11T08:16:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "805b9f71b71d83084cfd4a504d863921d6e3b813",
          "body": null,
          "is_bot": false,
          "headline": "chore: ignore local handoff notes",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T07:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4af5261161276fe59a051e6c9af8adc0f3adad2f",
          "body": "…escalate on failure\n\nEx-ante difficulty prediction is unreliable for agentic coding traffic\n(SWE-Bench evidence: fails trivial baselines; verified cascades gain +14%).\nInstead of committing to a predicted tier, cheap-tier (SIMPLE/MEDIUM)\nresponses are verified post-hoc: structural checks targeting \n[…]\nhan no cascade). Expensive-tier answers are never re-verified; fails\nopen on verifier errors. Flag: LYNKR_CASCADE_VERIFY (default off).\nLive-verified: empty minimax response → escalated → kimi served.",
          "is_bot": false,
          "headline": "feat(routing): WS6 cascade verification — verify cheap-tier answers, …",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T05:59:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58135b33d42b96d280943614a9ec05fa9b19b707",
          "body": "…c refs",
          "is_bot": false,
          "headline": "chore: untrack local-only files (plan ledger, litellm config); fix do…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T04:55:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c088c609edd6bf45b90b6742c9285ae8c7f8792",
          "body": null,
          "is_bot": false,
          "headline": "chore: untrack marketing folder (local-only drafts)",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T04:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b1717cc8b2da6d3235ff7e906c95d458a4526a6",
          "body": null,
          "is_bot": false,
          "headline": "docs: restore 53% tool-token-reduction claim",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f86523602c028917ab5b2920fd5e80ae8b679434",
          "body": "… reproducible benchmark\n\nReplaces stale headline claims (87.6%/53%/171ms) with numbers the bundled\nbenchmark reproduces (84% TOON, 18-22% tool stripping, <300ms cache hits),\ndocuments the full routing pipeline (fingerprint sessions, escape ladder,\nlearning loop, incident-derived rules) and the 17-scenario regression\nharness. Test badge 699→1041.",
          "is_bot": false,
          "headline": "docs: routing-intelligence + benchmarking guides; README numbers from…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:40:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8dcd109e5c626c1e73a961e27e747fbce89d0c4",
          "body": "Pins (6h TTL) and semantic-cache entries persist server-side between runs:\nrun #2 inherited run #1's P2-written COMPLEX pin and served most scenarios\nfrom cache, corrupting measurements. Per-run nonce in stateful scenarios,\nx-lynkr-no-cache on everything outside the cache family, and SC3 now fails\nonly on LOW-similarity hits (an answer to a different question) — prior\nruns' identical question matching at ~0.99 is correct cache behavior.",
          "is_bot": false,
          "headline": "bench: hermetic across runs + similarity-aware cache assertion",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:35:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "621aa49175e1c8a467089a20d49f17fb22505af9",
          "body": "Encodes this week's live incidents as permanent checks: reminder-injection\nimmunity, suggestion-mode side requests, force-cloud/path-risk triggers,\nautonomous→REASONING, fingerprint pin + mid-session escape, cache\nfalse-positive guard. Route expectations judge Lynkr only (other proxies\nsynthesize tier labels). Adds a pass/fail scoreboard section.",
          "is_bot": false,
          "headline": "bench: 8 routing-regression scenarios + correctness scoreboard",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:11:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c34e835821520648e76a7ab0de76599b65b0140e",
          "body": "…s, hardening\n\nWS4: bandit propensity + candidates on every decision for off-policy evaluation.\nWS5: closed the learning loop — feedback module (bandit.update + kNN online\ngrowth), reward-pipeline persistence, in-process auto-calibration.\nWS1.5: content-fingerprint session ids (clients send none) + \n[…]\ninstead of the credential list (self-proxy fix);\nbadge echo fixed; wrap session stats read real fields; benchmark measurement\nlayer made honest; test suite no longer clobbers the production kNN index.",
          "is_bot": false,
          "headline": "feat(routing): propensity logging, learning loop, fingerprint session…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T02:55:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3211456efead315098b5b7a19feace05d53cbfeb",
          "body": "…(#81)\n\nAdds Eden AI as a native provider, mirroring the existing OpenRouter\n(OpenAI-compatible) path. Eden AI exposes both OpenAI- and Anthropic-\ncompatible endpoints at https://api.edenai.run/v3 with provider/model\nnaming, giving one EU/GDPR-compliant key across 600+ models.\n\n- config: SUPPORTED_M\n[…]\nLive-tested against api.edenai.run/v3: chat, tool-calling across OpenAI &\nAnthropic models (finish_reason: tool_calls), and streaming.\n\nCo-authored-by: MVS-source <mvs-source@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add Eden AI provider (OpenAI-compatible, 600+ models, EU/GDPR) …",
          "author_name": "Victor M. SMITH",
          "author_login": "MVS-source",
          "committed_at": "2026-07-05T08:00:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30899e664129d31c160481808e54efb26f42bd6f",
          "body": null,
          "is_bot": false,
          "headline": "Added telemetry",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-02T01:43:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "337447c4a879efd4a6783b195effbcfbfea96bdc",
          "body": "* fix(agents): make the sub-agent learning subsystem actually work\n\nThe Reflector → Skillbook → prompt-injection loop was fully built but\ndead: the Reflector read `context.transcript` and `context.taskPrompt`,\nneither of which the context manager ever set. Reflection threw on every\nnon-trivial run a\n[…]\nst.js.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agents): make the sub-agent learning subsystem actually work (#80)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-07-02T01:30:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "522b736ca1daaba80d44de89831fa088b838bb59",
          "body": "Bedrock prompts were producing a non-booting .env because the wizard\nasked for BEDROCK_API_KEY but the config loader at\nsrc/config/index.js:127 reads AWS_BEDROCK_API_KEY. The misleading \"or\nuse IAM\" hint also implied a SigV4 fallback that doesn't exist —\nsrc/clients/databricks.js:1450 throws if the \n[…]\nfix, model-ID format, and tier syntax with concrete\nexamples for the Anthropic Claude family and Llama.\n\nDocker image / labels bumped to 9.7.2.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(init): correct Bedrock + LM Studio wizard schema",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-30T19:53:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5d215d776104bb72e703bf985134b1ae95487ec",
          "body": "…tion (#79)\n\n* feat(wrap): add `lynkr wrap claude` for Pro/Max subscription support\n\nLaunches Claude Code through Lynkr proxy, enabling hybrid provider routing\nfor Pro/Max subscribers without separate API billing.\n\nKey features:\n- Wraps official Claude Code binary (ToS-compliant OAuth forwarding)\n- \n[…]\nred-By: Claude Opus 4.7 <noreply@anthropic.com>\n\n* Added init\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Multi-Tool Wrap + OAuth Subscription Routing + Headroom Integra…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-30T19:48:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07444adeb4032842896f46b27c908e236568ecb4",
          "body": "…sition (#77)\n\n* feat(routing): tier-aware fallback, output format guard, task decomposition\n\nThree opt-in/always-on improvements to routing resilience and output quality,\ndriven by real T3 Code + Lynkr integration testing.\n\n1. Tier-aware fallback (escalate-then-demote) — src/routing/tier-fallback.j\n[…]\naude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(routing): tier-aware fallback, output format guard, task decompo…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-23T08:48:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "09977a58e2182f0fa498315ad7208e6d79264843",
          "body": "… by model capability (#76)\n\n* fix(bedrock): flatten cache_control shapes before Converse request\n\ninvokeModel runs injectPromptCaching() before dispatch, which rewrites a\nstring `system` field and message `content` into Anthropic cache_control\nblocks (arrays of `{ type, text, cache_control }`). The\n[…]\nr-only needsCacheInjection signature stays\nbackward-compatible. Only families known not to support cache_control are\nskipped.\n\nExtend test/prompt-cache-injection.test.js with capability-gate coverage.",
          "is_bot": false,
          "headline": "fix(prompt-cache): repair Bedrock Converse mapping and gate injection…",
          "author_name": "Yi Liu",
          "author_login": "sumleo",
          "committed_at": "2026-06-18T03:59:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f21ffd49fc2c9ffcfaecdbaeaf2b0a97159c3857",
          "body": "…atch (#74)\n\n* fix(responses): repair blank/orphan tool_call_id before provider dispatch\n\nCodex Desktop's bundled-plugin (Browser/Computer-use) function_call_output\nitems arrive without a usable call_id, which flattened to an empty\ntool_call_id and 400'd at Moonshot (\"Invalid request: tool_call_id  \n[…]\naude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(responses): repair blank/orphan tool_call_id before provider disp…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-15T04:55:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6112902a9c4a76be3bbc24d3449cd04998539c1f",
          "body": "- Dockerfile: install prod deps before copying source (better layer cache),\n  drop redundant second npm ci, correct license label MIT → Apache-2.0.\n- docker-compose: fix port mapping 8081:8080 → 8081:8081 and healthcheck port\n  to match PORT=8081; bump image tag and version label to 9.5.0.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(docker): fix build caching, ports, license, version → 9.5.0",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-11T18:11:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6784e36e00938099dce6f216d0fa94b93810647",
          "body": null,
          "is_bot": false,
          "headline": "9.5.0",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-11T18:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66832791a72ce23c4f9bd441bfbb8d95d486b98d",
          "body": "Working-dir .venv (a Python virtualenv) was being packed — 59.7MB / 16,295\nfiles. Excluding it brings the package back to ~1.2MB / 203 files.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(npm): exclude .venv/.impeccable/path from published package",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-11T18:08:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4779c17a665a201bd05193b576df5d87875bac0a",
          "body": "…I guard (#73)\n\n* feat(token-reduction): RTK filters, request bypass, MCP tool dedup, caveman\n\nPort category-A token-reduction features inspired by 9router:\n\n- tool-result-compressor: add grep (per-file match cap), dedup_log (collapse\n  repeated lines), and smart_truncate (head/tail fallback) compre\n[…]\naude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Token reduction + routing reliability, provider/cost fixes, native AB…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-11T17:57:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82684d866475a8d1268982dfe4563478a942a9d9",
          "body": null,
          "is_bot": false,
          "headline": "9.4.6",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:32:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2943d5725a711502078c885bdd48b04fece8bbc",
          "body": "Unhandled throws from getUsage/telemetry left requests hanging indefinitely,\nappearing as 504 Gateway Timeout on the client. Now returns 500 with error\ndetail so the issue is visible rather than a silent timeout.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: wrap dashboard API handlers in try/catch to prevent 504 hangs",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:32:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0a37b85954d73b7d9f56bcb2504121296a46a31",
          "body": null,
          "is_bot": false,
          "headline": "9.4.5",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:25:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7870996f6afa1cf3b3fbdf202bcae70cd4393d70",
          "body": "res.sendFile in Express 5 calls next(err) on missing file, producing an\nopaque 404. readFileSync gives a clear error path if file is missing,\nand works reliably regardless of Express version quirks.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: use fs.readFileSync for dashboard HTML instead of res.sendFile",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:24:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "edb22148464f68be418cfb8e1c19cff07e0d4cbe",
          "body": null,
          "is_bot": false,
          "headline": "9.4.4",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5081fa863b0b7823974a8a3ff36e6c7c3548dce4",
          "body": null,
          "is_bot": false,
          "headline": "chore: stage version bump",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ccb56c5e41327d677e974000f32e3b490d39902",
          "body": "app.use(router) was consuming /dashboard before the dashboard sub-router\ncould handle it. Moving to explicit app.get() calls at the top of createApp()\nguarantees the route is always matched.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: register dashboard routes before main router to prevent shadowing",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:18:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f4b5f9ad855041255de1f3dbd26cfa1f43f5c9cc",
          "body": null,
          "is_bot": false,
          "headline": "9.4.2",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:08:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5866096325db2eb81cb27bf99770403566cb50e",
          "body": null,
          "is_bot": false,
          "headline": "fix: dashboard sendFile fallback — log actual path on miss",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "813117f5b3a785689da7edeec1c4383d044c0875",
          "body": null,
          "is_bot": false,
          "headline": "9.4.1",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:05:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7156746c64af173b34a2098afb513a322ba74401",
          "body": "Express strips the mount prefix, leaving an empty string that router.get('/')\ndoes not match. Adding '' to the route array fixes both /dashboard and /dashboard/.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: dashboard 404 on /dashboard without trailing slash",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:04:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e3a07e04759443ed828fa8b14fba586b4ad7be09",
          "body": "…rt-selection\n\nOld approach: predict which tools ARE needed → brittle, misclassifies\n\"find\"/\"locate\"/\"where is\" as conversational → no Grep/Glob → search breaks.\n\nNew approach: only strip groups we are CERTAIN aren't needed:\n  - Greeting (short, non-technical) → strip everything\n  - No write intent \n[…]\nful\n\nVerified on 9 test cases: file search, web search, write, execute,\ngreeting — all route correctly with zero false negatives on file ops.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: replace regex classifier with conservative stripping in sma…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T06:56:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "817a283031065b5dd3c697fa67a836ec871efc5e",
          "body": "- READ_PATTERN now includes find/locate/where is/which file/list files/open\n  so \"find config.js\" routes to file_reading (Grep+Glob) not conversational (no tools)\n- WEB_PATTERN tightened to \"search online/web/google\" only, so \"search for a file\"\n  no longer gets classified as web research\n- router.js: inject lynkr routing block into content[] array so it renders\n  visibly in Claude Code (not just as top-level lynkr_interaction field)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: smart tool selection misclassifying file search requests",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T06:48:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "28888cc7d6dc58ec86501a559df23d21faf1b508",
          "body": null,
          "is_bot": false,
          "headline": "9.4.0",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-07T20:42:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9415554124ef2c692a5919d5665039577c0743e5",
          "body": null,
          "is_bot": false,
          "headline": "chore: clean up untracked files before release",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-07T20:42:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0c1d7dd8a3dad757bd70c6e137c8ed123e60d06",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove PRODUCT.md",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T01:40:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "015fa7df6046635e267c1e540b8f7c9521874e85",
          "body": "Heavy rounded grotesque matching the intended heading weight and letterform.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design: swap display font Syne → Bricolage Grotesque",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T01:38:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37dcb213b313efca15031fddeff1503640c85fe9",
          "body": "…sthetic\n\n- New design system: Syne display + IBM Plex Sans/Mono, electric amber accent\n  oklch(0.78 0.17 78), near-black cool bg oklch(0.08 0.008 250)\n- Replaced purple gradient SaaS aesthetic with data-forward, terminal-native look\n- Hero: asymmetric split layout, benchmark numbers as instrument r\n[…]\ntyle.css: full rebrand to match new tokens (amber accent, IBM Plex)\n- Added PRODUCT.md (register: brand, Vercel-reference, anti-refs defined)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design: full landing page and docs redesign — Precision Instrument ae…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T01:33:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a562005dbbaabe39f5aa2df352d0885c088d7e9a",
          "body": "- Step 1: npm only, removed brew tap command\n- Step 2: updated to show Ollama, Azure OpenAI, and tier routing examples\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove Homebrew install, update provider config in quick start",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:55:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6e9344f8ae0ff51d8f9705e08cc5ee82519cef51",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: replace remaining 'proxy' with 'gateway' on website hero",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:50:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e81052ec331aac1f10485387b80564503d474ee",
          "body": "- Tagline and hero updated: \"Compress tokens. Cut AI costs.\"\n- Hero stats: 87.6% JSON compression, 53% tool reduction, 171ms cache hits\n- Added benchmark results section to README and GitHub Pages site\n- Feature cards rewritten around measured numbers (TOON, tool selection, semantic cache, tier rout\n[…]\nded benchmarks table and updated architecture diagram\n- All \"LLM proxy\" references replaced with \"LLM gateway\" across all docs and site files\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update README, website, and docs with benchmark numbers",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:47:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b4f869b57a55180849b6d0a5e272fb79ebb2bd7",
          "body": null,
          "is_bot": false,
          "headline": "fixed some minor issues",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c05091906d470973834fa9f69fa29082b1eeea6",
          "body": "Every social share of Lynkr was rendering empty because the\ncanonical URL, OG image, sitemap, and robots.txt all pointed at\nvishalveerareddy123.github.io/Lynkr (HTTP 404). The real site\nlives at fast-editor.github.io/Lynkr. This also splits Google's\nindex across a dead canonical and the working host\n[…]\nt out into a separate PR because this\ntoken doesn't have the workflow scope. Apply it via the GitHub web\neditor — change line 25:\n  HOST=\"vishalveerareddy123.github.io\" -> HOST=\"fast-editor.github.io\"",
          "is_bot": false,
          "headline": "seo: fix dead canonical URLs, broken social cards, stale metadata (#71)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-05-30T15:49:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f68eb37f12cbc864336e653d986081dc1b097451",
          "body": "- Updated Dockerfile VERSION from 8.0.1 to 9.3.2\n- Updated docker-compose.yml image tag from 2.0.0 to 9.3.2\n- Updated version label from 1.0.1 to 9.3.2\n- Changed default OLLAMA_MODEL from llama3.2 to qwen2.5-coder:latest (better for coding)\n- Updated model recommendations to list qwen2.5-coder first\n- Both files already have NODE_ENV=production (no changes needed)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update Docker configs to version 9.3.2 and qwen2.5-coder defaults",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-30T02:09:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b962ab8e68b6237f422f2a625e36dec7f403aca8",
          "body": "The default NODE_ENV is now \"production\" as of version 9.3.0 (src/config/index.js:550).\nUsers no longer need to set NODE_ENV manually - the pino-pretty error is automatically\nprevented on all platforms.\n\nUpdated troubleshooting to suggest upgrading instead of setting NODE_ENV.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove NODE_ENV=production requirement (fixed in 9.3.0+)",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-30T02:04:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dafd6023f87a8dd9c7fc21b7e360114a3e893371",
          "body": "…oting\n\nImprovements based on user feedback from external Windows users:\n- Added Windows (Command Prompt) and PowerShell syntax for all commands\n- Added NODE_ENV=production to startup commands (prevents pino-pretty error)\n- Added inline \"Common Startup Errors\" section with solutions for:\n  - pino-pr\n[…]\ncommand examples by platform (Windows CMD/PowerShell vs Linux/macOS)\n\nFixes issues reported by users trying to follow Quick Start on Windows.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Windows-specific Quick Start commands and inline troublesho…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-30T02:04:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79a1d43cb4f1a24910cde3999a7571a385120175",
          "body": "* feat: full routing overhaul (phases 1-4 + cross-cutting)\n\nImplements docs/routing-improvement-plan.md across one branch.\n\nPhase 1 — Plug the open loops (default-on):\n  1.1 src/routing/tokenizer.js — js-tiktoken w/ chars/4 fallback;\n      replaces estimator in complexity-analyzer.js and api/router.\n[…]\naphify installation - must be built from source, no npm package\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: routing overhaul  (#70)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-05-30T01:54:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d1a93f0168c026053500097cf9196a87dcb170ff",
          "body": "…ections, FAQ (#68)",
          "is_bot": false,
          "headline": "docs: SEO-tune README — keyword-loaded H2s, MCP/Headroom/Trajectory s…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-05-27T06:35:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c6d9d38f3f431c53a327080c7b1e18700e1fa65",
          "body": "Removes 121 files that were committed to main but match .gitignore rules:\n- .claude/settings.local.json — local Claude Code permissions\n- .claw/sessions/* — Claw session JSONL logs\n- .deepsec/* — DeepSec security scan output\n- .lynkr/telemetry.db-* — SQLite WAL/SHM files\n\nThese directories are alrea\n[…]\nlves the recurring merge conflicts every feature branch hits.\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: untrack local artifact directories (#67)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-05-20T22:51:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a91418369fa90f64b71b4bf1e3516d09c665391",
          "body": "* feat: parallel tool execution + RTK-inspired tool result compressor\n\n- Universal tool→shell converter handles arbitrary tool counts (model decides)\n- Unique tool_use ID generation with sequential counter to prevent collisions when models batch many calls\n- New src/context/tool-result-compressor.js\n[…]\naude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feat/codexsaver inspired routing (#66)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-05-20T22:51:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ae5a7717adc648d05709d077bbd3dda0ed81447",
          "body": "* feat: parallel tool execution + RTK-inspired tool result compressor\n\n- Universal tool→shell converter handles arbitrary tool counts (model decides)\n- Unique tool_use ID generation with sequential counter to prevent collisions when models batch many calls\n- New src/context/tool-result-compressor.js\n[…]\nSonnet 4.6 <noreply@anthropic.com>\n\n* added united\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feat/parallel tool execution (#65)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-05-20T01:00:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ea2e7027580d784a1151683427e20ac0ccc34eb",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: update webpageUrl to GitHub Pages site",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-07T02:05:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dda2580bf0003139058de64e1b04ac1751974fa2",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: trim tags to 10 (floss.fund validation limit)",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-07T01:55:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9ed1d3a8f4b32fddcb19a0262c5cb114fb287af4",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "add funding.json manifest for FOSS United grant application",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-07T01:51:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2dde543328e507dc59b6a5c7dcdb6fd7d0fa4227",
          "body": "…#64)\n\n* feat: parallel tool execution + RTK-inspired tool result compressor\n\n- Universal tool→shell converter handles arbitrary tool counts (model decides)\n- Unique tool_use ID generation with sequential counter to prevent collisions when models batch many calls\n- New src/context/tool-result-compre\n[…]\naude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: parallel tool execution + RTK-inspired tool result compressor (…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-04-30T01:17:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "567ca08a1fa57e6da6aa411add9f78cd34d8acb1",
          "body": "* Fixed streaming for ollama and moved busy parts to rust\n\n* Removed foreign key error and also added support for streaming ollama\n\n* 1. Stream disconnect — atomic SSE writes via res.end(payload), spec-compliant : keepalive comments, error handler sends proper response.completed\n  2. Tool name misma\n[…]\naude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feat/native rust (#63)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-04-20T21:54:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e43ce6f95048488a26a465430b2db433af22b9f7",
          "body": "Was hardcoded to 0.6.0, causing \"Version already exists\" errors.\nNow extracts version from skills/lynkr/SKILL.md frontmatter.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: read ClawHub publish version from SKILL.md instead of hardcoding",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-16T00:32:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "118b303a434bc49cb29315805ae9cb7b4507752e",
          "body": "- README: test count 699, 12+ providers, added Graphify/Distill/Code\n  Mode/admin reload/perf timer sections, added Vertex/Moonshot/Z.AI/\n  DeepSeek to provider table, updated comparison table\n- Dockerfile: slimmed to ~70 lines, default provider changed to ollama,\n  fixed OCI labels, added config/bi\n[…]\nex, deepseek), rebuilt tarball\n- All 18 documentation files: repo URLs updated to Fast-Editor/Lynkr\n- docs site: repo URLs updated\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update README, Dockerfile, SKILL.md, and all docs for v8.0.1",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-16T00:25:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4898cb3d14f9521a1555a2dbc896931fc5042a7b",
          "body": "Feat/codex provider",
          "is_bot": false,
          "headline": "Merge pull request #62 from Fast-Editor/feat/codex-provider",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-04-16T00:11:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad13fe12814ad75edeb92871af452cfc6a4fb49d",
          "body": "- Code Mode: 4 MCP meta-tools (mcp_list_tools, mcp_tool_info,\n  mcp_tool_docs, mcp_execute) replace 100+ individual MCP tool\n  definitions, cutting tool-catalog tokens from ~17,500 to ~700.\n  Activated via CODE_MODE_ENABLED=true.\n\n- Large Payload Passthrough: smart payload cloning skips deep-copying\n[…]\n16384 across all providers\n  to match sanitizePayload default and prevent output clipping.\n\n- 699 tests passing across 184 suites.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Code Mode, large payload passthrough, perf timer, admin reload",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-16T00:11:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f8c759b2a916f65a4b41e375a9b10ba666024c24",
          "body": "cockatiel package was resolved against npm.devsnc.com (private registry)\ncausing CI ETIMEDOUT failures. Replaced with public registry.npmjs.org.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: replace private npm registry URL in lockfile",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-09T00:51:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c8fe01fb54b7bae0df12498be23e263ee4cc271",
          "body": "- Swap code-review-graph for Graphify (19-language AST knowledge graph)\n  with god node detection, community cohesion, and blast radius analysis\n- Port Distill core algorithms (structural similarity, delta rendering,\n  burst detection, bad distillation detection) into compression pipeline\n- Add rout\n[…]\nHeadroom sidecar on npm start (--build flag)\n- Update all documentation and website for v8.0\n- 655 tests passing across 171 suites\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Graphify integration, Distill compression, routing telemetry",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-09T00:26:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6f017a2926642b500b4e6474411ffe298d81f9f3",
          "body": "Problem-first framing, hero stats, competitive comparison table\n(vs LiteLLM, OpenRouter, PortKey), cost comparison, tighter quick\nstart, and cleaner feature presentation — modeled after Headroom's\ndeveloper marketing approach.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: rewrite README with marketing-focused structure",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-08T21:01:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1ecf7fdeabc8762640f5d81450e9056c89f84d28",
          "body": "Adds OpenAI Codex as a Lynkr provider by spawning `codex app-server`\nas a persistent child process communicating via JSON-RPC over stdio.\nThis inherits the user's local ChatGPT subscription auth, so no\nseparate API key is needed.\n\nNew files:\n- src/clients/codex-process.js — singleton process manager\n[…]\nDIUM=codex:gpt-5.3-codex\n  TIER_COMPLEX=codex:gpt-5.3-codex-spark\n  TIER_REASONING=bedrock:anthropic.claude-sonnet-4-20250514-v1:0\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Codex provider — use ChatGPT subscription through Lynkr",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-24T23:09:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3df28c9bc39b5029079014fd24045aab49cce717",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: add retry logic for ClawHub rate limit on publish",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-22T05:09:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d36147e55015d0f1df33f451b02242685e28a326",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: remove unsupported --force flag from clawhub publish",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-22T05:09:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a959f098b83343574ad1bbd036bcea452557fd6a",
          "body": "Adds SKILL.md for ClawHub marketplace, OPENCLAW_MODE config for model\nname rewriting in responses, and GitHub Actions workflow for automated\npublishing. When enabled, responses show actual provider/model used\ninstead of generic \"auto\".\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Lynkr OpenClaw plugin with ClawHub publish workflow",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-22T05:08:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0863a21b43bbe42c069fe6cbc43b82c7747d784",
          "body": null,
          "is_bot": false,
          "headline": "Corrected headrs",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-21T06:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dda394f417ef213232fafa4d34b43ab49a9a18b",
          "body": "…n (#59)\n\nWhen clients send tool_choice: \"none\" or an explicit tools array (even\nempty), Lynkr now respects that intent and skips injecting IDE_SAFE_TOOLS.\nPreviously, an empty tools array was converted to null during OpenAI→Anthropic\nformat conversion, causing the injection check to trigger regardless.\n\nFixes #59\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: respect client tool_choice and tools array to skip tool injectio…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-17T01:24:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cba14ec52a6448fdd4703bc1a46f25ce25218e80",
          "body": "Adds browser automation capabilities to all LLM models routed through\nLynkr via the TinyFish.ai API. The WebAgent tool navigates real websites,\ninteracts with dynamic JS content, fills forms, and returns structured JSON.\n\n- New src/tools/tinyfish.js with SSE stream consumer, retry logic, timeout\n- C\n[…]\naliases, truncation limits\n- Dockerfile and docker-compose.yml updated with TinyFish env vars\n- .env.example synced with current .env structure\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: integrate TinyFish.ai as WebAgent server-side tool",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-23T15:14:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a543283b812f6deb04cf4e773897d0a6ec497eab",
          "body": null,
          "is_bot": false,
          "headline": "update documentation for AWS Bedrock usage (#57)",
          "author_name": "Ajay Chinthalapalli Jayakumar",
          "author_login": "ajaycj",
          "committed_at": "2026-02-23T05:32:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60d4122da1d4b1790bc4ae4af8a249bb17907825",
          "body": "Fix typograchial error in readme",
          "is_bot": false,
          "headline": "Update README.md (#58)",
          "author_name": "Ajay Chinthalapalli Jayakumar",
          "author_login": "ajaycj",
          "committed_at": "2026-02-23T05:30:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9d88341c71dfe1e7e4addb77a463004806b69de",
          "body": null,
          "is_bot": false,
          "headline": "updated package.json",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-22T16:05:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f6319bb26498e64d988aaac316f74dcc12c616e",
          "body": "* chore: move dockerode to optionalDependencies, wrap require\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n* Added tiered System\n\n* Added docs\n\n* Fix IDE client tool filtering and Codex CLI tool mappings\n\n- Fix Codex Bash mapping: shell_command → shell (array format for command)\n- Add m\n[…]\n-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n* Result\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Adds intelligent tiered model routing (#47)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-02-22T14:44:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4562795f03eea272ee706e948d83d99ffc659f1c",
          "body": "…alidate on Ollama Cloud GLM-5 (#54)\n\n* feat(toon): add flag-gated prompt compression with safe fallback tests\n\n* fix(toon): support anthropic text blocks while preserving protocol payloads\n\n* fix(toon): run compression before message coalescing\n\n* docs: add TOON integration spec\n\n* fix(budget): prevent startup crash from dbPath scope error\n\n* docs(toon): add stock ollama glm-5 cloud validation results\n\n---------\n\nCo-authored-by: Plaidmustache <plaidmustache@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add flag-gated TOON compression (~10-39% payload reduction) + v…",
          "author_name": "Plaidmustache",
          "author_login": "Plaidmustache",
          "committed_at": "2026-02-19T17:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97cda6e545121c0a55515443c5aed83862bb457b",
          "body": null,
          "is_bot": false,
          "headline": "Fixed Tests",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-18T07:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96a462b8d26483d824f52a688a792fb4cf43ebfa",
          "body": null,
          "is_bot": false,
          "headline": "dbpath issue is resolved",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-18T07:50:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "221d7c5a9cffb09599adf2c0cd83133b5851efeb",
          "body": "Bug fix: remove hardcoded azure-openai fallback in SubagentExecutor._callModel. Subagents now use config.modelProvider.type (with legacy provider fallback) for Claude/GPT family models. This prevents Task/subagent failures on non-Azure setups (e.g., moonshot/openai/openrouter).\n\nCo-authored-by: Plaidmustache <plaidmustache@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(agents): honor MODEL_PROVIDER for subagent routing (#52)",
          "author_name": "Plaidmustache",
          "author_login": "Plaidmustache",
          "committed_at": "2026-02-18T07:48:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d056bb655d4f17a30c3c3deef9349128606c9295",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: move dockerode to optionalDependencies, wrap require",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-11T10:17:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "53f1f14770aa8b1166c33966207473449bec2451",
          "body": "Problem: The fs_read tool could only read files inside the workspace directory.\nUsers working with external configuration files, documentation, or system files\nhad no way to read them through the tool interface, forcing manual workarounds.\n\nChanges implemented:\n\n1. External path detection and tilde \n[…]\npproval flow\n- Paths inside workspace still use the fast path (no approval needed)\n- Write and edit operations remain workspace-only (no external writes)\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Add external file read with tilde expansion and user approval flow (#40)",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T10:00:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18864041c9cd5da499b0fe8868851e3452f15ece",
          "body": "…s (#42)\n\nProblem: Each user message triggers three concurrent runAgentLoop calls\n(main, suggestion, and others). When using large local models via Ollama,\neach call takes 30-90 seconds of GPU time. Suggestion mode calls are low-value\nand waste significant compute resources that could be serving the\n[…]\n_MODE_MODEL=default (or unset): unchanged behavior\n- Main agent loop unaffected in all cases\n- Hallucination guard tested with Llama 3.1 no-tool requests\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Add SUGGESTION_MODE_MODEL env var to control suggestion mode LLM call…",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T09:59:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57764158dd6a94f15c2b96eb80ee52654eba17e8",
          "body": "Apply the same HEADROOM_ENABLED check to the stop script to avoid\naccidentally shutting down someone else's headroom container.\n\nSuggested by @iiiCpu in #46\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: also check env vars in stop script",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-11T09:55:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0a4e68f26264e6159f3aec29104b5994421101f6",
          "body": "…on (#43)\n\nProblem: The CLI injects <system-reminder> blocks into user messages containing\nkeywords like \"search\", \"explain\", and \"documentation\". The smart selection\nclassifier was scanning the full message content including these injected blocks,\ncausing it to misclassify requests based on keyword\n[…]\nser content\n- Simple greetings no longer misclassified as research/coding requests\n- Messages without system-reminder blocks behave identically to before\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Strip system-reminder blocks before smart tool selection classificati…",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T09:52:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb9fa39d1f9ed20670cd7d4a8e30477711508d02",
          "body": "Problem: When the Ollama provider was offline or unreachable, the raw TypeError\nfrom the failed fetch bubbled up to the Express error middleware, producing an\nunhelpful 500 error. The retry client also did not recognize ECONNREFUSED as a\nretryable error, so connection-refused failures failed immedia\n[…]\nrash in Express middleware\n- Started Ollama back up: requests resume normally\n- Retry behavior verified: ECONNREFUSED triggers backoff retries before 503\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Handle Ollama offline gracefully with retry and 503 response (#41)",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T09:50:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 2,
      "commits_last_year": 209,
      "latest_release_at": "2026-06-23T08:52:38Z",
      "latest_release_tag": "v9.6.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 27,
      "days_since_latest_release": 35,
      "mean_days_between_releases": 201.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "lynkr",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "llm",
            "llm-gateway",
            "llm-proxy",
            "llm-router",
            "ai-gateway",
            "tier-routing",
            "claude",
            "claude-code",
            "anthropic",
            "cursor",
            "codex",
            "openai",
            "openrouter",
            "ollama",
            "llamacpp",
            "lm-studio",
            "bedrock",
            "aws-bedrock",
            "azure-openai",
            "databricks",
            "gemini",
            "mcp",
            "model-context-protocol",
            "prompt-cache",
            "self-hosted",
            "litellm-alternative",
            "portkey-alternative",
            "copilot-alternative"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/lynkr",
          "is_deprecated": false,
          "latest_version": "9.10.0",
          "repository_url": "https://github.com/Fast-Editor/Lynkr",
          "versions_count": 64,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2446,
          "first_published_at": "2025-12-04T01:56:38.447000Z",
          "latest_published_at": "2026-07-22T08:19:04.162000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 57,
      "stars": 538,
      "watchers": 4,
      "fork_history": {
        "days": [
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2026-01-03",
            "count": 4
          },
          {
            "date": "2026-01-04",
            "count": 6
          },
          {
            "date": "2026-01-06",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-02-01",
            "count": 2
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 2
          },
          {
            "date": "2026-02-05",
            "count": 1
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-07",
            "count": 1
          },
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-02-18",
            "count": 3
          },
          {
            "date": "2026-02-19",
            "count": 5
          },
          {
            "date": "2026-02-20",
            "count": 1
          },
          {
            "date": "2026-02-23",
            "count": 2
          },
          {
            "date": "2026-02-28",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 4
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 57,
        "total_forks": 57
      },
      "star_history": null,
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/ai-sdk-provider/tsconfig.json"
      ],
      "toolchain_manifests": [
        "native/Cargo.toml"
      ],
      "largest_source_bytes": 403191,
      "source_files_sampled": 323,
      "oversized_source_files": 11,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "headroom-sidecar/requirements.txt",
        "native/Cargo.toml",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "uuid",
            "direct": false,
            "version": "10.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 97
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 247,
        "malicious_count": 0,
        "assessed_package": "npm:lynkr@9.10.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "napi",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "napi-derive",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "serde",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "regex",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "sha2",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "hex",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "mimalloc",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "@azure/openai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "@babel/parser",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.29.0"
        },
        {
          "name": "@babel/traverse",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.29.0"
        },
        {
          "name": "@blackwell-systems/gcf",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "2.4.0"
        },
        {
          "name": "@toon-format/toon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.0"
        },
        {
          "name": "cockatiel",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.1"
        },
        {
          "name": "compression",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.4"
        },
        {
          "name": "diff",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.0"
        },
        {
          "name": "dotenv",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.4.5"
        },
        {
          "name": "express",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.1.0"
        },
        {
          "name": "express-rate-limit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.2.1"
        },
        {
          "name": "fast-glob",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.2"
        },
        {
          "name": "graphify",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "hnswlib-node",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "js-tiktoken",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.20"
        },
        {
          "name": "js-yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.1"
        },
        {
          "name": "openai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.14.0"
        },
        {
          "name": "pino",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.17.2"
        },
        {
          "name": "pino-http",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.6.0"
        },
        {
          "name": "pino-roll",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.0"
        },
        {
          "name": "undici",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.22.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": 45,
        "open_issues": 2,
        "closed_ratio": 0.913,
        "closed_issues": 21,
        "closed_unmerged_prs": 12
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "vishalveerareddy123",
          "commits": 30,
          "avatar_url": "https://avatars.githubusercontent.com/u/164256536?v=4"
        },
        {
          "type": "User",
          "login": "MichaelAnders",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/1708499?v=4"
        },
        {
          "type": "User",
          "login": "veerareddyvishal144",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/22112006?v=4"
        },
        {
          "type": "User",
          "login": "hillct",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/161479?v=4"
        },
        {
          "type": "User",
          "login": "ajaycj",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/7185561?v=4"
        },
        {
          "type": "User",
          "login": "Plaidmustache",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/161773990?v=4"
        },
        {
          "type": "User",
          "login": "blackwell-systems",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/236632453?v=4"
        },
        {
          "type": "User",
          "login": "MVS-source",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/72023257?v=4"
        },
        {
          "type": "User",
          "login": "sumleo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/29517764?v=4"
        }
      ],
      "contributors_sampled": 9,
      "top_contributor_share": 0.517
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "clawhub-publish.yml",
        "edenai-integration.yml",
        "index.yml",
        "web-tools-tests.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.cjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 0,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 5/22 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "45 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "57f06be35d8449fb344669a3d6160e1a7ee58215",
        "ran_at": "2026-07-28T21:32:17Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T01:42:31Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-22T08:20:23Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 32,
          "created_at": "2026-02-03T18:52:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 33,
          "created_at": "2026-02-03T18:53:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Fast-Editor/Lynkr",
    "host": "github.com",
    "name": "Lynkr",
    "owner": "Fast-Editor"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 35,
        "vitality": 80,
        "community": 56,
        "governance": 59,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 209,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 27
            },
            "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": "27/52 weeks with commits",
                "points": 18.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 27
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "209 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 209
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "releases_count": 2,
              "latest_release_tag": "v9.6.0",
              "releases_from_tags": false,
              "days_since_latest_release": 35,
              "mean_days_between_releases": 201.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "2 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 35 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 35
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~201.2 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 201.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 56,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "forks": 57,
              "stars": 538,
              "watchers": 4,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "538 stars",
                "points": 44.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 538
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "57 forks",
                "points": 14.6,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 57
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "4 watchers",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "packages": [
                "lynkr"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2446
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,446 downloads/month across npm",
                "points": 45.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2446,
                      "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": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 9,
              "top_contributor_share": 0.517
            },
            "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 52% of commits",
                "points": 10.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 52
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "9 contributors",
                "points": 12.2,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "merged_prs": 45,
              "open_issues": 2,
              "closed_issues": 21,
              "issue_closed_ratio": 0.913,
              "closed_unmerged_prs": 12
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "91% of issues closed",
                "points": 42.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "45/57 decided PRs merged",
                "points": 30.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 45,
                      "decided": 57
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 5/22 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "followers": 2,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Fast-Editor",
              "public_repos": 4,
              "account_age_days": 225
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2 followers of Fast-Editor",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "Fast-Editor"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~0 yr old",
                "points": 6.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "lynkr"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "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 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "64 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 64
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": ".eslintrc.cjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "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": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "claude",
                "claudecode",
                "databricks",
                "agents",
                "ai",
                "code-assistant",
                "code-generation",
                "developer-tools",
                "llm",
                "mcp",
                "llmops",
                "ai-gateway",
                "cursor",
                "llamacpp",
                "llm-gateway",
                "llm-proxy",
                "llm-router",
                "ollama",
                "prompt-caching",
                "self-hosted"
              ],
              "has_wiki": true,
              "homepage": "https://fast-editor.github.io/Lynkr/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://fast-editor.github.io/Lynkr/",
                "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": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 24,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 0,
                "status": "missed",
                "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": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 5/22 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "45 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:lynkr@9.10.0 runtime dependency closure — what installing the published package pulls in — 247 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:lynkr@9.10.0",
                  "assessed": 247
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 247,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1",
              "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": "1 affected: uuid 10.0.0 (high 7.5)",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "uuid 10.0.0 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 97 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 97
                    }
                  }
                ],
                "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": 247,
              "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": 4
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "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.82,
              "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": "82 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 82,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "packages/ai-sdk-provider/tsconfig.json"
              ],
              "agent_commit_share": 0.47,
              "toolchain_manifests": [
                "native/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "native/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "native/Cargo.toml"
                    }
                  }
                ],
                "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": ".eslintrc.cjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/ai-sdk-provider/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/ai-sdk-provider/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "47 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 47,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 403191,
              "source_files_sampled": 323,
              "oversized_source_files": 11
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (packages/ai-sdk-provider/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "packages/ai-sdk-provider/tsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "11/323 source files over 60KB",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 323,
                      "oversized": 11
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'lynkr-native' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T21:33:06.522990Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/Fast-Editor/Lynkr.svg",
  "full_name": "Fast-Editor/Lynkr",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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.