Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 06:23 UTC

sinameraji / kimiflare

kimi k2.7 terminal based coding agent & harness running on your own Cloudflare account.

TypeScriptMIT★ 158 stars⑂ 18 forkssince Apr 2026View on GitHub ↗

sinameraji/kimiflare holds a health index of 62 out of 100, placing it in the Moderate band. It scores highest on Vitality (84/100) and lowest on Security (37/100). It was last updated 4 days ago. A single contributor accounts for most of its recent work.

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

62
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

Sina MerajiPersonal account
88 followers30 public repossince Jan 2014

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

Package ecosystems

Metrics by category

Vitality

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

84Good · 22% of overall
How it's scored
36/36Push recency — last push 4 days ago
9.7/36Commit cadence — 14/52 weeks with commits
18/18Commit volume — 703 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year703
human_commit_share0.69
days_since_last_push4
active_weeks_last_year14

Release discipline

100Excellent
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 4 days ago
27/27Release cadence — a release every ~1.5 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tagv0.97.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases1.5
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

50Moderate · 18% of overall
How it's scored
35.6/60Stars — 158 stars
10.3/25Forks — 18 forks
0/15Watchers — 1 watchers
Inputs used
forks18
stars158
watchers1
growth_stateorganic
growth_factor_pct100
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
How it's scored
46.8/80Monthly downloads — 3,221 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packageskimiflare
dependents
ecosystemsnpm
total_downloads
monthly_downloads3,221
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?

61Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.3/22.5Commit distribution — top contributor authored 99% of commits
6.8/13.5Contributor breadth — 5 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled5
top_contributor_share0.988
How it's scored
46.8/46.8Issue resolution — 100% of issues closed
35.7/38.3PR acceptance — 494/529 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/18 approved changesets -- score normalized to 0
Inputs used
merged_prs494
open_issues0
closed_issues98
issue_closed_ratio1
closed_unmerged_prs35
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
14/25Owner reach — 88 followers of sinameraji
22.9/25Track record — 30 public repos, account ~12 yr old
Inputs used
followers88
owner_typeUser
is_verified
owner_loginsinameraji
public_repos30
account_age_days4,574
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 4 days ago
20/20Version history — 151 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packageskimiflare
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Engineering Quality

Are baseline engineering and documentation practices in place?

69Moderate · 20% of overall
How it's scored
24/24CI workflows — 3 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 30 merged PRs checked by a CI test -- score normalized to 0
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

100Excellent
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://kimiflare.com
10/10Repository description
10/10Topics — 10 topics
10/10Wiki
Inputs used
topicsagents, ai, vibe-coding, kimi-k26, harness, aigateway, cloudflare, moonshot, workers-ai, kimi-k27
has_wikiyes
homepagehttps://kimiflare.com
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

37At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
0/2.5CI-Tests — 0 out of 30 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/18 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 36 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3.7
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.

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.

76Good · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md
15/15Machine-readable docs (llms.txt) — llms.txt present
40/40Legible commit history — 69 of 69 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtyes
legible_history_share1
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes827
How it's scored
0/18One-command bootstrap
22/22Automated tests
0/11Lint / format config
11/11Static type checking — acp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json
10/10Reproducible environment — Dockerfile, lockfile
10/10Demonstrated agent practice — 12 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsacp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json
agent_commit_share0.12
toolchain_manifests
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.1/55Manageable file sizes — 5/319 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes165,137
source_files_sampled319
oversized_source_files5
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
40/40Runnable examples — demos
Inputs used
example_dirsdemos
has_mcp_signalyes
api_schema_files

Key facts

158GitHub stars
5contributors
703commits, last 12 months
4days since last push
100releases
1bus factor
0open issues
npmpackage ecosystems

Data collection warnings

  • Could not fetch npm package 'kimiflare-acp' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:kimiflare@0.97.0; advisories assessed against the repository dependency graph instead

More detail

Star and fork history 158 ★ / 18 ⇿
158Stars
18Forks
87Releases

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.

0408012016015818352026-042026-052026-06
Major 0Minor 60Patch 27
OpenSSF Scorecard 3.7 / 10
3.7aggregate

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-22 06:23 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
0CI-Tests0 out of 30 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/18 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities36 existing vulnerabilities detected
Direct dependencies 22
RegistryPackageVersion constraintManifest
npm@agentclientprotocol/sdk^0.21.0acp/package.json
npm@modelcontextprotocol/sdk^1.29.0acp/package.json
npmbetter-sqlite3^12.9.0acp/package.json
npmcommander^12.1.0acp/package.json
npmdiff^7.0.0acp/package.json
npmfast-glob^3.3.2acp/package.json
npmturndown^7.2.0acp/package.json
npmqrcode^1.5.4feedback-worker/package.json
npm@modelcontextprotocol/sdk^1.29.0package.json
npm@resvg/resvg-js^2.6.2package.json
npmbetter-sqlite3^12.9.0package.json
npmcommander^12.1.0package.json
npmink^7.0.1package.json
npmink-select-input^6.2.0package.json
npmink-spinner^5.0.0package.json
npmink-text-input^6.0.0package.json
npmminimatch^10.2.5package.json
npmqrcode^1.5.4package.json
npmreact^19.2.0package.json
npmturndown^7.2.0package.json
npmtypescript^5.7.2package.json
npmvscode-languageserver-protocol^3.17.5package.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

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "agents",
        "ai",
        "vibe-coding",
        "kimi-k26",
        "harness",
        "aigateway",
        "cloudflare",
        "moonshot",
        "workers-ai",
        "kimi-k27"
      ],
      "is_fork": false,
      "size_kb": 13595,
      "has_wiki": true,
      "homepage": "https://kimiflare.com",
      "languages": {
        "Dockerfile": 414,
        "JavaScript": 17016,
        "TypeScript": 2327234
      },
      "pushed_at": "2026-07-17T10:56:53Z",
      "created_at": "2026-04-21T12:26:17Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T09:05:46Z",
      "description": "kimi k2.7 terminal based coding agent & harness running on your own Cloudflare account. ",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Sina Meraji",
      "type": "User",
      "login": "sinameraji",
      "company": null,
      "location": "Tokyo",
      "followers": 88,
      "avatar_url": "https://avatars.githubusercontent.com/u/6380359?v=4",
      "created_at": "2014-01-12T04:46:09Z",
      "is_verified": null,
      "public_repos": 30,
      "account_age_days": 4574
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.97.0",
          "kind": "minor",
          "published_at": "2026-07-17T09:05:26Z"
        },
        {
          "tag": "v0.96.1",
          "kind": "patch",
          "published_at": "2026-07-11T09:37:39Z"
        },
        {
          "tag": "v0.96.0",
          "kind": "minor",
          "published_at": "2026-07-11T08:17:32Z"
        },
        {
          "tag": "v0.95.0",
          "kind": "minor",
          "published_at": "2026-07-09T05:24:34Z"
        },
        {
          "tag": "v0.94.0",
          "kind": "minor",
          "published_at": "2026-07-09T04:37:50Z"
        },
        {
          "tag": "v0.93.1",
          "kind": "patch",
          "published_at": "2026-07-09T03:34:05Z"
        },
        {
          "tag": "v0.93.0",
          "kind": "minor",
          "published_at": "2026-07-09T00:52:19Z"
        },
        {
          "tag": "v0.92.0",
          "kind": "minor",
          "published_at": "2026-07-08T22:13:23Z"
        },
        {
          "tag": "v0.91.0",
          "kind": "minor",
          "published_at": "2026-07-08T20:35:48Z"
        },
        {
          "tag": "v0.90.1",
          "kind": "patch",
          "published_at": "2026-07-04T04:06:37Z"
        },
        {
          "tag": "v0.90.0",
          "kind": "minor",
          "published_at": "2026-07-01T05:20:38Z"
        },
        {
          "tag": "v0.89.1",
          "kind": "patch",
          "published_at": "2026-06-30T06:48:05Z"
        },
        {
          "tag": "v0.89.0",
          "kind": "minor",
          "published_at": "2026-06-30T05:37:24Z"
        },
        {
          "tag": "v0.88.4",
          "kind": "patch",
          "published_at": "2026-06-20T10:20:26Z"
        },
        {
          "tag": "v0.88.3",
          "kind": "patch",
          "published_at": "2026-06-15T06:27:37Z"
        },
        {
          "tag": "v0.88.2",
          "kind": "patch",
          "published_at": "2026-06-15T05:35:48Z"
        },
        {
          "tag": "v0.88.1",
          "kind": "patch",
          "published_at": "2026-06-13T00:36:55Z"
        },
        {
          "tag": "v0.88.0",
          "kind": "minor",
          "published_at": "2026-06-13T00:19:07Z"
        },
        {
          "tag": "v0.87.0",
          "kind": "minor",
          "published_at": "2026-06-12T12:15:13Z"
        },
        {
          "tag": "v0.86.0",
          "kind": "minor",
          "published_at": "2026-06-12T04:43:15Z"
        },
        {
          "tag": "v0.85.0",
          "kind": "minor",
          "published_at": "2026-06-11T09:56:48Z"
        },
        {
          "tag": "v0.84.1",
          "kind": "patch",
          "published_at": "2026-06-11T08:14:54Z"
        },
        {
          "tag": "v0.84.0",
          "kind": "minor",
          "published_at": "2026-06-11T06:53:12Z"
        },
        {
          "tag": "v0.83.0",
          "kind": "minor",
          "published_at": "2026-06-08T13:36:04Z"
        },
        {
          "tag": "v0.82.1",
          "kind": "patch",
          "published_at": "2026-06-04T10:31:11Z"
        },
        {
          "tag": "v0.82.0",
          "kind": "minor",
          "published_at": "2026-06-03T16:53:44Z"
        },
        {
          "tag": "v0.81.0",
          "kind": "minor",
          "published_at": "2026-06-03T06:01:30Z"
        },
        {
          "tag": "v0.80.0",
          "kind": "minor",
          "published_at": "2026-06-03T02:48:04Z"
        },
        {
          "tag": "v0.79.0",
          "kind": "minor",
          "published_at": "2026-06-02T14:14:01Z"
        },
        {
          "tag": "v0.78.0",
          "kind": "minor",
          "published_at": "2026-06-02T13:21:03Z"
        },
        {
          "tag": "v0.77.0",
          "kind": "minor",
          "published_at": "2026-06-02T11:44:15Z"
        },
        {
          "tag": "v0.76.1",
          "kind": "patch",
          "published_at": "2026-05-27T00:24:06Z"
        },
        {
          "tag": "v0.76.0",
          "kind": "minor",
          "published_at": "2026-05-26T13:05:34Z"
        },
        {
          "tag": "v0.75.0",
          "kind": "minor",
          "published_at": "2026-05-24T01:31:54Z"
        },
        {
          "tag": "v0.74.1",
          "kind": "patch",
          "published_at": "2026-05-23T01:09:41Z"
        },
        {
          "tag": "v0.74.0",
          "kind": "minor",
          "published_at": "2026-05-21T23:31:49Z"
        },
        {
          "tag": "v0.73.2",
          "kind": "patch",
          "published_at": "2026-05-21T11:26:57Z"
        },
        {
          "tag": "v0.73.1",
          "kind": "patch",
          "published_at": "2026-05-18T14:24:31Z"
        },
        {
          "tag": "v0.73.0",
          "kind": "minor",
          "published_at": "2026-05-18T14:12:22Z"
        },
        {
          "tag": "v0.72.0",
          "kind": "minor",
          "published_at": "2026-05-17T06:00:18Z"
        },
        {
          "tag": "v0.71.0",
          "kind": "minor",
          "published_at": "2026-05-17T05:03:14Z"
        },
        {
          "tag": "v0.70.0",
          "kind": "minor",
          "published_at": "2026-05-16T16:11:39Z"
        },
        {
          "tag": "v0.69.0",
          "kind": "minor",
          "published_at": "2026-05-16T15:26:23Z"
        },
        {
          "tag": "v0.68.2",
          "kind": "patch",
          "published_at": "2026-05-16T15:01:29Z"
        },
        {
          "tag": "v0.68.1",
          "kind": "patch",
          "published_at": "2026-05-16T14:44:05Z"
        },
        {
          "tag": "v0.68.0",
          "kind": "minor",
          "published_at": "2026-05-16T14:06:57Z"
        },
        {
          "tag": "v0.67.0",
          "kind": "minor",
          "published_at": "2026-05-16T14:01:29Z"
        },
        {
          "tag": "v0.66.0",
          "kind": "minor",
          "published_at": "2026-05-16T13:43:08Z"
        },
        {
          "tag": "v0.65.0",
          "kind": "minor",
          "published_at": "2026-05-16T13:30:01Z"
        },
        {
          "tag": "v0.64.0",
          "kind": "minor",
          "published_at": "2026-05-16T12:46:56Z"
        },
        {
          "tag": "v0.63.0",
          "kind": "minor",
          "published_at": "2026-05-13T12:56:02Z"
        },
        {
          "tag": "v0.62.0",
          "kind": "minor",
          "published_at": "2026-05-13T05:21:42Z"
        },
        {
          "tag": "v0.61.0",
          "kind": "minor",
          "published_at": "2026-05-13T04:25:12Z"
        },
        {
          "tag": "v0.60.1",
          "kind": "patch",
          "published_at": "2026-05-13T01:50:22Z"
        },
        {
          "tag": "v0.60.0",
          "kind": "minor",
          "published_at": "2026-05-12T23:36:39Z"
        },
        {
          "tag": "v0.59.0",
          "kind": "minor",
          "published_at": "2026-05-12T14:32:23Z"
        },
        {
          "tag": "v0.58.0",
          "kind": "minor",
          "published_at": "2026-05-12T13:46:46Z"
        },
        {
          "tag": "v0.57.0",
          "kind": "minor",
          "published_at": "2026-05-11T07:27:11Z"
        },
        {
          "tag": "v0.56.0",
          "kind": "minor",
          "published_at": "2026-05-11T04:57:08Z"
        },
        {
          "tag": "v0.55.1",
          "kind": "patch",
          "published_at": "2026-05-11T04:36:24Z"
        },
        {
          "tag": "v0.55.0",
          "kind": "minor",
          "published_at": "2026-05-11T03:28:48Z"
        },
        {
          "tag": "v0.54.1",
          "kind": "patch",
          "published_at": "2026-05-11T03:19:35Z"
        },
        {
          "tag": "v0.54.0",
          "kind": "minor",
          "published_at": "2026-05-10T23:18:17Z"
        },
        {
          "tag": "v0.53.0",
          "kind": "minor",
          "published_at": "2026-05-10T12:42:13Z"
        },
        {
          "tag": "v0.52.0",
          "kind": "minor",
          "published_at": "2026-05-10T11:25:24Z"
        },
        {
          "tag": "v0.51.0",
          "kind": "minor",
          "published_at": "2026-05-10T04:47:06Z"
        },
        {
          "tag": "v0.50.1",
          "kind": "patch",
          "published_at": "2026-05-09T16:37:29Z"
        },
        {
          "tag": "v0.50.0",
          "kind": "minor",
          "published_at": "2026-05-09T13:47:52Z"
        },
        {
          "tag": "v0.49.0",
          "kind": "minor",
          "published_at": "2026-05-09T03:58:21Z"
        },
        {
          "tag": "v0.48.5",
          "kind": "patch",
          "published_at": "2026-05-09T00:33:42Z"
        },
        {
          "tag": "v0.48.4",
          "kind": "patch",
          "published_at": "2026-05-08T11:14:34Z"
        },
        {
          "tag": "v0.48.3",
          "kind": "patch",
          "published_at": "2026-05-08T10:08:31Z"
        },
        {
          "tag": "v0.48.2",
          "kind": "patch",
          "published_at": "2026-05-07T23:31:01Z"
        },
        {
          "tag": "v0.48.1",
          "kind": "patch",
          "published_at": "2026-05-07T16:43:26Z"
        },
        {
          "tag": "v0.48.0",
          "kind": "minor",
          "published_at": "2026-05-07T15:51:37Z"
        },
        {
          "tag": "v0.47.0",
          "kind": "minor",
          "published_at": "2026-05-07T14:18:50Z"
        },
        {
          "tag": "v0.46.0",
          "kind": "minor",
          "published_at": "2026-05-07T13:54:28Z"
        },
        {
          "tag": "v0.45.0",
          "kind": "minor",
          "published_at": "2026-05-07T13:10:01Z"
        },
        {
          "tag": "v0.44.0",
          "kind": "minor",
          "published_at": "2026-05-06T17:57:13Z"
        },
        {
          "tag": "v0.43.0",
          "kind": "minor",
          "published_at": "2026-05-06T16:32:59Z"
        },
        {
          "tag": "v0.42.0",
          "kind": "minor",
          "published_at": "2026-05-06T16:23:02Z"
        },
        {
          "tag": "v0.41.0",
          "kind": "minor",
          "published_at": "2026-05-06T16:09:04Z"
        },
        {
          "tag": "v0.40.0",
          "kind": "minor",
          "published_at": "2026-05-06T15:36:37Z"
        },
        {
          "tag": "v0.39.1",
          "kind": "patch",
          "published_at": "2026-05-06T14:27:15Z"
        },
        {
          "tag": "v0.39.0",
          "kind": "minor",
          "published_at": "2026-05-06T07:37:27Z"
        },
        {
          "tag": "v0.38.1",
          "kind": "patch",
          "published_at": "2026-05-06T04:21:44Z"
        },
        {
          "tag": "v0.38.0",
          "kind": "minor",
          "published_at": "2026-05-06T03:47:14Z"
        },
        {
          "tag": "v0.37.0",
          "kind": "minor",
          "published_at": "2026-05-05T18:20:20Z"
        },
        {
          "tag": "v0.36.2",
          "kind": "patch",
          "published_at": "2026-05-05T17:36:57Z"
        },
        {
          "tag": "v0.36.1",
          "kind": "patch",
          "published_at": "2026-05-05T17:08:20Z"
        },
        {
          "tag": "v0.36.0",
          "kind": "minor",
          "published_at": "2026-05-05T15:37:14Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2026-05-05T13:49:22Z"
        },
        {
          "tag": "v0.34.1",
          "kind": "patch",
          "published_at": "2026-05-05T12:29:24Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2026-05-05T11:03:12Z"
        },
        {
          "tag": "v0.33.0",
          "kind": "minor",
          "published_at": "2026-05-03T14:42:42Z"
        },
        {
          "tag": "v0.32.0",
          "kind": "minor",
          "published_at": "2026-05-03T09:15:37Z"
        },
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2026-05-01T09:45:14Z"
        },
        {
          "tag": "v0.30.0",
          "kind": "minor",
          "published_at": "2026-05-01T07:46:46Z"
        },
        {
          "tag": "v0.29.1",
          "kind": "patch",
          "published_at": "2026-05-01T03:13:54Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2026-04-30T13:41:15Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f98cab61dbbd41c9655a68e673f934e3a76bd4ca",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.97.0 (#628)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T09:05:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "757bc7d3565bb2b75fb9189f2ebad771764837d9",
          "body": "…r (#629)\n\n- Seed moonshotai/kimi-k3 in the model registry with 1M context,\n  vision/tools/reasoning/streaming, and placeholder pricing.\n- Add moonshotai as a first-class ModelProvider with dedicated BYOK key storage.\n- Make K3 the default cloud model and let cloud onboarding pick between\n  K3, K2.7\n[…]\nOK-only on AI Gateway today.\n- Update provider labels, key-entry hints, and missing-key guidance.\n- Add registry and client tests for Moonshot routing.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(models): add Moonshot Kimi K3 support as AI Gateway BYOK provide…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-17T08:06:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc2a76fdcf83c4fba459ada817a39aabde833134",
          "body": "Replace the hand-coded HTML terminal simulation on the landing page with\nauthentic, reproducible VHS recordings. Adds .tape scripts for 5 key\nscenarios (onboarding, permission modal, cost tracking, plan mode,\nmulti-model) plus helper shell scripts, npm script, and docs.\n\n- New demos/*.tape files wit\n[…]\n- Updated docs/index.html to use onboarding.gif with noscript fallback\n- Updated README.md hero to use onboarding.gif\n- Added \"record-demos\" npm script\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(demos): add VHS terminal recordings for marketing (#627)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-12T05:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "373862df1ffbc405cc7f688c638e568cdbcb73cc",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.96.1 (#626)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-11T09:37:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6ec8c9d411b17e2c3c0afa9fa2df4d52d9fc112",
          "body": "Picking a plan option from present_plan_options immediately reset the\nsession (wiping sessionPlanRef and message history) while leaving the\nplan-complete picker armed. Clicking \"Execute this plan\" afterwards\nre-resolved the plan from the wiped state and failed with \"No plan\nfound to start fresh with\n[…]\nthe plan so execution actually begins. The plan text is bound\nto the picker when it is armed so later state mutations can't\ninvalidate the pick.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(plan-mode): defer fresh start until execution mode is picked (#625)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-11T09:06:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b6cc76ff3d2dea846d5b6145fb049ee840e3509",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.96.0 (#624)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-11T08:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a1b7edb032afccda9e1b1fea87be5cdb3e0274f",
          "body": "When cloudMode is enabled (via config or --cloud), use\n@cf/moonshotai/kimi-k2.7-code as the default model and surface\nKimi-K2.7 in user-facing copy (logo, --help, error hints).\nSelf-hosted/direct Workers AI mode keeps Kimi-K2.6 as the default.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(cloud): default to Kimi-K2.7 in cloud mode (#623)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-11T08:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fedc4cfe4c0a9c8f2a64b50c05c7056d0d76f00",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.95.0 (#622)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T05:24:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a62580f8dbc6e2c264e182a36198c9739b30960",
          "body": "On KimiFlare Cloud the model is managed server-side (worker pins @cf/moonshotai/kimi-k2.7-code), so the model is now fully hidden from cloud users:\n- status bar no longer shows the model id (keeps the CLOUD badge)\n- /model is removed from the slash picker and, if typed, replies that model selection isn't available on Cloud\n- onboarding confirm screen omits the Model line in cloud mode\nSelf-hosted behaviour is unchanged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cloud): hide model name and picker in cloud mode (#621)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T05:23:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da231c5eca3d8d3cddc3c0bd07fb71399284d2ab",
          "body": "On the Cloud device-auth screen, Enter now opens the sign-in URL in the default browser instead of making the user copy/paste it. Updates the step-1 copy to say so.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(onboarding): press Enter to open the Cloud sign-in URL (#620)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T05:19:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4132a7dbac64ea73a2027a15feda3782ebcaa742",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.94.0 (#619)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T04:37:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59b4fab39763bf17e8d4da4c7940548e414f400b",
          "body": "Adds two cloud-mode slash commands:\n- /topup buys a one-time token pack (+50M) via Stripe payment-mode checkout — no second subscription — then polls usage and refreshes the budget in place when it lands.\n- /manage prints current token usage and opens the Stripe Customer Portal (card, invoices, canc\n[…]\nugh SlashContext (topup / manageMembership). billing.ts gains createTopupSession; createCustomerPortalSession was already present.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cloud): /topup and /manage membership commands (#618)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T04:31:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5c89c921e1ee8dd09d63c26f8edfb1d7472d3807",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.93.1 (#617)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T03:33:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a51d7e9182a16132fd883174c7a09f5258d350f8",
          "body": "…grade UX (#616)\n\n* Revert \"feat(ui): add Try again button to retryable API errors (#611)\"\n\nThis reverts commit f85a9d1aa360e6be98d20167bd6f8709ca17bdff.\n\n* fix(ui): optional expiresAt + simplify cloud quota message\n\nPR #614 removed expiresAt from the cloud_quota_exhausted producer but the event typ\n[…]\nstatus on cloud startup so relaunch reflects Pro.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: slash-command crash + restore self-hosted onboarding + Cloud /up…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T02:44:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4f4a243b0cbe0eac828a326ccde2dae6f882d008",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.93.0 (#615)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T00:52:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1f97aac1401701291702f195f498f970749775a",
          "body": "…ken thresholds (#614)\n\nImplements Option C for session memory management:\n\n- Adds  (default 500k) and\n  (default 2M) to config.\n- After each turn, if estimated in-memory tokens exceed the compact threshold,\n  aggressively compacts history (keepLastTurns: 1) via artifacts or LLM summary.\n- If compac\n[…]\nturn-count auto-fresh.\n- Prevents the terminal from becoming unusable during very long sessions with\n  massive accumulated context (e.g. 8–12M tokens).\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(session): hybrid auto-compact + auto-fresh based on in-memory to…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T00:14:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "44e8cbf522167ac7281ec7d69a995dd8ae47f677",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.92.0 (#608)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-08T22:13:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd150991fdee378617c5c0ca70f2f441bb21a708",
          "body": "- Remove duplicate /plan, /auto, /edit entries (unified /mode stays)\n- Remove /reasoning entry\n- Comment out /ui entry (Ink is the only engine; handler remains)\n- Update header comment to clarify picker vs handler relationship\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(commands): clean up slash command picker (#612)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:12:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f85a9d1aa360e6be98d20167bd6f8709ca17bdff",
          "body": "- ApiErrorMessage now renders a SelectInput (Try again / Dismiss) for\n  retryable errors (429, code 3040, or >=500) when onRetry is provided.\n- ChatView tracks the latest retryable api_error and passes onRetry only\n  to that event, preventing stale retries.\n- App stores the last user message in pend\n[…]\nns while still re-classifying intent\n  and starting the supervisor turn normally.\n- onDone clears pendingRetryRef so successful retries clean up state.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): add Try again button to retryable API errors (#611)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:11:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a77e5c6a4521934e7b2fa3d5808c54ef97452bd1",
          "body": "Replaces the previous default @cf/moonshotai/kimi-k2.7-code with\n@cf/moonshotai/kimi-k2.6 across config, CLI strings, logo, and all\nhardcoded fallbacks.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: make @cf/moonshotai/kimi-k2.6 the default model (#610)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1026b7ef033a2b7e1a42eb5debedada048f00f4c",
          "body": "Replace the static spinner with a weighted progress indicator that\nadvances through known resume stages and streams token-by-token\nduring the LLM summary generation.\n\n- Add onProgress callback to generateContinuationSummary\n- Track resumeProgress / resumeStage in useSessionManager\n- Create ResumeProgress Ink component with block-char bar\n- Wire into app.tsx resume screen\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): add moving progress bar during session resume (#607)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e54ed48c4728ea849c3e4c9754b4fb9cf516259e",
          "body": "Removes multi-agent-experimental from the mode list so only\nplan, edit, and auto appear in the mode picker and Shift-Tab cycle.\n\n- Remove multi-agent from MODES array and nextMode cycle\n- Remove multiAgentEnabled prop from ModePicker/ModalHost\n- Simplify Shift-Tab handler in app.tsx\n- Update /mode command hints and slash command handling\n- Clean up status bar multi-agent display fallbacks\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: remove multi-agent-experimental from mode cycle (#609)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a5af2b1464d54e9dab15eed92d8bde758b2e71f",
          "body": "* feat(tools): layered PR-preferred workflow for git pushes\n\n- Add preferPullRequests and allowDirectPush config options\n- Block git push to default branch unless allowDirectPush is enabled\n- Add github_create_pr tool for opening pull requests\n- Inject PR workflow guidance into system prompt\n\nCo-aut\n[…]\n, append a gentle hint suggesting the user\nenable them to prevent accidental direct pushes.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(tools): layered PR-preferred workflow for git pushes (#603)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T21:56:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5f166d5d6579044cd85502e4083c4618ed3e023f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.91.0 (#606)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-08T20:35:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "634406deac5347baff1cfb49405a9053b1327b7f",
          "body": "…586)\n\n* chore(main): release 0.88.1 (#585)\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n* feat(cloud): restore KimiFlare Cloud adapter with K2.7 free tokens\n\nRestores the KimiFlare Cloud managed-service\n[…]\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(cloud): restore KimiFlare Cloud adapter with K2.7 free tokens (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T20:32:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7b6efbf5b359f879a1bfa664bee8f80f461e5fb7",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.90.1 (#605)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-04T04:06:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87bda6b636a64096ef21cc975e69621a4d2f9a8f",
          "body": "…ummary (#604)\n\nWhen a user selects a session to resume, show a spinner with\n'Pulling context…' while the session loads and the continuation\nsummary is generated. The chat view with the summary is then shown\nautomatically, so users no longer need to send a message first.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): show loading state while resuming session and auto-display s…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-04T03:29:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6751a3d32438a26e8e58954f0a8a8a7f2d6dbb8",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.90.0 (#602)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-01T05:20:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c56f8e97e839fa1e334f9ecab9d8ae8db099e82",
          "body": "When a user resumes a session via /resume, display a two-tier context\nsummary so they don't have to ask 'where were we?':\n\n1. Instant local summary (zero latency) from session state — task,\n   modified files, and next actions.\n2. Async LLM-generated continuation summary (reusing the existing\n   gene\n[…]\ncted buildLocalResumeSummary as a pure testable function with 6\nco-located test cases. Graceful degradation if the LLM call fails or\nconfig is missing.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): show session context summary on /resume (#601)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-01T05:14:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0158e703763003852fe209b21434ec132e713d27",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.89.1 (#599)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T06:47:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad1bb84391254d7744dacfa4fddea938c1facb6a",
          "body": "… cache hits (#600)\n\nCloudflare AI Gateway includes cf-aig-metadata in the HTTP cache key.\nSending tier (intent classification) and skl (skill count) on every turn\nmeant every request had a unique cache key, collapsing prefix-cache hit\nrates from ~93% to <50% and inflating costs 10x.\n\nThese values are still logged to cost-debug.jsonl for local analysis;\nthey just no longer poison the Gateway cache key.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(agent): remove per-turn tier/skl from gateway metadata to restore…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T06:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cde20acc6d8a346501a12eec719cdd74db1d0b60",
          "body": "…598)\n\nInk v7 incremental rendering doesn't properly clear old wrapped lines\nwhen a bare <Text> component lets the terminal handle wrapping naturally.\n\n- Add optional width prop to CustomTextInput\n- When width is provided, wrap <Text> in <Box width={...}> with wrap=\"wrap\"\n  so Ink's layout engine ma\n[…]\n and knows the true line count\n- Pass terminal width minus prompt offset from app.tsx\n\nFixes Ink bug #909 with incremental rendering and text wrapping.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): prevent ghost text when input wraps across multiple lines (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T06:39:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "236454b2820fb2f4eeba56d356d85413ca1cab88",
          "body": "- Remove --camouflage-bin option and update --ui help to only mention Ink.\n- Force uiEngine to \"ink\", ignoring --ui, KIMIFLARE_UI, and config.\n- Comment out the Camouflage UI branch in src/index.tsx.\n- Make kimiflare resume print that resume is temporarily unavailable.\n- Update config docs to note u\n[…]\n update checks in app.tsx.\n- Update /ui builtin description and camouflage-resume stub.\n- Add note to ui-mode.ts that the module is temporarily unused.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "temporarily disable Camouflage UI access and force Ink (#597)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T05:57:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eabff75eae6a7a29277776f105bedd2e819af8ed",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.89.0 (#596)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T05:37:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f81874776ade0440f778846d599542270c4c04d",
          "body": "…/edit (#595)\n\nThe plan-complete picker promised to start executing in auto/edit mode,\nbut in practice the agent often stopped and asked for a second\nconfirmation before doing any work.\n\nTwo root causes:\n\n1. Camouflage path: selecting auto/edit switched mode and seeded the\n   plan into messages, the\n[…]\n picker can reset the session and rebuild the system\n   prompt without seeding messages, letting submitRef.current(plan)\n   push the plan exactly once.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): auto-start execution after plan-complete picker chooses auto…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T05:36:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e02f3bc0784eb458fa5fa7c75ac359e41766ae35",
          "body": "GLM 5.2 shipped on Cloudflare Workers AI on 2026-06-16 as\n@cf/zai-org/glm-5.2. As a Workers AI (@cf/) model it reuses the existing\ndual-path routing (direct api.cloudflare.com or AI Gateway) with no\nplumbing changes — the model picker and pricing read from the registry\nautomatically.\n\nPricing pulled\n[…]\nnput $1.40/M, cached input $0.26/M, output $4.40/M; 262k context.\n\nCo-authored-by: Sina Meraji <sinameraji@Sinas-MacBook-Pro.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(models): add GLM 5.2 (Zhipu AI on Workers AI) to registry (#594)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T05:36:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b49505cce6090df776b7003bf739f82cb29286b",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.4 (#593)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-20T10:20:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f05207fceef079954424f29958c39705f95a4256",
          "body": "…ng) (#592)\n\n* feat(debug): hidden LLM payload dump mode for context-bloat research\n\nAdd a debug-only, default-off instrumentation toggle (KIMIFLARE_DUMP_LLM=1)\nthat records the complete payload sent to the LLM plus the response, so we\ncan study what fraction of the outbound context is unhelpful (in\n[…]\next down, tool_results share\nof the payload down.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(tokens): cache-safe recall + Code Mode enforcement (+ dump tooli…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-20T10:18:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8597f4c5ba6cf52be1f1622774c0f34bde939fe5",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.3 (#590)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-15T06:27:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed14cc612f60a7bca0a591922ccadacce386ed32",
          "body": "Make plan preservation deterministic with a two-layer store:\n\n1. In-session fast path: keep using sessionPlanRef/sessionPlan.\n2. Durable agent-memory backup: persist the captured plan under the\n   deterministic topic key current_dev_plan so it survives /clear,\n   executeFreshStart, or any other ref \n[…]\n in\n  plan mode; persist captured plans to memory as a fire-and-forget backup.\n- Add unit tests for MemoryManager plan storage and resolvePlanForFresh.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(agent): preserve original plan across /fresh in plan mode (#589)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-15T05:55:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06701897d0c86fdaab35b2e733e3d3f535660f00",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.2 (#588)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-15T05:35:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4648b9b4def647299647878dae5cdbe5d5d4afbd",
          "body": "…#587)\n\nThe native /workers-ai/{model} path through gateway.ai.cloudflare.com\nreturns HTTP 401 for Workers AI embedding models. Switch the gateway\npath to the OpenAI-compatible /compat/embeddings endpoint with a\nworkers-ai/ model prefix, which matches how chat completions already\nroute through AI Ga\n[…]\n {data: [{embedding, index}]} response.\n- URL-encode account, gateway, and model identifiers.\n- Add unit tests for gateway and direct Workers AI paths.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(memory): route embeddings through AI Gateway /compat/embeddings (…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-15T05:17:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df874fd9915fc3d2f32468dbd57dc2c0ad24ff95",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.1 (#585)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-13T00:36:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17c144e24ad9782ec1b294d18a9e7cca0e9126de",
          "body": "…88.1 (#584)\n\n- Make React Ink the default TUI for all users. Camouflage is now strictly\n  opt-in via the --ui flag or KIMIFLARE_UI env var; persisted config can no\n  longer silently switch users to the experimental engine.\n- Update remaining Kimi-K2.6 references to Kimi-K2.7 in the logo and KIMI.md.\n- Bump package version to 0.88.1.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): default to React Ink, update K2.6 to K2.7 branding, bump v0.…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-13T00:35:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8d0bc396f938408eb15f65545ebb9ed4645921f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.0 (#583)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-13T00:18:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce1f51df078dbc4edaaf748b4258368d5b8937b3",
          "body": "* feat(models): add Kimi K2.7 Code as default model\n\n- Add @cf/moonshotai/kimi-k2.7-code to the model registry with 262k context,\n  vision support, and updated cached-input pricing (bash.19/M vs K2.6's bash.16/M).\n- Make K2.7 the default main model across CLI, TUI, onboarding, SDK, and\n  remote agen\n[…]\nmparisons, llms.txt, og-image) to reference Kimi K2.7 as the\ndefault model instead of K2.6.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(models): add Kimi K2.7 Code as default model (#582)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-13T00:16:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16071d799c77e1ab08ec5bf449fa9413e342bc04",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.87.0 (#580)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-12T12:14:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a3f41f5fd2e91efc17843993947524a3b8e3ffb",
          "body": "This commit brings KimiFlare's headless/CI mode to feature parity with\nOpenCode's CLI harness. Key additions:\n\n**Enhanced Print Mode (P1):**\n- Extract runPrintMode into src/print-mode.ts with new capabilities\n- --continue / --session: resume sessions in headless mode\n- -f / --file: attach files/glob\n[…]\nry expansion (~/) supported\n\n**Tests:**\n- src/permissions-evaluator.test.ts: 10 tests for rule evaluation\n\nCloses docs/plans/headless-ci-parity-plan.md\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(headless): full headless/CI parity with OpenCode (#581)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T12:13:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1fe3a84f6bad1374234fa8a3dcda2229ef1f5a8a",
          "body": "- Remove LSP disabled notice from initLsp\n- Remove creator welcome message from startup tasks\n- Remove structured logs path/tail hint from startup tasks\n- Keep pruneOldLogs() running silently\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): reduce startup noise (#579)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T05:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d763c94deacdf6c36728cb99a3d78b44ee8b3e28",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.86.0 (#572)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-12T04:43:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e68873035fc3abd61001a38acdf93d96fab5498",
          "body": "Wire MouseClick event handler in Camouflage mode:\n- Click code block → copy to clipboard\n- Click file path → open in $EDITOR (with optional line number)\n- Click tool execution → acknowledge toggle\n\nAlso document mouse capture toggle (S key) and click actions in HELP_KEYS.\n\nRenderer-side mouse event emission is pending upstream camouflage-tui\nsupport; this change makes kimiflare ready to react when it arrives.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P3.17 mouse support — host-side event handling (#578)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T04:42:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2327e4890709919a694578ebab6f0bef6ac87735",
          "body": "* docs: add architecture comparison research doc\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n* feat(agent): parallelize read-only tools within a turn\n\nWhen every tool call in a batch is read-only (read, glob, grep,\nweb_fetch, search_web, github reads, lsp queries, etc.), execute\nthem concurren\n[…]\nus bar rotation already communicates progress; chat log\ntiming events were redundant noise.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): parallelize read-only tools within a turn (#576)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T04:21:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b319a40cb87fcbb991422eeadeae861e24381ce4",
          "body": "…dling, bug fixes (#577)\n\n- Wire --db flag to renderer for SQLite session persistence\n  (stores to ~/.config/kimiflare/camouflage-sessions.db)\n- Upgrade camouflage-tui 1.1.1-beta.1 → 2.1.0-beta.1 for paste preview\n  and TodoListUpdate support\n- Send agent tasks via TodoListUpdate (vertical checklist\n[…]\nanscriptCleared events (not in Camouflage protocol)\n- Update CAMOUFLAGE_MIGRATION.md: mark P3.14–P3.16 complete,\n  document P3.17 mouse-support roadmap\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P3 enhancements — persistence, todo list, paste han…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T03:52:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4b69e28595edf5af828cf78bea62ca7436ef7dc",
          "body": "…d, QR codes, changelog picker (#575)\n\nImplements Phase 2 (P2) Camouflage UI parity items:\n\n- P2.9: /cost now shows detailed session/today/month/all-time breakdown\n  with gateway section via ShowKeyValueView\n- P2.10: Multi-agent workers render as BackgroundTaskUpdate entries;\n  new /workers command \n[…]\no renders QR code as ASCII art in ShowKeyValueView\n- P2.13: /changelog-image ported to form + selectList flow with\n  BackgroundTaskUpdate task tracking\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P2 parity — cost breakdown, workers, hooks dashboar…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T03:01:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6b889af7d81d1e231cd054aaff93d66939127569",
          "body": "…eme persistence (#574)\n\n* feat(camouflage): P1 parity — plan complete picker, skills wizard, theme persistence\n\n- P1.6: Add plan complete picker after plan mode completes. Users can\n  choose auto mode, edit mode, or continue planning. Auto/edit resets\n  the session and seeds with the distilled plan\n[…]\nroton.me>\n\n* docs(camouflage): mark P1.5, P1.6, P1.7, P1.8 as complete in migration tracker\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P1 parity — plan complete picker, skills wizard, th…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T02:05:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "465422ba1dcb42c7278a2d3da16bd8f8276ab721",
          "body": "- Add ANSI diff formatting in ToolExecutionStdout (formatAnsiDiff helper)\n- Store rendered diffs by tool_call_id in onToolCallFinalized, prepend in onToolResult\n- Replace shallow directory walk with glob(**/*) using buildFilePickerIgnoreList\n- Raise mention candidate cap from 200 to 300, preserve recent-files bubbling\n- Update CAMOUFLAGE_MIGRATION.md marking P0.3/P0.4 complete\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P0.3 diff rendering + P0.4 fuzzy file picker (#573)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T12:28:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54b49e25edb83936ea981622148bc3544672cd1f",
          "body": "…571)\n\nInstantiates the four core managers in Camouflage UI mode and wires\ntheir slash commands:\n\n- MemoryManager: created at boot when memoryEnabled, with cleanup +\n  backfill running in background. /memory search queries via recall()\n  and renders results in ShowKeyValueView. /memory clear uses co\n[…]\nt full context.\n\n- runAgentTurn now receives memoryManager + hooks for full parity with\n  Ink's agent loop.\n\nCloses gap analysis Phase 1 (P0.1 + P0.2).\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): wire MemoryManager, MCP, LSP, and Hooks managers (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T11:36:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3314d63a00eb1103af0f4fc4dc0419ac67c3c48c",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.85.0 (#569)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-11T09:56:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9368bbfa37dbdccb21a5ce53999c21a35e8740a",
          "body": "- Add generateContinuationSummary() that produces dense handoff documents\n  tailored to the current mode (auto/edit/plan/multi-agent).\n- Auto-fresh now triggers after N turns in auto/edit/multi-agent modes,\n  with a silent checkpoint before resetting.\n- /fresh command is now mode-aware: rebuilds sys\n[…]\nad of a\n  generic plan.\n- Add autoFreshEnabled and autoFreshSuggestionTurns config options.\n- Carry over session cost baseline across fresh boundaries.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): mode-aware /fresh with continuation summaries (#570)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T09:54:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43db05b1c917fe3e0fe2d559aaf16f6d6308cf05",
          "body": "…Gs (#562)\n\n* feat: add /changelog-image command to generate shareable changelog PNGs\n\nAdds a new slash command that generates beautiful changelog images from\nmerged GitHub PRs. The image includes the project logo, latest version,\nand a styled list of recently merged PRs.\n\nNew tools:\n- github_list_m\n[…]\nlare@proton.me>\n\n* fix(changelog-image): center version pill vertically with CHANGELOG text\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: add /changelog-image command to generate shareable changelog PN…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T09:08:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a2b72ac18525f53a996cd0f5905e36c42c12e41",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.84.1 (#568)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-11T08:14:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c328f639ad9a83bf37f849f51b4177c169e279f1",
          "body": "…mode (#567)\n\nWhen a plan-mode session completes and the user chooses to execute\n(auto/edit) or runs /fresh, the agent was receiving a stale plan-mode\nsystem prompt ('Do not call write, edit, or mutating bash commands').\n\nThe React effect that rebuilds the system prompt on mode change fires\nasynchro\n[…]\nash-commands.ts executeFreshStart (/fresh, present_plan_options)\n- ui-mode.ts /fresh handler (Camouflage)\n- ui-mode.ts plan-options picker (Camouflage)\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): rebuild system prompt when switching from plan to execution …",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T08:13:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "616a38dc7ec3f87c28c5a6c54dad279d5c9866ad",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.84.0 (#565)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-11T06:53:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aa0d597a4014df3fcd23b5c8cbd5ddc0bcb22b5",
          "body": "…566)\n\nWhen a plan-mode session completes, we now capture the distilled plan\nin a dedicated ref/variable instead of re-distilling it from message\nhistory every time the user wants to execute.\n\nPreviously, if the user chose \"continue\" in the plan-complete picker\nand asked follow-up questions, new ass\n[…]\n stored plan in /fresh\n- slash-commands.ts: add sessionPlanRef to SlashContext, use it in\n  handleFresh and clear it in handleClear / executeFreshStart\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(plan-mode): preserve original plan across follow-up discussion (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T06:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2ceabcf414a72bfba042385861e6274a2a7edae",
          "body": "The 50-call ceiling was too conservative for modern agent workflows.\nBump the default to 200 while keeping the limit-modal safeguard so\nusers can still intervene if a runaway loop occurs.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): increase default tool-call limit from 50 to 200 (#564)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T06:28:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab633707d1319e37d387054ba699e66f8aab6f7f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.83.0 (#557)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-08T13:35:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c413081711a7237b18f306ca3da7dc98a6cc73de",
          "body": "* feat(agent): LLM-based synthesis for multi-agent findings\n\n- Add synthesis config options: synthesisModel, synthesisStrategy, disableLlmSynthesis\n- Rewrite synthesizeFindings() with async LLM path + heuristic fallback\n- Extract legacy heuristic into private synthesizeFindingsHeuristic()\n- Add priv\n[…]\nsion — same behavior as\ncancel, but explicitly visible so users know they can keep talking.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(tools): present_plan_options tool with dual-UI support (#563)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T10:38:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ed1e9b27fefa12eefff77dd5bad310a9ba2678e",
          "body": "…e (#559)\n\n- Strengthen system prompt instruction for tasks_set from soft suggestion\n  to imperative MUST language, requiring the model to call it before/after\n  each step and before mutating tools.\n- Add heuristic auto-advance in the agent loop: after 3 mutating tools\n  (write/edit/bash) without a \n[…]\n the current\n  in_progress task to completed and the next pending to in_progress.\n  This keeps the UI honest when the model forgets to update progress.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(agent): strengthen tasks_set prompt and add heuristic auto-advanc…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T08:14:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "546a81a65fcb486c01495934c818aed1c91f7aad",
          "body": "- Shorten H1 from a 5-line keyword-stuffed sentence to a punchy headline\n- Shorten subtitle to one line\n- Remove the quick-answer block (massive text wall in hero)\n- Remove the Core tools table (too detailed for a landing page)\n- Trim comparison and FAQ section headers\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(docs): shorten hero copy and remove text-heavy sections (#561)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T08:12:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81982837f6cac6073955310dcac3b96aa23c055d",
          "body": "When /fresh resets the session for plan→implement transitions, the\nstatus-bar dollar amount now stays continuous instead of dropping to\nbash.00.\n\n- Add  to  — hidden bookkeeping only\n-  snapshots the old session's displayed\n  cost (including any prior baseline) into the new session\n-  adds baseline \n[…]\nt leaves\n  today/month/allTime aggregates untouched\n- Wire  handler to capture old ID, force new ID creation,\n  and carry the baseline over immediately\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(usage): carry over cost baseline on /fresh (#560)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T08:09:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "39966e11ed8e34ba742ef93be5405b9f4239049d",
          "body": "Optimize the marketing site for search engines and LLM answer engines\naround high-intent terms (Claude Code alternative, Cloudflare AI coding\nagent, AI coding harness, Kimi K2 CLI).\n\nTechnical SEO:\n- Add robots.txt (welcomes AI crawlers), sitemap.xml, llms.txt, _headers.\n\nOn-page (index.html):\n- Key\n[…]\ntxt.\n\nSocial:\n- New 1200x630 og.png social card (source og-image.svg) wired into all\n  OG/Twitter tags, replacing the square logo.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(seo): SEO + GEO overhaul of kimiflare.com (#556)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T07:17:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "48174c6b3887bf5ca853ed0a198b92496330d1eb",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.82.1 (#555)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-04T10:30:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b39304887c79643aa121e33038942494fb6a25f",
          "body": "…n mode (#554)\n\n- Move showPlanCompletePicker from hasFullscreenModal to hasOverlayModal\n  in useModalHost() inline flags calculation, matching computeModalFlags.\n- Add setLimitModal(null) in cleanupTurn() so stale limit modals don't\n  block the picker after plan mode completes.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): prevent blank screen when PlanCompletePicker opens after pla…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-04T10:30:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d47af66d659db9d287e3ca9ac7c778a3bd716d38",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.82.0 (#548)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-03T16:53:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea6946adfaf8e45f78698746934ccdc4dc5b58ca",
          "body": "…e hook (#552)\n\n* feat(update): check for camouflage-tui optional dependency updates\n\n- Add checkOptionalDependency() in update-check.ts to query npm dist-tags\n- Wire camouflage-tui beta check into Ink UI (app.tsx) startup + interval\n- Wire camouflage-tui beta check into Camouflage UI (ui-mode.ts) s\n[…]\n rapid successive updates.\n- Add regression tests for rendering, sanitization, and helpers.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): correct cursor rendering, add paste sanitization and usePast…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T16:49:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7724f1332028cd685b08e7dfc53b5b961b4e68ea",
          "body": "…an (#551)\n\n- Move PlanCompletePicker from fullscreen modal to inline overlay so chat/plan\n  remain visible behind it.\n- After picking auto/edit mode, automatically submit the plan via submitRef to\n  kick off the first agent turn without requiring manual input.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): make PlanCompletePicker an inline overlay and auto-submit pl…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T16:42:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f07da38e8eba1ead1ff523f6bc1dd7358bf1f23f",
          "body": "…550)\n\n- Add checkOptionalDependency() in update-check.ts to query npm dist-tags\n- Wire camouflage-tui beta check into Ink UI (app.tsx) startup + interval\n- Wire camouflage-tui beta check into Camouflage UI (ui-mode.ts) startup\n- Extend /update slash command to accept 'camouflage' argument\n- Add /update camouflage to help menu\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(update): check for camouflage-tui optional dependency updates (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T15:51:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0122870d2de8c3c33e249f4e66870c7c153ce5ca",
          "body": "The camouflage UI's host-side dispatcher (ui-mode.ts) had a stub\n/logout that only toasted a no-op message, and /fresh was completely\nmissing — it fell through to 'unknown command'.\n\nThis change:\n\n- /logout now actually deletes the config file (unlink(configPath()))\n  and confirms with a toast, matc\n[…]\nipboard,\n  resets the conversation (keeping system prompts), clears the\n  transcript, and seeds the new session with the plan — identical\n  to the Ink implementation in ui/slash-commands.ts.\n\nFixes #1",
          "is_bot": false,
          "headline": "fix(camouflage): wire /logout and /fresh slash commands (#549)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T14:59:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "debe4cc4e708bb8732854ab009752c6f94383c62",
          "body": "…ssistant msg (#547)\n\n- text-input: when value changes externally (e.g. Up/Down history) and\nthe cursor was at the end of the old text, jump it to the end of the new\ntext instead of leaving it at the old offset.\n\n- chat: only render the streaming spinner on the most recent assistant\nevent. Prevents old completed assistant messages from showing a\nlingering animation.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): keep cursor at end on history nav + only spinner on latest a…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T14:18:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ae3380b2d694a45915bafdf4158ec36bb73e16b",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.81.0 (#545)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-03T06:01:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0168a278f5f7176ebbedfcbd15b4c273060fe51a",
          "body": "- Add synthesis config options: synthesisModel, synthesisStrategy, disableLlmSynthesis\n- Rewrite synthesizeFindings() with async LLM path + heuristic fallback\n- Extract legacy heuristic into private synthesizeFindingsHeuristic()\n- Add private synthesizeFindingsLlm() with prompt building, truncation,\n[…]\nte autoSpawnWorkers() to pass credentials and prompt into synthesis\n- Add comprehensive tests for LLM, hybrid, heuristic, fallback, and streaming paths\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): LLM-based synthesis for multi-agent findings (#546)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T05:50:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3e8cda5efaf7068e5beb90219b52735e44e39b6",
          "body": "When a plan-mode turn finishes with a substantive plan, show a TUI\npicker that lets the user choose:\n1. Execute plan (auto mode)\n2. Start building with permission (edit mode)\n3. Continue planning / ask a question\n\nSelecting options 1 or 2 automatically runs /fresh (resets session,\ncopies plan to cli\n[…]\nw PlanCompletePicker component using ink-select-input\n- Added showPlanCompletePicker to useModalHost\n- Wired into ModalHost and app.tsx onDone callback\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): auto-prompt /fresh when plan mode completes (#544)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T05:29:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "409f25c642e8b11d5fdef4f858d9446a8fed9b5d",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.80.0 (#530)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-03T02:47:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5893acb8f0ee9649b8ee1bb48f4cdbeab6ff34f3",
          "body": "- Add distillSessionPlan() to extract last assistant message\n- Add cross-platform clipboard utility\n- Register /fresh slash command\n- Reset session and seed with plan on execution\n- Show tip when switching from plan to auto/edit with heavy context\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: add /fresh command to reset session with distilled plan (#533)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T02:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbc633d927158539f76ecb0762d00849c0e41417",
          "body": "…ar worker list after synthesis (#532)\n\n- Respect cfg.workerTimeoutMs in supervisor.ts instead of only reading the env var.\n- Extend the worker timeout whenever new logs arrive or the step changes,\n  preventing premature kills on long but active tasks.\n- Clear activeWorkers state and call supervisor\n[…]\nhesis completes or fails in both Ink (app.tsx) and Camouflage (ui-mode.ts)\n  UIs, so the stale WorkerList disappears and synthesis is the final output.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(multi-agent): respect config timeout, extend on progress, and cle…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T02:00:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e7716da5d442e58e93b8aab5c64f95a5a8dd0d5",
          "body": "* feat(multi-agent): coordinator-side file-read cache for workers\n\nBefore spawning workers, the coordinator now pre-reads a configurable\nlist of files from the local filesystem and injects them into each\nworker's context. This eliminates redundant read tool calls across\nworkers, saving ~20-30K token\n[…]\n\n- Tests for memory-derived pre-reading (disabled, missing DB,\n  and successful derivation)\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): coordinator-side file-read cache for workers (#527)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T01:12:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ef1900b8fd714400c5638fbecabdaadecbf0562a",
          "body": "…esult handling (#526)\n\nAdds hard-ceiling validation for worker budgets, handles budget_exhausted\nstatus from the Commute worker, and treats partial results as usable\nfindings rather than hard failures.\n\n- config.ts: KIMIFLARE_WORKER_BUDGET_MAX_USD env var (default 5.0) +\n  resolveWorkerBudgetUsd() \n[…]\n\n- spawn-worker.ts: apply same ceiling validation; treat\n  budget_exhausted as partial success\n- docs: update multi-agent-actual-status.md\n\nCloses #517\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): client-side worker budget validation and partial-r…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T01:08:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c8c0d951f33e20b2f3a50825abe7b627e5b8392",
          "body": "…shallow clone (#528)\n\nThis PR addresses the coordinator-side and remote-agent-side changes\nfor issue #523 (high cold-start overhead per worker).\n\nChanges:\n- src/config.ts: add workerShallowClone and workerRepoCache flags\n  (default true) with corresponding env vars\n- src/agent/supervisor.ts: genera\n[…]\nming breakdown\n  for completed/failed workers\n- src/agent/supervisor.test.ts: assert batchId/shallowClone/repoCache\n  are present in the worker payload\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): coordinator hints, remote-agent phase timing, and …",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T00:58:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "34433cb5b2e8280f7f812b7e33107a943ca55bbb",
          "body": "Workers running inside Cloudflare Sandboxes were limited to local file\ntools (read, glob, grep) and bash. This change wires coordinator-side\nmanagers into the worker payload so research workers get:\n\n1. **Memory context** — coordinator recalls relevant memories via\n   MemoryManager.recall() and inje\n[…]\ng.ts — workerProxyMemory/Lsp/Mcp flags\n- src/app.tsx — wire managers into supervisor\n- src/agent/supervisor.test.ts — payload context test\n\nCloses #520\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): proxy memory, LSP, and MCP context to workers (#531)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T15:37:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1d29df9234ca36731a1a60ef59511f2440f0674",
          "body": "Replace the pure regex heuristic in decomposePrompt() with an\nLLM-aware decomposition pipeline:\n\n- For explicit numbered/bulleted lists, keep the existing regex split.\n- For prose prompts, use a lightweight LLM call (default: kimi-k2.5)\n  to analyze the prompt and produce 2-4 well-scoped, non-overla\n[…]\nmposition, caching\n- src/agent/supervisor.test.ts: add tests for LLM decomposition, fallback,\n  regex strategy, caching, file tree snapshot\n\nFixes #518\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): LLM-based task decomposition for multi-agent mode (#529)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T15:24:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85b517666cefebc99e5d004430e466cb6c0a6bc3",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.79.0 (#516)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-02T14:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71ace3dd2bf8b2c81e0bd01923452c9da70c2368",
          "body": "…o-present findings (#515)\n\nThis commit improves the multi-agent UX in three ways:\n\n1. **Coordinator narration**: When decomposing a heavy prompt into parallel\n   research tasks, the coordinator now narrates its plan so users can see\n   which task is delegated to each agent before work begins.\n\n2. *\n[…]\n did the agents find?\"\n\nAlso fixes a pre-existing broken test in supervisor.test.ts where the mock\nfetch returned an incorrect progress response shape.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): coordinator narration, step visualization, and aut…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T14:12:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d09899784a1e499851eab375b04e156d60b2b16e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.78.0 (#513)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-02T13:20:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34d7692f1e1c460685467146bb7e266f78702df7",
          "body": "…ng (#514)\n\n* fix(coordinator): deduplicate step progress logs\n\nOnly log '[coordinator] Step X/Y: ...' when the step actually changes,\nnot on every 3-second poll. Still refreshes the UI if new worker logs\narrive mid-step.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n* fix(multi-agent): abort si\n[…]\n spawn when activeWorkers already in flight\n- Bump coordinator default timeout 600s -> 900s\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(multi-agent): abort signal, escape cancel, and user-message routi…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T12:58:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5895c9c42cbce825942066650523917b7f1da48c",
          "body": "…king (#512)\n\n- Add teardownCommute() generator to deploy-commute.ts for disabling\n  multi-agent and cleaning up Cloudflare resources (Worker, DO namespace,\n  KV namespace, container applications).\n- Track workerName in config so teardown knows which Worker to delete.\n- Add scripts/cleanup-multi-age\n[…]\nti-agent.ts: headless redeploy using the same\n  deployCommute() generator.\n- Wire workerName through app.tsx config and multi-agent-modal.tsx teardown.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): add teardown, cleanup scripts, and workerName trac…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T12:01:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4fd3e3a7f0dfbd34b8a91c191b2789841733c9ca",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.77.0 (#504)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-02T11:44:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c216ab88387409f811b31cb48cc59829b8250a5c",
          "body": "…ploy, TUI settings, and resilience fixes (#511)\n\n* feat(multi-agent): wire experimental mode into camouflage UI\n\nThe camouflage engine (ui-mode.ts) has its own MODES array separate from\nthe shared mode.ts, so multi-agent-experimental never appeared in its\nShift-Tab cycle or /mode command. Adds the \n[…]\nt abort valid workers.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): full coordinator + worker architecture, one-tap de…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T11:43:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "edef3eecc93f72c38009d62394b1658d324cb895",
          "body": "kimiflare pinned `camouflage-tui` at `^1.0.0-beta.1`. Caret-on-a-prerelease\nonly matches other prereleases of the SAME major.minor.patch base, so it\nmatches `1.0.0-beta.*` and stable `1.x`, but NOT new-base betas like\n`1.0.1-beta.1` or `1.1.0-beta.1`. Result: kimiflare was frozen on\n`1.0.0-beta.1` a\n[…]\ntag mismatch, so merging this before that fix\nwould regress the camouflage UI from the working 1.0.0-beta.1 to a\nbinary-less beta.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: track camouflage-tui via the `beta` dist-tag (#510)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-05-31T04:18:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "752555d4cf014492aea1adfb6b0e4dba5db3fe4f",
          "body": "* feat(multi-agent): wire experimental mode into camouflage UI\n\nThe camouflage engine (ui-mode.ts) has its own MODES array separate from\nthe shared mode.ts, so multi-agent-experimental never appeared in its\nShift-Tab cycle or /mode command. Adds the mode (gated behind\nmultiAgentEnabled / KIMIFLARE_M\n[…]\ne/whole codebase, ...) that lifts these to heavy.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(multi-agent): make experimental mode usable in both UIs (#507)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-05-31T02:39:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "45e314c19921e0bdba15e110960c58d7ef730b92",
          "body": "Implements execute mode in the remote worker (creates a branch + PR via\nthe GitHub Git Data API, since Cloudflare Workers have no git CLI), adds\nunit coverage for intent classification, findings synthesis, prompt\ndecomposition, and the worker HTTP client's retry behavior, and fixes a\ntypecheck error in the camouflage UI engine's narrow Mode type.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(multi-agent): add worker execute mode + unit tests (#506)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-05-29T05:31:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 703,
      "latest_release_at": "2026-07-17T09:05:26Z",
      "latest_release_tag": "v0.97.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 14,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 1.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "kimiflare",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "cli",
            "coding-agent",
            "terminal",
            "kimi",
            "k2.7",
            "cloudflare",
            "ai-gateway",
            "workers-ai",
            "vision",
            "image-understanding",
            "llm",
            "code-generation",
            "tui",
            "mcp",
            "model-context-protocol"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/kimiflare",
          "is_deprecated": false,
          "latest_version": "0.97.0",
          "repository_url": "https://github.com/sinameraji/kimiflare",
          "versions_count": 151,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3221,
          "first_published_at": "2026-04-21T15:41:42.174000Z",
          "latest_published_at": "2026-07-17T09:05:50.879000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 18,
      "stars": 158,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-22",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 2
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 4
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-28",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 18,
        "total_forks": 18
      },
      "star_history": {
        "days": [
          {
            "date": "2026-04-21",
            "count": 2
          },
          {
            "date": "2026-04-22",
            "count": 3
          },
          {
            "date": "2026-04-23",
            "count": 9
          },
          {
            "date": "2026-04-24",
            "count": 17
          },
          {
            "date": "2026-04-25",
            "count": 3
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 10
          },
          {
            "date": "2026-04-28",
            "count": 11
          },
          {
            "date": "2026-04-29",
            "count": 6
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 5
          },
          {
            "date": "2026-05-02",
            "count": 4
          },
          {
            "date": "2026-05-03",
            "count": 4
          },
          {
            "date": "2026-05-05",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 3
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-08",
            "count": 9
          },
          {
            "date": "2026-05-09",
            "count": 35
          },
          {
            "date": "2026-05-10",
            "count": 7
          },
          {
            "date": "2026-05-11",
            "count": 4
          },
          {
            "date": "2026-05-12",
            "count": 5
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 2
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-03",
            "count": 7
          },
          {
            "date": "2026-06-13",
            "count": 2
          },
          {
            "date": "2026-06-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 158,
        "total_stars": 158
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos"
      ],
      "has_llms_txt": true,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "acp/tsconfig.json",
        "remote/agent/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 165137,
      "source_files_sampled": 319,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 827
    },
    "dependencies": {
      "manifests": [
        "acp/package.json",
        "feedback-worker/package.json",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@agentclientprotocol/sdk",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.21.0"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "better-sqlite3",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "commander",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.1.0"
        },
        {
          "name": "diff",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.0"
        },
        {
          "name": "fast-glob",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.2"
        },
        {
          "name": "turndown",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.2.0"
        },
        {
          "name": "qrcode",
          "manifest": "feedback-worker/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "@resvg/resvg-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.2"
        },
        {
          "name": "better-sqlite3",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.1.0"
        },
        {
          "name": "ink",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.1"
        },
        {
          "name": "ink-select-input",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.2.0"
        },
        {
          "name": "ink-spinner",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.0"
        },
        {
          "name": "ink-text-input",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.0"
        },
        {
          "name": "minimatch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.2.5"
        },
        {
          "name": "qrcode",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "react",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.0"
        },
        {
          "name": "turndown",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.2.0"
        },
        {
          "name": "typescript",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.7.2"
        },
        {
          "name": "vscode-languageserver-protocol",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.17.5"
        }
      ],
      "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": 494,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 98,
        "closed_unmerged_prs": 35
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "sinameraji",
          "commits": 558,
          "avatar_url": "https://avatars.githubusercontent.com/u/6380359?v=4"
        },
        {
          "type": "User",
          "login": "nqh-packages",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/215308928?v=4"
        },
        {
          "type": "User",
          "login": "season179",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/3291108?v=4"
        },
        {
          "type": "User",
          "login": "frankmeszaros",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/15343791?v=4"
        },
        {
          "type": "User",
          "login": "marshallswain",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/128857?v=4"
        }
      ],
      "contributors_sampled": 5,
      "top_contributor_share": 0.988
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "pages.yml",
        "publish.yml",
        "release-please.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 30 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/18 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "36 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f98cab61dbbd41c9655a68e673f934e3a76bd4ca",
        "ran_at": "2026-07-22T06:23:30Z",
        "aggregate_score": 3.7,
        "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-17T09:05:32Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-17T09:05:11Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sinameraji/kimiflare",
    "host": "github.com",
    "name": "kimiflare",
    "owner": "sinameraji"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 62,
      "inputs": {
        "security": 37,
        "vitality": 84,
        "community": 50,
        "governance": 61,
        "engineering": 69
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 703,
              "human_commit_share": 0.69,
              "days_since_last_push": 4,
              "active_weeks_last_year": 14
            },
            "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": "14/52 weeks with commits",
                "points": 9.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "703 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 703
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.97.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 1.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "forks": 18,
              "stars": 158,
              "watchers": 1,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "158 stars",
                "points": 35.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 158
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "18 forks",
                "points": 10.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 58,
            "inputs": {
              "packages": [
                "kimiflare"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3221
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,221 downloads/month across npm",
                "points": 46.8,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3221,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 5,
              "top_contributor_share": 0.988
            },
            "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 99% of commits",
                "points": 0.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "5 contributors",
                "points": 6.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 494,
              "open_issues": 0,
              "closed_issues": 98,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 35
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "494/529 decided PRs merged",
                "points": 35.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 494,
                      "decided": 529
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/18 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "followers": 88,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sinameraji",
              "public_repos": 30,
              "account_age_days": 4574
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "88 followers of sinameraji",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 88,
                      "login": "sinameraji"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "30 public repos, account ~12 yr old",
                "points": 22.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 30
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "kimiflare"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "151 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 151
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 69,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 30 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "agents",
                "ai",
                "vibe-coding",
                "kimi-k26",
                "harness",
                "aigateway",
                "cloudflare",
                "moonshot",
                "workers-ai",
                "kimi-k27"
              ],
              "has_wiki": true,
              "homepage": "https://kimiflare.com",
              "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://kimiflare.com",
                "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": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": 37,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 37,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 30 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/18 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "36 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 12
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 827
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "69 of 69 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 69,
                      "sampled": 69
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "acp/tsconfig.json",
                "remote/agent/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.12,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "acp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "acp/tsconfig.json, remote/agent/tsconfig.json, 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": "12 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 12,
                      "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 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 165137,
              "source_files_sampled": 319,
              "oversized_source_files": 5
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "5/319 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 319,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "demos"
              ],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "demos",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos"
                    }
                  }
                ],
                "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": [
    "Could not fetch npm package 'kimiflare-acp' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:kimiflare@0.97.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T06:23:50.106079Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sinameraji/kimiflare.svg",
  "full_name": "sinameraji/kimiflare",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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