Context Mode Has 30,231 Stars and a 98% Claim I Reproduced Two Different Ways: An npm Package Frozen Since June 29, a Badge That Counts Downloads as Users, and the $49/Month Gateway Behind It

The GitHub API returns 30,231 stars, 2,127 forks and 111 watchers for mksglu/context-mode. The npm package context-mode got 223 releases between February 23 and June 29 - and none in the 110 days since. I reproduced the project's own benchmark on current HEAD (98% in one harness, 94% in another, one row off by 52x), read the update-stats workflow that turns 633,680 downloads into a '687.9k+ users' badge, and traced where the maintainer's work actually went: a company called MKSF LTD selling a $49/month gateway whose CLI has 1,589 downloads.

Context Mode is the MCP plugin that promises to keep raw tool output out of your context window: 315 KB of tool output becomes 5.4 KB, a 98% reduction. It has 30,231 stars, it numbers its releases by the hundred, and its README states its philosophy in one blunt paragraph: “Nothing leaves your machine. No telemetry, no cloud sync, no usage tracking, no account required… Context optimization should happen at the source, not in a dashboard behind a per-seat subscription.”

That is the README the 30,231 people starred. Here is the rest of the picture, all measured today rather than quoted:

Signal (GitHub API, 2026-10-17)Value
Stars30,231
Forks2,127
Watchers (subscribers_count)111 (0.37% of stars)
Open issues358
Created2026-02-23 (236 days ago)
Licence fileElastic License 2.0 (ELv2) — source-available, not OSI open source
Last human commit to main2026-06-29 21:17
Commits to main since 2026-07-01174, all by github-actions[bot]
npm package context-mode223 versions, newest 1.0.169 on 2026-06-29, none since

An npm package that shipped 223 versions in 127 days and then nothing for 110 days is not a normal maintenance pause. The interesting question is not “is it abandoned” — development is visibly continuing — but where the work went, and what the numbers on the repo’s front page actually count.

The 98% claim, reproduced on current HEAD

The claim is specific enough to test, so I did not take it on faith: I cloned the repository at HEAD (last commit 2026-10-16T12:06Z), ran npm install, and executed the project’s own benchmark harnesses with npx tsx.

Harness (run locally, 2026-10-17)RawInto contextAggregate savings
tests/live-benchmark-v04.ts, 13 scenarios193.1 KB12.2 KB94%
tests/context-comparison.ts195.0 KB4,339 B98%

Two harnesses shipped in the same repository, run minutes apart on the same machine, disagree by four points — and the 98% figure lives in the second one. The repo’s own BENCHMARK.md is more careful than its badges: its overview table says 96% overall, breaking that into 98% for the ctx_execute_file subtotal (315 KB → 5.5 KB) and 82% for the ctx_index / ctx_search knowledge-base subtotal (60.3 KB → 11.0 KB). So the headline number is the best-case half of a two-part benchmark, not the benchmark.

The fixtures are honest, which is worth saying: the file sizes reproduce byte-for-byte from the shipped test data — access.log is 46,216 bytes (claimed 45.1 KB), analytics.csv is 87,517 bytes (claimed 85.5 KB), build-output.txt is 6,594 bytes (claimed 6.4 KB). Only one row failed to reproduce for me:

  • BENCHMARK.md claims Analytics CSV (500 rows): 85.5 KB → 222 B, 100% saved.
  • My run on current HEAD produced 11,519 B for the same 85.5 KB fixture — 87%.

That is a 52x gap on the single largest fixture in the table. It is also the honest shape of this class of benchmark: summarisation ratio depends on what the generated analysis script chooses to print, so one scenario can swing from 100% to 87% depending on the code path. The same run also printed NaN% saved for the npm ls row, because the raw output was zero bytes — a small visible bug in a harness that is used as marketing evidence.

The boundary the author conceded, in one hook pattern

The most useful verification of the 98% figure came not from the maintainer but from a Hacker News commenter in February, who tested it empirically and read the code:

“Confirmed: context-mode cannot intercept MCP tool responses. The PreToolUse hook matches only Bash|Read|Grep|Glob|WebFetch|WebSearch|Task. When I called my obsidian MCP’s obsidian_list via MCP, the response went straight into context — zero entries in context-mode’s FTS5 database.”

The author did not dispute it. He agreed the boundary exists — Context Mode handles the output side of built-in tools and CLI wrappers, and third-party MCP servers would have to implement the same summary-plus-store pattern server-side. That is a fair and coherent scope. It is also a scope that materially narrows what “98% of your context window” means for anyone whose context bloat comes from third-party MCP servers, which is a large share of the MCP ecosystem.

The same thread contains the criticism that aged best. Asked whether reduced context changes harness quality, the maintainer replied:

“We haven’t run formal benchmarks on answer quality yet, mostly focused on measuring token savings.”

Commenters called the savings “noise without benchmarks of harness performance with and without context mode.” That was February.

What happened between June 29 and October 17

The git history is unambiguous once you look past the default branch. main has 2,235 commits, 198 tags, and its newest tag is v1.0.169 on 2026-06-29. Monthly commits on main:

MonthCommits on mainNon-bot commits
2026-029797
2026-03544544
2026-04412412
2026-05740740
2026-06268268
2026-07530
2026-08510
2026-09410
2026-10290

Every one of the 174 commits on main since 1 July is github-actions[bot] writing ci: update install stats. The README itself has not changed since 2026-06-24; package.json since 2026-06-29. There is no publish or release workflow anywhere in .github/workflows/ — releases were manual, and the last manual release was in June.

The work did not stop. It moved. Branch v2-design has 391 commits in October alone, 366 of them by the maintainer, and the repository now carries 29 remote branches, 25 of them named impl/* — impl/M0-T0-tests, impl/M1-M1-T1-contracts, and so on, the first appearing on 2026-10-14. This is a full rebuild staged as milestone branches. Its CI has failed 10 consecutive runs on 2026-10-16 and 2026-10-17.

So the accurate description is not “abandoned”. It is: the released artefact is frozen while a v2 rewrite happens off the default branch, and the 30,231 stars point at the frozen artefact.

What the “687.9k+ users” badge actually counts

The README’s first badge says users: 687.9k+. The repository contains the workflow that generates it, and it is three lines of arithmetic:

# .github/workflows/update-stats.yml
NPM_TOTAL=$(curl -sf "https://api.npmjs.org/downloads/point/2000-01-01:$(date +%Y-%m-%d)/context-mode" | jq -r '.downloads // 0')
CLONES=$(gh api repos/${{ github.repository }}/traffic/clones | jq -r '.uniques // 0')
TOTAL=$((NPM_TOTAL + CLONES))

“Users” is cumulative npm downloads plus unique GitHub cloners in the last 14 days. It runs every six hours and force-purges the jsDelivr and shields.io caches afterwards.

Measured directly from the npm registry: context-mode has 633,680 lifetime downloads (through 2026-10-12, the last day the API reports), which is where the npm: 633.6k+ badge comes from. That number is a sum over 236 days of installs — including CI runs, container builds, and npx invocations by the same people. It is not 633,680 humans, and it cannot be: the package has 111 GitHub watchers.

The download curve is the more informative signal, because it is the only metric here that cannot be moved by a README:

Month (npm downloads)2026-0304050607080910 (12 days)
Downloads43,74350,223122,969116,74784,85580,84487,39243,848

Downloads peaked in May at 122,969 and have never returned to that level, while the star count kept climbing to 30,231. And 46.9% of all lifetime downloads (296,939) happened after the last npm release — the package is not only frozen, it is still a dependency people install into a future nobody is shipping to.

The other product

Context Mode’s homepage is no longer a plugin page. It is a pricing page for a gateway: npx @context-mode/cli rewrites your agent’s base URL to gateway.context-mode.com and adds a device-key header, so requests are routed through the company’s endpoint. The operator is MKSF LTD, a UK company (Suite 8805, 5 Brayford Square, London E1 0SG).

PlanPriceIncluded
Free$01,000 requests, once, every feature, no card
Pro$49/month or $490/year50,000 requests/month, 25,000-request packs
Teamper seat (2+)50,000 requests/month per seat, one pooled policy
Enterprisecustom, yearlydedicated instance or your own Cloudflare account

Your own Anthropic or OpenAI account still pays the model; the request fee is for the gateway. Two licence details are worth noting side by side: the engine in the GitHub repo is ELv2 (source-available — the README says plainly that the point of ELv2 over MIT is to stop “repackaging the code as a competing closed-source SaaS”), and it forbids running the software as a hosted or managed service. The new CLI package @context-mode/cli, published from 2026-09-24, is MIT with two dependencies: 10 versions, latest 0.7.0 on 2026-10-15, and 1,589 lifetime downloads in 23 days.

That is the shape of the business: a free, local, ELv2 engine that cannot be resold as a service, and a paid gateway that is the only way to get the newer features (Recall, Protect policy for teams, the hosted Insight console). It is a coherent model, and the site is unusually candid about it — the FAQ-level disclaimer is on the front page. But it is not the model the README describes, because the README stopped being edited on 24 June, three months before the CLI existed. The paragraph that says “no account required” and warns against “a dashboard behind a per-seat subscription” is still the first thing a visitor reads on GitHub.

The quality question, finally answered — with its own asterisk

Here is the genuinely impressive part, and the reason this article is not a teardown. Seven months after being told that context savings without quality benchmarks are noise, the project published exactly that: paired A/B runs of Claude Code direct versus through the gateway, with plans committed before the first pair ran.

Measurement (Opus 5.5, published 2026-09-29 / 10-03 / 10-04)DirectContext Mode
Short tasks, 168 paired runs / 10 tasks$28.28$23.16 (−18.1%)
Pairs that cost less—155 of 168 (13 cost more)
Tasks succeeded, both arms168 of 168168 of 168
Long agentic session, 1M window$7.20$2.49 (−65.5%, 4 of 4)
Same 30 steps, 200K window$4.86$3.04 (−37.6%, 3 of 3)
Memory answers, 200K window4 of 10 (compacted 3 times)9 of 10 (never compacted)
Memory answers, 1M window10 of 1010, 10, 10, 8 of 10
Per-task savings, by category—15–29%

The honest reading cuts both ways. On a 200K window the case is strong: 37.6% cheaper and better recall of the session’s own facts, because direct compaction threw the answers away. On a 1M window the direct arm scored 10 of 10 on memory while Context Mode scored 8–10, and the headline 65.5% came from a session where the agent could not search its archive. Aggregate savings on ordinary short tasks are ~18%, not 98%.

And the publication discloses its own construction: “This page shows the workloads where cost was lower; the pre-registrations mark where workloads were taken off.” Thirteen pairs in a published set cost more, and workloads without a lower-cost result are simply not in the published files. That is disclosed rather than hidden — but it means 155 of 168 is a number over a selected set, and the file names tell you which selections happened.

What this means if you are about to install it

  • Pin a version and read what you are installing. npm install context-mode today gives you a build from 29 June with 110 days of unshipped fixes behind it, at v1.0.169. The engine still works — I ran its harnesses — but its release history has stopped.
  • Know the interception boundary before you count on the savings. Built-in tools, CLI wrappers and anything you can reproduce in a subprocess: covered. Third-party MCP servers: not covered, by design, as the author confirmed.
  • Decide about the data path deliberately. The local engine keeps data in a home-directory SQLite database. The free-tier gateway routes your agent’s requests through gateway.context-mode.com with a device key. Those are different privacy postures, and only one of them keeps the README’s promise literally true.
  • The Free tier is genuinely usable. 1,000 requests, every feature, no card, and when it runs out your requests go straight to the model rather than failing. For a solo developer testing the cost claim on their own traffic, that is the correct way to evaluate it — measure your mix of work, not someone else’s benchmark.
  • If you were planning to resell it, read the licence. ELv2 permits use, forks, modification and distribution, and forbids offering it as a hosted or managed service, plus removal of licence notices. If your plan assumed MIT, the plan is illegal.
  • The v2 rewrite is real but unproven. 391 commits in October on v2-design, CI red for 10 consecutive runs. Watch that branch, not the star count, to judge whether the plugin gets a second life.

FAQ

Is Context Mode open source? Source-available. The licence file is Elastic License 2.0, which permits use, modification, forks and distribution but forbids offering the software as a hosted or managed service, and forbids removing licence notices. That is not an OSI-approved open source licence, and it is a deliberate choice the README explains.

Why does the repo have 30,231 stars but only 111 watchers? Watchers are the strongest intent signal GitHub exposes — people who asked to be notified. 0.37% is very low; for comparison, the same measurement on the ten largest GitHub projects I checked recently sits between roughly 3% and 4% for older projects. A repo can accumulate stars from a single front-page day (this one took 570 points on Hacker News on 2026-02-28) and still have almost nobody following its commits.

Do the 633,680 npm downloads mean 633,680 users? No. That figure is cumulative downloads since 2026-02-23, and the repo’s own update-stats.yml adds unique 14-day cloners to it before printing “users”. Downloads include CI pipelines, containers, reinstalls and npx runs. The package has 111 watchers, and 46.9% of its lifetime downloads happened after its last release.

Is the 98% reduction claim false? It is real but selectively scoped. The project’s own BENCHMARK.md says 96% overall, 98% for sandboxed file processing, 82% for its FTS5 knowledge-base path — and my two local runs on current HEAD produced 94% and 98% respectively. It measures bytes of tool output kept out of the context window, not cost or task quality. The same vendor’s cost benchmarks show 15–29% per-task savings on short tasks.

Should I use the local plugin or the gateway? The gateway is where the newer work is (Recall, Protect, team policy, the console) and it costs $49/month at the Pro tier on top of your own model spend. The local plugin is free, frozen, and still functional, with an ELv2 licence that prevents you from reselling it. If your goal is simply to stop npm test output from eating your context window, the frozen version does that today.

Why does any of this matter? Because star counts are the most-read health metric in open source and the least reliable one. The questions that answered this article were: which branch is being committed to, when did the last release ship, what does the release badge count, and what does the licence let you do. All four are public, none of them are stars.

Conclusion

Context Mode is not a scam and this is not a takedown. The engineering is real — I ran it, the fixtures check out, the savings are reproducible, and the paired cost benchmarks published in October are a genuinely rare level of disclosure for this space. The project’s own documentation is more honest than its badges: 96% overall and 82% on one half, against a 98% headline; 13 losing pairs in a set of 168; workloads quietly taken off the published page, disclosed in one line of small print.

What the numbers do not support is the impression the GitHub page gives. Development did not continue on the thing 30,231 people starred: main’s last human commit was 29 June, the README’s last edit was 24 June, the npm package’s last release was 29 June, and the badge at the top counts downloads as users. The work moved to a rewrite branch with red CI and to a $49/month gateway whose CLI has 1,589 downloads so far, run by a UK limited company, selling the feature set the README was written to argue against.

Star the repo if you like the idea. Then check the release date, the branch, and the licence before you build on it — those three fields would have told you this whole story in under a minute.