free-coding-models 0.5.85 โ 0.5.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -881
- package/bin/free-coding-models.js +4 -1
- package/changelog/v0.5.86.md +10 -0
- package/changelog/v0.5.87.md +48 -0
- package/package.json +8 -5
- package/sources.js +4 -4
- package/src/core/cache.js +3 -1
- package/src/core/config.js +43 -5
- package/src/core/endpoint-installer.js +23 -12
- package/src/core/installed-models-manager.js +43 -20
- package/src/core/kilo-config.js +51 -5
- package/src/core/kilo.js +5 -3
- package/src/core/legacy-proxy-cleanup.js +22 -5
- package/src/core/model-merger.js +4 -0
- package/src/core/models-drift.js +9 -0
- package/src/core/opencode-config.js +57 -5
- package/src/core/opencode.js +67 -41
- package/src/core/playground.js +7 -0
- package/src/core/probe-cache.js +35 -4
- package/src/core/provider-key-tester.js +10 -2
- package/src/core/provider-metadata.js +10 -0
- package/src/core/provider-quota-fetchers.js +14 -7
- package/src/core/router-daemon.js +208 -26
- package/src/core/runtime-telemetry.js +27 -1
- package/src/core/shared-helpers.js +12 -1
- package/src/core/shell-env.js +3 -1
- package/src/core/telemetry.js +18 -5
- package/src/core/tool-launchers.js +9 -6
- package/src/core/updater.js +28 -2
- package/src/core/utils.js +76 -71
- package/src/tui/app.js +47 -16
- package/src/tui/command-palette.js +22 -2
- package/src/tui/key-handler.js +123 -179
- package/src/tui/overlays.js +35 -75
- package/src/tui/render-helpers.js +62 -4
- package/src/tui/render-table.js +46 -5
- package/src/tui/theme.js +36 -5
- package/src/tui/tui-filters.js +28 -8
- package/src/tui/tui-state.js +22 -6
- package/web/dist/assets/index-BpTpPS0g.js +44 -0
- package/web/dist/assets/index-CAzFIt8P.css +1 -0
- package/web/dist/index.html +5 -9
- package/web/index.html +3 -7
- package/web/server.js +97 -23
- package/web/vite.config.js +8 -0
- package/web/app.legacy.js +0 -900
- package/web/dist/assets/index-C5-Ywvv3.css +0 -1
- package/web/dist/assets/index-DWUely84.js +0 -40
- package/web/public/favicon.ico +0 -0
- package/web/public/favicons/apple-touch-icon.png +0 -0
- package/web/public/favicons/browserconfig.xml +0 -12
- package/web/public/favicons/favicon-16x16.png +0 -0
- package/web/public/favicons/favicon-192x192.png +0 -0
- package/web/public/favicons/favicon-32x32.png +0 -0
- package/web/public/favicons/favicon-48x48.png +0 -0
- package/web/public/favicons/favicon-512x512.png +0 -0
- package/web/public/favicons/favicon-96x96.png +0 -0
- package/web/public/favicons/favicon.ico +0 -0
- package/web/public/favicons/mstile-150x150.png +0 -0
- package/web/public/favicons/mstile-310x150.png +0 -0
- package/web/public/favicons/mstile-310x310.png +0 -0
- package/web/public/favicons/mstile-512x512.png +0 -0
- package/web/public/favicons/mstile-70x70.png +0 -0
- package/web/public/favicons/site.webmanifest +0 -25
- package/web/src/App.jsx +0 -521
- package/web/src/components/analytics/AnalyticsView.jsx +0 -147
- package/web/src/components/analytics/AnalyticsView.module.css +0 -190
- package/web/src/components/analytics/TokenUsagePanel.jsx +0 -105
- package/web/src/components/analytics/TokenUsagePanel.module.css +0 -126
- package/web/src/components/atoms/AILatencyCell.jsx +0 -38
- package/web/src/components/atoms/AILatencyCell.module.css +0 -51
- package/web/src/components/atoms/HealthCell.jsx +0 -143
- package/web/src/components/atoms/HealthCell.module.css +0 -60
- package/web/src/components/atoms/LastPingCell.jsx +0 -35
- package/web/src/components/atoms/LastPingCell.module.css +0 -45
- package/web/src/components/atoms/MoodCell.jsx +0 -25
- package/web/src/components/atoms/MoodCell.module.css +0 -6
- package/web/src/components/atoms/NoKeyIcon.jsx +0 -65
- package/web/src/components/atoms/NoKeyIcon.module.css +0 -30
- package/web/src/components/atoms/ProviderLogo.jsx +0 -187
- package/web/src/components/atoms/ProviderLogo.module.css +0 -103
- package/web/src/components/atoms/RankCell.jsx +0 -9
- package/web/src/components/atoms/RankCell.module.css +0 -9
- package/web/src/components/atoms/Sparkline.jsx +0 -63
- package/web/src/components/atoms/StabilityCell.jsx +0 -18
- package/web/src/components/atoms/StabilityCell.module.css +0 -13
- package/web/src/components/atoms/StatusDot.jsx +0 -13
- package/web/src/components/atoms/StatusDot.module.css +0 -29
- package/web/src/components/atoms/TPSCell.jsx +0 -36
- package/web/src/components/atoms/TPSCell.module.css +0 -44
- package/web/src/components/atoms/TierBadge.jsx +0 -10
- package/web/src/components/atoms/TierBadge.module.css +0 -29
- package/web/src/components/atoms/Toast.jsx +0 -25
- package/web/src/components/atoms/Toast.module.css +0 -41
- package/web/src/components/atoms/ToastContainer.jsx +0 -16
- package/web/src/components/atoms/ToastContainer.module.css +0 -10
- package/web/src/components/atoms/VerdictBadge.jsx +0 -36
- package/web/src/components/atoms/VerdictBadge.module.css +0 -40
- package/web/src/components/changelog/ChangelogView.jsx +0 -135
- package/web/src/components/changelog/ChangelogView.module.css +0 -159
- package/web/src/components/dashboard/DetailPanel.jsx +0 -217
- package/web/src/components/dashboard/DetailPanel.module.css +0 -260
- package/web/src/components/dashboard/ExpandedDetailRow.jsx +0 -361
- package/web/src/components/dashboard/ExpandedDetailRow.module.css +0 -356
- package/web/src/components/dashboard/ExportModal.jsx +0 -84
- package/web/src/components/dashboard/ExportModal.module.css +0 -99
- package/web/src/components/dashboard/FilterBar.jsx +0 -338
- package/web/src/components/dashboard/FilterBar.module.css +0 -342
- package/web/src/components/dashboard/ModelTable.jsx +0 -672
- package/web/src/components/dashboard/ModelTable.module.css +0 -446
- package/web/src/components/dashboard/ProviderDropdown.jsx +0 -156
- package/web/src/components/dashboard/ProviderDropdown.module.css +0 -248
- package/web/src/components/help/HelpView.jsx +0 -201
- package/web/src/components/help/HelpView.module.css +0 -156
- package/web/src/components/install/InstallEndpointsView.jsx +0 -309
- package/web/src/components/install/InstallEndpointsView.module.css +0 -427
- package/web/src/components/installed/InstalledModelsView.jsx +0 -89
- package/web/src/components/installed/InstalledModelsView.module.css +0 -200
- package/web/src/components/launch/IncompatibleFallbackModal.jsx +0 -69
- package/web/src/components/launch/LaunchButton.jsx +0 -30
- package/web/src/components/launch/LaunchButton.module.css +0 -35
- package/web/src/components/launch/LaunchModal.module.css +0 -125
- package/web/src/components/layout/Footer.jsx +0 -19
- package/web/src/components/layout/Footer.module.css +0 -10
- package/web/src/components/layout/Header.jsx +0 -265
- package/web/src/components/layout/Header.module.css +0 -357
- package/web/src/components/palette/CommandPalette.jsx +0 -301
- package/web/src/components/palette/CommandPalette.module.css +0 -121
- package/web/src/components/playground/PlaygroundChat.jsx +0 -527
- package/web/src/components/playground/PlaygroundChat.module.css +0 -382
- package/web/src/components/playground/PlaygroundView.jsx +0 -371
- package/web/src/components/playground/PlaygroundView.module.css +0 -504
- package/web/src/components/recommend/RecommendView.jsx +0 -121
- package/web/src/components/recommend/RecommendView.module.css +0 -57
- package/web/src/components/router/RouterView.jsx +0 -1212
- package/web/src/components/router/RouterView.module.css +0 -1289
- package/web/src/components/settings/SettingsView.jsx +0 -555
- package/web/src/components/settings/SettingsView.module.css +0 -550
- package/web/src/components/tools/ToolPicker.jsx +0 -86
- package/web/src/components/tools/ToolPicker.module.css +0 -97
- package/web/src/components/update/UpdateChip.jsx +0 -104
- package/web/src/components/update/UpdateChip.module.css +0 -146
- package/web/src/global.css +0 -298
- package/web/src/hooks/urlState.constants.js +0 -28
- package/web/src/hooks/useChangelog.js +0 -51
- package/web/src/hooks/useColumnSizing.js +0 -211
- package/web/src/hooks/useFavorites.js +0 -150
- package/web/src/hooks/useFilter.js +0 -310
- package/web/src/hooks/useInstalledModels.js +0 -42
- package/web/src/hooks/useRecommend.js +0 -67
- package/web/src/hooks/useRouterDashboard.js +0 -133
- package/web/src/hooks/useSSE.js +0 -73
- package/web/src/hooks/useSocket.js +0 -203
- package/web/src/hooks/useTheme.js +0 -83
- package/web/src/hooks/useTokenUsage.js +0 -103
- package/web/src/hooks/useToolMode.js +0 -77
- package/web/src/hooks/useUpdateChecker.js +0 -91
- package/web/src/hooks/useUrlState.js +0 -170
- package/web/src/main.jsx +0 -15
- package/web/src/utils/download.js +0 -15
- package/web/src/utils/format.js +0 -42
- package/web/src/utils/m3.js +0 -57
- package/web/src/utils/ranks.js +0 -37
- package/web/styles.legacy.css +0 -963
package/README.md
CHANGED
|
@@ -5,18 +5,17 @@
|
|
|
5
5
|
<h1 align="center">free-coding-models</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<strong>Find the fastest free coding model in seconds
|
|
9
|
-
|
|
10
|
-
<strong>Works with:</strong> OpenCode CLI / Desktop / WebUI, OpenClaw, Crush, Goose, Aider, Kilo CLI, Qwen Code, OpenHands, Amp, Hermes, Continue, Cline, Xcode, Pi, ZCode, ForgeCode, Copilot and more
|
|
11
|
-
<strong>Use Kimi K2, DeepSeek V3/V4, GPT-OSS, Qwen3, MiniMax M3, GLM, Llama 4, Gemma 4, Devstral and more โ for free</strong>
|
|
8
|
+
<strong>Find the fastest free coding model in seconds.</strong><br>
|
|
9
|
+
Live latency, stability and verdicts for 229 models from 24 free AI providers, then install the one you pick straight into your favorite coding tool.<br><br>
|
|
10
|
+
<strong>Works with:</strong> OpenCode CLI / Desktop / WebUI, OpenClaw, Crush, Goose, Aider, Kilo CLI, Qwen Code, OpenHands, Amp, Hermes, Continue, Cline, Xcode, Pi, ZCode, ForgeCode, Copilot, jcode, Caveman Code and more.
|
|
12
11
|
</p>
|
|
13
12
|
|
|
14
13
|
<p align="center">
|
|
15
|
-
<img src="https://img.shields.io/npm/v/free-coding-models?color=3d6b00&label=npm&logo=npm" alt="npm version"
|
|
16
|
-
<
|
|
17
|
-
<img src="https://img.shields.io/
|
|
18
|
-
<img src="https://img.shields.io/
|
|
19
|
-
<img src="https://img.shields.io/badge/
|
|
14
|
+
<a href="https://www.npmjs.com/package/free-coding-models"><img src="https://img.shields.io/npm/v/free-coding-models?color=3d6b00&label=npm&logo=npm" alt="npm version"></a>
|
|
15
|
+
<a href="https://github.com/vava-nessa/free-coding-models/actions/workflows/tests.yml"><img src="https://github.com/vava-nessa/free-coding-models/actions/workflows/tests.yml/badge.svg" alt="Tests"></a><br>
|
|
16
|
+
<img src="https://img.shields.io/node/v/free-coding-models?color=3d6b00&logo=node.js" alt="node version">
|
|
17
|
+
<img src="https://img.shields.io/npm/l/free-coding-models?color=3d6b00" alt="license">
|
|
18
|
+
<a href="https://discord.gg/ZTNFHvvCkU"><img src="https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord&logoColor=white" alt="Join our Discord"></a>
|
|
20
19
|
</p>
|
|
21
20
|
|
|
22
21
|
```bash
|
|
@@ -25,31 +24,11 @@ free-coding-models
|
|
|
25
24
|
```
|
|
26
25
|
|
|
27
26
|
<p align="center">
|
|
28
|
-
<sub>Then create a free account on one of the <a href="#-
|
|
27
|
+
<sub>Then create a free account on one of the <a href="#-providers">24 providers</a> to grab an API key.</sub>
|
|
29
28
|
</p>
|
|
30
29
|
|
|
31
30
|
<p align="center">
|
|
32
|
-
<
|
|
33
|
-
<a href="#-quick-start">โก Quick Start</a> โข
|
|
34
|
-
<a href="#-free-ai-providers">๐ข Providers</a> โข
|
|
35
|
-
<a href="#-the-terminal-ui-tui">๐๏ธ TUI</a> โข
|
|
36
|
-
<a href="#-the-web-dashboard">๐ Web</a> โข
|
|
37
|
-
<a href="#-agent-extensions">๐ Extensions</a> โข
|
|
38
|
-
<a href="#-the-smart-model-router">๐ Router</a> โข
|
|
39
|
-
<a href="#-reference">๐ Reference</a> โข
|
|
40
|
-
<a href="#-contributing">๐ Contributing</a> โข
|
|
41
|
-
<a href="#๏ธ-model-licensing--commercial-use">โ๏ธ Licensing</a> โข
|
|
42
|
-
<a href="#-telemetry">๐ Telemetry</a> โข
|
|
43
|
-
<a href="#๏ธ-security--trust">๐ก๏ธ Security</a> โข
|
|
44
|
-
<a href="#-other-free-ai-resources">๐ More resources</a>
|
|
45
|
-
</p>
|
|
46
|
-
|
|
47
|
-
<p align="center">
|
|
48
|
-
<img src="demo.gif" alt="free-coding-models demo" width="100%">
|
|
49
|
-
</p>
|
|
50
|
-
|
|
51
|
-
<p align="center">
|
|
52
|
-
<a href="https://discord.gg/ZTNFHvvCkU"><img src="https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord&logoColor=white&style=for-the-badge" alt="Join our Discord"></a>
|
|
31
|
+
<img src="website/public/demo.gif" alt="free-coding-models demo" width="100%">
|
|
53
32
|
</p>
|
|
54
33
|
|
|
55
34
|
<p align="center">
|
|
@@ -60,102 +39,53 @@ free-coding-models
|
|
|
60
39
|
|
|
61
40
|
## ๐ก Why this tool?
|
|
62
41
|
|
|
63
|
-
There is a large catalog of free and free-limited coding models
|
|
42
|
+
There is a large catalog of free and free-limited coding models (**24 providers / 229 live models**, generated from [`sources.js`](./sources.js)). Which one is fastest *right now*? Which one is actually stable, versus just lucky on the last ping?
|
|
64
43
|
|
|
65
|
-
`free-coding-models` (FCM) answers that by pinging every model in parallel, showing live latency, and computing a **live Stability Score (0
|
|
44
|
+
`free-coding-models` (FCM) answers that by pinging every model in parallel, showing live latency, and computing a **live Stability Score (0-100)** combining p95 latency, jitter, spike rate and uptime. Average latency alone is misleading: a model that randomly spikes to 6 seconds is not reliable.
|
|
66
45
|
|
|
67
|
-
Once you
|
|
46
|
+
Once you pick a model, FCM writes it directly into your coding tool's config and opens the tool, so you go from *"which model?"* to *"coding"* in under 10 seconds.
|
|
68
47
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
| Surface | What it is | When to use it |
|
|
48
|
+
| Surface | What it is | Docs |
|
|
72
49
|
|---|---|---|
|
|
73
|
-
| ๐๏ธ **TUI** | The interactive terminal dashboard
|
|
74
|
-
| ๐ **Web Dashboard** |
|
|
75
|
-
| ๐ **Extensions** | OpenCode & Pi
|
|
76
|
-
| ๐ **Router** | A local OpenAI-compatible daemon
|
|
50
|
+
| ๐๏ธ **TUI** | The interactive terminal dashboard. The default: live ranking, pick + launch. | [docs/tui.md](./docs/tui.md) |
|
|
51
|
+
| ๐ **Web Dashboard** | Browser control center, shareable filtered views, Docker-ready. | [docs/web-dashboard.md](./docs/web-dashboard.md) |
|
|
52
|
+
| ๐ **Agent Extensions** | OpenCode & Pi plugins: hot-swap models mid-session. | [Agent extensions](#-agent-extensions) |
|
|
53
|
+
| ๐ **Smart Model Router** | A local OpenAI-compatible daemon with auto-failover. | [docs/router.md](./docs/router.md) |
|
|
77
54
|
|
|
78
|
-
|
|
55
|
+
Other highlights: AI Speed Test benchmarks (real completions, AI Latency + TPS), Smart Recommend (3-question wizard), a `Ctrl+P` Command Palette, a persistent 24h probe cache shared by every surface, live quota from response headers, real-world telemetry scores, models.dev enrichment with drift detection, and a tier scale based on SWE-bench Verified (S+ โฅ 70% down to C). Details: [docs/stability.md](./docs/stability.md).
|
|
79
56
|
|
|
80
57
|
---
|
|
81
58
|
|
|
82
59
|
## โก Quick Start
|
|
83
60
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
### โ Install
|
|
61
|
+
**โ Install** (Node.js 18+, no native build, never needs sudo):
|
|
87
62
|
|
|
88
63
|
```bash
|
|
89
64
|
npm install -g free-coding-models
|
|
90
|
-
free-coding-models --help #
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Requires **Node.js 18+**. That's the only prerequisite โ FCM has a single runtime dependency (`chalk`), no native build step, and never needs `sudo`. Update later at any time with `npm install -g free-coding-models@latest` (or `Shift+U` inside the app).
|
|
94
|
-
|
|
95
|
-
### โก Grab one free API key
|
|
96
|
-
|
|
97
|
-
FCM tracks a large catalog of models from 20+ providers, but you only need **one key** to start. The fastest sign-ups (no credit card, instant key):
|
|
98
|
-
|
|
99
|
-
- **Groq** โ [console.groq.com/keys](https://console.groq.com/keys) โ Llama 4, GPT-OSS, blazing fast
|
|
100
|
-
- **Cerebras** โ [cloud.cerebras.ai](https://cloud.cerebras.ai) โ the lowest latency in the whole catalog
|
|
101
|
-
- **NVIDIA NIM** โ [build.nvidia.com](https://build.nvidia.com) โ 27 models, the biggest free variety
|
|
102
|
-
|
|
103
|
-
๐ See the full [**provider table**](#-free-ai-providers) for limits, tiers, and env vars. You can add more keys at any time from inside the app (**`P`** โ Settings) โ one is enough to begin.
|
|
104
|
-
|
|
105
|
-
### โข Launch & paste your key
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
free-coding-models
|
|
65
|
+
free-coding-models --help # prints every flag
|
|
109
66
|
```
|
|
110
67
|
|
|
111
|
-
|
|
68
|
+
**โก Grab one free API key.** One is enough to start; add more later with `P` inside the app:
|
|
112
69
|
|
|
113
|
-
|
|
70
|
+
- **Groq** โ [console.groq.com/keys](https://console.groq.com/keys)
|
|
71
|
+
- **Cerebras** โ [cloud.cerebras.ai](https://cloud.cerebras.ai) (lowest latency in the catalog)
|
|
72
|
+
- **NVIDIA NIM** โ [build.nvidia.com](https://build.nvidia.com) (biggest no-credit-card quota)
|
|
114
73
|
|
|
115
|
-
|
|
116
|
-
โโ navigate the live table โ Enter to launch
|
|
117
|
-
```
|
|
74
|
+
**โข Launch & paste your key:** `free-coding-models`. First run prompts for keys (Enter skips), models ping in parallel, rows light up green โ
.
|
|
118
75
|
|
|
119
|
-
|
|
76
|
+
**โฃ Pick a model & launch your tool:** `โโ` navigate, `Enter` to write the model into your tool's config and launch it. Pre-target another tool from the CLI, or cycle live with `Z`:
|
|
120
77
|
|
|
121
78
|
```bash
|
|
122
79
|
free-coding-models --goose --tier S # Goose, pre-filtered to S-tier only
|
|
123
|
-
free-coding-models --crush --origin groq
|
|
124
|
-
free-coding-models --
|
|
125
|
-
free-coding-models --opencode --premium # OpenCode, elite-focused preset
|
|
80
|
+
free-coding-models --crush --origin groq # Crush, Groq models only
|
|
81
|
+
free-coding-models --fiable # print the single most reliable model and exit
|
|
126
82
|
```
|
|
127
83
|
|
|
128
|
-
|
|
129
|
-
>
|
|
130
|
-
> ๐ก **Headless?** Skip the TUI entirely: `free-coding-models --tier S --json | jq -r '.[0].modelId'` prints the fastest S-tier model ID for scripts. Or `free-coding-models --fiable` waits 10s and prints the single most reliable model right now.
|
|
131
|
-
|
|
132
|
-
โ Full keybindings & workflows: [The Terminal UI (TUI)](#-the-terminal-ui-tui)
|
|
133
|
-
|
|
134
|
-
### โค The 30-second cool tour ๐
|
|
135
|
-
|
|
136
|
-
You're in. Try these next โ they're the features that make FCM feel good:
|
|
137
|
-
|
|
138
|
-
| Press | What happens | Go deeper |
|
|
139
|
-
|---|---|---|
|
|
140
|
-
| **`Ctrl+P`** | Open the โก๏ธ **Command Palette** โ fuzzy-search every filter, sort, and action in the app | [TUI](#-the-terminal-ui-tui) |
|
|
141
|
-
| **`Q`** | **Smart Recommend** โ answer 3 questions, get your Top 3 models picked for you | [TUI](#-the-terminal-ui-tui) |
|
|
142
|
-
| **`Ctrl+A`** / **`Ctrl+U`** | Run a real **AI Speed Test** on one model / all visible models (splits into Latency + TPS) | [TUI](#-the-terminal-ui-tui) |
|
|
143
|
-
| **`F`** then **`Y`** | **Favorite** a model, then **pin** your favorites to the top so they never scroll away | [TUI](#-the-terminal-ui-tui) |
|
|
144
|
-
| **`Z`** | **Cycle tool** (OpenCode โ OpenClaw โ Crush โ Goose โ โฆ) without restarting | [TUI](#-the-terminal-ui-tui) |
|
|
145
|
-
| **`G`** | **Cycle theme** (Auto โ Dark โ Light) if your terminal fights the colors | [TUI](#-the-terminal-ui-tui) |
|
|
146
|
-
| **`;`** | Open the **Playground** โ chat with the router right inside the TUI | [Router](#-the-smart-model-router) |
|
|
147
|
-
|
|
148
|
-
<p align="center">
|
|
149
|
-
<img src="https://img.shields.io/badge/USE_%E2%9A%A1%EF%B8%8F%20COMMAND%20PALETTE-CTRL%2BP-22c55e?style=for-the-badge" alt="Use โก๏ธ Command Palette with Ctrl+P">
|
|
150
|
-
</p>
|
|
151
|
-
|
|
152
|
-
### โฅ Go further
|
|
153
|
-
|
|
154
|
-
Once the TUI feels familiar, FCM has three more surfaces โ pick the one that matches how you work:
|
|
84
|
+
**โค Go further:**
|
|
155
85
|
|
|
156
|
-
- ๐
|
|
157
|
-
- ๐
|
|
158
|
-
- ๐ค
|
|
86
|
+
- ๐ Prefer a browser? `free-coding-models web` opens the [Web Dashboard](./docs/web-dashboard.md).
|
|
87
|
+
- ๐ Want one endpoint that never dies? `free-coding-models --daemon-bg` starts the [Smart Model Router](./docs/router.md).
|
|
88
|
+
- ๐ค Live inside an agent? Install the [OpenCode plugin](./packages/fcm-opencode/README.md) or the [Pi extension](./packages/fcm-pi/README.md).
|
|
159
89
|
|
|
160
90
|
<p align="center">
|
|
161
91
|
<img src="demo2.gif" alt="free-coding-models TUI demo" width="100%">
|
|
@@ -163,712 +93,145 @@ Once the TUI feels familiar, FCM has three more surfaces โ pick the one that m
|
|
|
163
93
|
|
|
164
94
|
---
|
|
165
95
|
|
|
166
|
-
## ๐ข
|
|
167
|
-
|
|
168
|
-
A large catalog of coding models from 20+ active providers, ranked by practical free-tier usefulness. Sign up on any one of them to get a key โ you only need one to start.
|
|
169
|
-
|
|
170
|
-
| # | Provider | Models | Tier range | Free tier | Env var |
|
|
171
|
-
|---|----------|--------|-----------|-----------|--------|
|
|
172
|
-
| 1 | [NVIDIA NIM](https://build.nvidia.com) | 25 | S+ โ C | ~40 RPM (no credit card) | `NVIDIA_API_KEY` |
|
|
173
|
-
| 2 | [Groq](https://console.groq.com/keys) | 5 | S โ B | 30 RPM, 1Kโ14.4K req/day (no credit card) | `GROQ_API_KEY` |
|
|
174
|
-
| 3 | [Cerebras](https://cloud.cerebras.ai) | 2 | S+ โ S | 30 RPM, 1M tokens/day (no credit card) | `CEREBRAS_API_KEY` |
|
|
175
|
-
| 4 | [Google AI Studio](https://aistudio.google.com/apikey) | 10 | S+ โ A | Gemini free quotas vary by model/region | `GOOGLE_API_KEY` |
|
|
176
|
-
| 5 | [Mistral La Plateforme](https://console.mistral.ai/api-keys) | 6 | S+ โ A | Experiment plan, free evaluation tier | `MISTRAL_API_KEY` |
|
|
177
|
-
| 6 | [Cloudflare Workers AI](https://dash.cloudflare.com) | 19 | S+ โ B | 10K neurons/day, 300 RPM (no credit card) | `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID` |
|
|
178
|
-
| 7 | [OpenRouter](https://openrouter.ai/keys) | 14 | S+ โ C | 50 req/day free, 1K/day with $10 spend | `OPENROUTER_API_KEY` |
|
|
179
|
-
| 8 | [SambaNova](https://cloud.sambanova.ai/apis) | 6 | S+ โ B+ | Small developer quota, useful for light usage | `SAMBANOVA_API_KEY` |
|
|
180
|
-
| 9 | [OVHcloud AI Endpoints](https://endpoints.ai.cloud.ovh.net) | 10 | S โ B | 2 req/min/IP free, 400 RPM with key | `OVH_AI_ENDPOINTS_ACCESS_TOKEN` |
|
|
181
|
-
| 10 | [Codestral](https://console.mistral.ai/api-keys) | 1 | B+ | 30 RPM, 2K req/day | `MISTRAL_API_KEY` |
|
|
182
|
-
| 11 | [ZAI](https://z.ai) | 7 | S | Free Flash models only | `ZAI_API_KEY` |
|
|
183
|
-
| 12 | [Scaleway](https://console.scaleway.com/iam/api-keys) | 15 | S+ โ B | 1M free tokens | `SCALEWAY_API_KEY` |
|
|
184
|
-
| 13 | [Alibaba DashScope](https://modelstudio.console.alibabacloud.com) | 23 | S+ โ A+ | 1M free tokens/model, Singapore, 90 days | `DASHSCOPE_API_KEY` |
|
|
185
|
-
| 14 | [OpenCode Zen](https://opencode.ai/zen) | 7 | S+ โ B+ | Free with OpenCode account | Zen models โจ |
|
|
186
|
-
| 15 | [Kilo](https://kilo.ai) | 2 | A+ | Free auto-router works without a key | optional `KILO_API_KEY` |
|
|
187
|
-
| 16 | [LLM7](https://llm7.io) | 4 | S+ โ A- | Shared free tier, optional free token | optional `LLM7_API_KEY` |
|
|
188
|
-
| 17 | [Routeway](https://routeway.ai) | 10 | S+ โ C | Explicit `:free` zero-price models | `ROUTEWAY_API_KEY` |
|
|
189
|
-
| 18 | [Novita AI](https://novita.ai) | 0 | - | No zero-price models currently | `NOVITA_API_KEY` |
|
|
190
|
-
| 19 | [Ollama Cloud](https://ollama.com/pricing) | 17 | S+ โ A | Free cloud usage with session/weekly limits | `OLLAMA_API_KEY` |
|
|
191
|
-
| 20 | [Pollinations AI](https://enter.pollinations.ai) โ ๏ธ experimental | 10 | S+ โ B+ | Daily Pollen grants, free tier via Pollen (see note below) | `POLLINATIONS_API_KEY` |
|
|
192
|
-
| 21 | [SiliconFlow](https://cloud.siliconflow.cn/account/ak) | 3 | A โ B+ | 3 models @ $0, 1000 RPM (phone SMS required) | `SILICONFLOW_API_KEY` |
|
|
193
|
-
| 22 | [Requesty](https://app.requesty.ai/api-keys) | 12 | S+ โ C | 200 req/day free, no card (4x OpenRouter) | `REQUESTY_API_KEY` |
|
|
194
|
-
| 23 | [OrcaRouter](https://www.orcarouter.ai) | 3 | S+ โ A+ | Free Hacker tier ยท 3 $-0 models, zero token markup | `ORCAROUTER_API_KEY` |
|
|
195
|
-
| 24 | [Vercel AI Gateway](https://vercel.com/ai-gateway) | 4 | S+ โ B+ | $5 gateway credits every 30 days, no card + explicit $0 models | `VERCEL_AI_GATEWAY_API_KEY` |
|
|
196
|
-
|
|
197
|
-
> **Pollinations Pollen, c'est quoi ?** Pollinations ne facture pas en $ mais en **Pollen** (โ $1). Pas besoin d'acheter : tu recois du Pollen **gratuit chaque jour** selon ton tier seed/flower/nectar via quests (star le repo `pollinations/pollinations` sur GitHub, aider sur un issue). Si ton solde affiche `0.0000` sur `enter.pollinations.ai`, tout `MISS` (prompt non cache) retourne `402 PAYMENT_REQUIRED` ("Insufficient balance ~0.0001 pollen") et le ping affichera `402`. Un `HIT` Cloudflare cache peut encore passer en `200` meme avec 0 Pollen mais ce n'est pas fiable. Verifie ton solde sur `enter.pollinations.ai` -> API Keys, complete une quest et attends le grant quotidien a minuit UTC. **Note : integration Pollinations encore experimentale et non confirmee comme stable, le systeme Pollen peut changer.**
|
|
198
|
-
> **SiliconFlow & Requesty** : integrations verifiees le 2026-08-24 via `/v1/models` live et docs officielles, free tiers recurrents confirmes sans Pollen.
|
|
199
|
-
|
|
200
|
-
> ๐ก One key is enough to start. Add more at any time by pressing **`P`** inside the TUI (or via the Web Dashboard **Settings** page). A few providers (`Kilo`, `LLM7`, OVHcloud sandbox) can even answer without a key, with tighter shared limits.
|
|
201
|
-
|
|
202
|
-
### Tier scale
|
|
203
|
-
|
|
204
|
-
Every model is tiered by its **SWE-bench Verified** score โ the industry-standard benchmark for real coding tasks.
|
|
96
|
+
## ๐ข Providers
|
|
205
97
|
|
|
206
|
-
|
|
207
|
-
|------|-----------|----------|
|
|
208
|
-
| **S+** | โฅ 70% | Complex refactors, real-world GitHub issues |
|
|
209
|
-
| **S** | 60โ70% | Most coding tasks, strong general use |
|
|
210
|
-
| **A+/A** | 40โ60% | Solid alternatives, targeted programming |
|
|
211
|
-
| **A-/B+** | 30โ40% | Smaller tasks, constrained infra |
|
|
212
|
-
| **B/C** | < 30% | Code completion, edge/minimal setups |
|
|
98
|
+
**24 active providers / 229 live models**, sorted by live model count. Top 8:
|
|
213
99
|
|
|
214
|
-
|
|
100
|
+
| Provider | Models | Best tier | Env var |
|
|
101
|
+
|----------|--------|-----------|---------|
|
|
102
|
+
| [Alibaba DashScope](https://modelstudio.console.alibabacloud.com) | 27 | S+ | `DASHSCOPE_API_KEY` |
|
|
103
|
+
| [Ollama Cloud](https://ollama.com/settings/keys) | 19 | S+ | `OLLAMA_API_KEY` |
|
|
104
|
+
| [OpenRouter](https://openrouter.ai/keys) | 19 | S+ | `OPENROUTER_API_KEY` |
|
|
105
|
+
| [Cloudflare AI](https://dash.cloudflare.com) | 15 | S | `CLOUDFLARE_API_TOKEN` |
|
|
106
|
+
| [Kilo](https://kilo.ai) | 14 | S+ | `KILO_API_KEY` |
|
|
107
|
+
| [NVIDIA NIM](https://build.nvidia.com) | 14 | S+ | `NVIDIA_API_KEY` |
|
|
108
|
+
| [Pollinations AI](https://enter.pollinations.ai) | 13 | S+ | `POLLINATIONS_API_KEY` |
|
|
109
|
+
| [OVHcloud AI](https://endpoints.ai.cloud.ovh.net) | 12 | S+ | `OVH_AI_ENDPOINTS_ACCESS_TOKEN` |
|
|
215
110
|
|
|
216
|
-
|
|
111
|
+
> ๐ **Full table, free-tier limits, env vars, tier scale and provider notes:** [`docs/providers.md`](./docs/providers.md) (generated from `sources.js` by `node scripts/generate-provider-table.mjs`, so counts cannot drift). OpenCode Zen's free models are listed there too.
|
|
217
112
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
To protect you, FCM:
|
|
221
|
-
|
|
222
|
-
- **Auto-pauses** a provider the moment its probe gets a `429` (it honors the `Retry-After` header).
|
|
223
|
-
- **Backs off exponentially** per failing model (30s โ 1m โ 2m โ 5m) instead of re-pinging it every cycle.
|
|
224
|
-
- **Surfaces a footer chip** like `โธ openrouter 14h` so you can see which providers are resting.
|
|
225
|
-
|
|
226
|
-
> If you don't need authenticated probes for a provider, just leave its key empty โ anonymous probes still work for liveness checks on most providers, and they won't burn your personal quota.
|
|
227
|
-
|
|
228
|
-
<details>
|
|
229
|
-
<summary><strong>๐งน Providers removed from the catalog (and why)</strong></summary>
|
|
230
|
-
|
|
231
|
-
`iFlow` shut down on April 17, 2026. `Together AI`, `Perplexity API`, `DeepInfra`, `Replicate`, `Fireworks`, `Hyperbolic`, `Hugging Face`, `SiliconFlow`, `Chutes AI` were removed because they are paid, trial-credit only, too tiny to be useful, unclear as a stable free API, or tool-specific rather than a generally usable free provider. `Rovo` and `Gemini CLI` were removed as tool integrations (CLI-only, not generally usable free providers). The full list of free-tier providers kept *outside* the core catalog lives in [Other Free AI Resources](#-other-free-ai-resources).
|
|
232
|
-
|
|
233
|
-
</details>
|
|
113
|
+
> โ ๏ธ Health probes consume provider quota: FCM auto-pauses a provider on `429`, backs off exponentially per failing model, and shows a footer chip while a provider rests. Leave a key empty and anonymous liveness probes still work for most providers.
|
|
234
114
|
|
|
235
115
|
---
|
|
236
116
|
|
|
237
117
|
## ๐๏ธ The Terminal UI (TUI)
|
|
238
118
|
|
|
239
|
-
The TUI is the heart of FCM
|
|
240
|
-
|
|
241
|
-
<p align="center"><video src="website/public/videos/tui-first-launch.mp4" alt="First launch โ many models ping in parallel" autoplay muted loop playsinline width="100%"></video></p>
|
|
242
|
-
|
|
243
|
-
### First-run flow
|
|
244
|
-
|
|
245
|
-
1. `free-coding-models` opens the TUI and prompts for API keys. Paste one (or skip).
|
|
246
|
-
2. Models start pinging in parallel. Rows turn green โ
as they respond.
|
|
247
|
-
3. Navigate with **`โโ`**, press **`Enter`** on the model you want โ FCM writes it into your tool's config and launches the tool.
|
|
248
|
-
|
|
249
|
-
### Common workflows
|
|
250
|
-
|
|
251
|
-
**"Give me the fastest model that actually works"**
|
|
252
|
-
Sort by stability with **`B`** (or **`V`** for verdict) โ the top rows with ๐ฅ๐ฅ๐ฅ medals are your best bets. Models in `NO KEY` or `AUTH FAIL` are faded to 80% opacity so you instantly see what you can't use.
|
|
253
|
-
|
|
254
|
-
**"Configure OpenCode with Groq's fastest model"**
|
|
255
|
-
```bash
|
|
256
|
-
free-coding-models --opencode --origin groq
|
|
257
|
-
# โ navigate, press Enter. opencode.json is written and the CLI opens.
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
<p align="center"><video src="website/public/videos/tui-pick-and-launch.mp4" alt="Pick a model & launch โ Enter writes the model and opens the tool" autoplay muted loop playsinline width="100%"></video></p>
|
|
261
|
-
|
|
262
|
-
**"Benchmark before I commit to a model"**
|
|
263
|
-
- **`Ctrl+A`** runs an AI Speed Test on the selected model (a real completion request โ not just a ping). Results split into **AI Latency** + **TPS**.
|
|
264
|
-
- **`Ctrl+U`** runs the global benchmark across all visible models.
|
|
265
|
-
- Enable **Startup AI Speed Scan** in Settings (`P`) to run the global benchmark automatically after launch.
|
|
266
|
-
|
|
267
|
-
<p align="center"><video src="website/public/videos/tui-speed-test.mp4" alt="AI Speed Test โ Ctrl+A benchmarks the selected model" autoplay muted loop playsinline width="100%"></video></p>
|
|
268
|
-
|
|
269
|
-
**"I don't know which model to pick โ pick for me"**
|
|
270
|
-
Press **`Q`** to open **Smart Recommend**, a 3-question wizard (task type, prioritiesโฆ) that returns Top 3 shared-score recommendations.
|
|
271
|
-
|
|
272
|
-
**"Keep my go-to models pinned"**
|
|
273
|
-
Star a model with **`F`** โ favorites persist across sessions (shared with the Web Dashboard via `~/.free-coding-models.json`). Press **`Y`** to toggle **Pinned mode**: favorites stay pinned at the top and never scroll off-screen.
|
|
274
|
-
|
|
275
|
-
**"Switch tools without restarting"**
|
|
276
|
-
Press **`Z`** to cycle the target tool (OpenCode โ OpenClaw โ Crush โ Goose โ โฆ). Models incompatible with the active tool get a dark-red row background so you instantly see what works.
|
|
277
|
-
|
|
278
|
-
**"My terminal theme fights the TUI colors"**
|
|
279
|
-
Press **`G`** to cycle **Auto โ Dark โ Light**. Recolors the full interface live (table, Settings, Help, overlays).
|
|
280
|
-
|
|
281
|
-
### Keyboard reference
|
|
119
|
+
The TUI is the heart of FCM: a live, sortable table of every model with real latency, stability, verdict, and a one-key launch into your coding tool. Sorts are one letter (`R` rank, `S` SWE, `V` verdict, `B` stability...), filters are `T` (tier cycle), `D` (provider cycle), `E` (visibility cycle), and the essentials are:
|
|
282
120
|
|
|
283
121
|
| Key | Action |
|
|
284
122
|
|-----|--------|
|
|
285
|
-
| `โโ` | Navigate
|
|
286
|
-
| `
|
|
287
|
-
| `
|
|
288
|
-
| `
|
|
289
|
-
| `
|
|
290
|
-
| `
|
|
291
|
-
|
|
|
292
|
-
| `
|
|
293
|
-
| `
|
|
294
|
-
| `
|
|
295
|
-
|
|
|
296
|
-
| **`;`** | Open the **Playground** chat overlay (chat with the FCM router) |
|
|
297
|
-
| **`Ctrl+A`** | Run an AI Speed Test for the selected model |
|
|
298
|
-
| **`Ctrl+U`** | Run the Global AI Speed Test (real provider requests) |
|
|
299
|
-
| **`Shift+P`** | Re-probe failed rows only (auth fail / 429 / 404 / timeout) - no whole-list rescan |
|
|
300
|
-
| **`Ctrl+Shift+P`** | Probe all configured models (404/410 check, auto-hides broken ones) |
|
|
301
|
-
| **`Space`** | Expand the selected row: 2-line detail with provider, endpoint URL and the full model ID (press again or move the cursor to collapse) |
|
|
302
|
-
| `R/S/C/M/O/L/A/H/V/B/U` | Sort by Rank / SWE / ContexT / Model / Origin / Last ping / Avg ping / Health / Verdict / staBility / Uptime |
|
|
303
|
-
| `W` | Sort by real-world score (`Real` column โ see [Runtime telemetry](#-runtime-telemetry-real-world-scores)) |
|
|
304
|
-
| `Shift+W` | Open the Runtime Report overlay (per-model breakdown + recent calls) |
|
|
305
|
-
| `Shift+B` | Toggle visibility of broken models (footer shows `โก N cached ยท ๐ด M broken`) |
|
|
306
|
-
| `Shift+U` | Update to the latest version (when an update is available) |
|
|
307
|
-
| `P` | Settings (API keys, providers, updates, theme, Startup Speed Scan) |
|
|
308
|
-
| `Q` | Smart Recommend overlay |
|
|
309
|
-
| `N` | Changelog |
|
|
310
|
-
| `I` | Feedback / bug report |
|
|
311
|
-
| `K` | Help overlay |
|
|
123
|
+
| `โโ` / `Enter` | Navigate / launch the selected model |
|
|
124
|
+
| `Z` | Cycle target tool (OpenCode โ OpenClaw โ Crush โ Goose โ ...) |
|
|
125
|
+
| `F` / `Y` | Favorite a model / toggle pinned favorites mode |
|
|
126
|
+
| `Ctrl+A` / `Ctrl+U` | AI Speed Test on selected model / all visible models |
|
|
127
|
+
| `Q` | Smart Recommend (3-question wizard, Top 3 picks) |
|
|
128
|
+
| `Ctrl+P` | Command Palette (fuzzy search over every filter, sort and action) |
|
|
129
|
+
| `;` | Playground chat with the router |
|
|
130
|
+
| `Shift+P` / `Ctrl+Shift+P` | Re-probe failed rows / probe all models (404/410) |
|
|
131
|
+
| `Space` | Expand the selected row (provider, endpoint URL, full model ID) |
|
|
132
|
+
| `Shift+B` | Toggle broken-model visibility |
|
|
133
|
+
| `G` / `P` / `I` / `N` | Theme / Settings / Help / Reset view |
|
|
312
134
|
| `Ctrl+C` | Exit |
|
|
313
135
|
|
|
314
|
-
|
|
136
|
+
Mouse support: click headers to sort, double-click a row to launch, right-click to favorite, scroll to navigate.
|
|
315
137
|
|
|
316
|
-
|
|
317
|
-
|--------|--------|
|
|
318
|
-
| **Click column header** | Sort by that column |
|
|
319
|
-
| **Click Tier header** | Cycle tier filter |
|
|
320
|
-
| **Click CLI Tools header** | Cycle tool mode |
|
|
321
|
-
| **Click model row** | Move cursor to model |
|
|
322
|
-
| **Double-click model row** | Select and launch model |
|
|
323
|
-
| **Right-click model row** | Toggle favorite |
|
|
324
|
-
| **Scroll wheel** | Navigate table / overlays / palette |
|
|
325
|
-
| **Click footer hotkey** | Trigger that action |
|
|
326
|
-
| **Click update banner** | Install latest version and relaunch |
|
|
327
|
-
| **Click outside modal** | Close the command palette |
|
|
328
|
-
|
|
329
|
-
โ **Stability score & full column reference:** [`docs/stability.md`](./docs/stability.md)
|
|
138
|
+
> ๐ **Full key table, mouse reference and workflows:** [`docs/tui.md`](./docs/tui.md) ยท Stability score and columns: [`docs/stability.md`](./docs/stability.md)
|
|
330
139
|
|
|
331
140
|
---
|
|
332
141
|
|
|
333
142
|
## ๐ The Web Dashboard
|
|
334
143
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
### Start it
|
|
338
|
-
|
|
339
|
-
```bash
|
|
340
|
-
# Catalog-only dashboard on http://localhost:3333 (override with FCM_WEB_PORT)
|
|
341
|
-
free-coding-models web
|
|
342
|
-
|
|
343
|
-
# Full dashboard + Smart Model Router on http://localhost:19280
|
|
344
|
-
free-coding-models --daemon
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
| Mode | Port | What you get |
|
|
348
|
-
|------|------|--------------|
|
|
349
|
-
| `web` (or `--web` / `--gui`) | `3333` (`FCM_WEB_PORT`) | The realtime catalog dashboard only โ browse, filter, benchmark. |
|
|
350
|
-
| `--daemon` | `19280` (`FCM_PORT`) | Dashboard **+** the Smart Model Router API (`/v1/...`) on the same port. |
|
|
351
|
-
| `--daemon-bg` | `19280` | Same as `--daemon`, but detached so it keeps running after the TUI closes. |
|
|
352
|
-
|
|
353
|
-
> ๐ก Open the dashboard with `open http://localhost:3333` (or `19280`), or drive it headless with `chrome-devtools`.
|
|
354
|
-
|
|
355
|
-
### What's in the dashboard
|
|
356
|
-
|
|
357
|
-
The model table uses **100% of the viewport width** (no rails) under a sticky header + filter bar, and every TUI capability ships behind a button or chip.
|
|
358
|
-
|
|
359
|
-
| Area | Highlights |
|
|
360
|
-
|---|---|
|
|
361
|
-
| **Header** | Logo + version ยท nav (Dashboard, Settings, Analytics, Recommend, Router) ยท kebab menu (Help, Changelog, Install Endpoints, Installed Models) ยท endpoint target picker ยท `โK` palette ยท AI Latency toggle ยท theme ยท export |
|
|
362
|
-
| **Model table** | 17 resizable columns (widths saved in localStorage), โญ star + ๐ install per row, medal borders for top-3, dark-red rows for tool-incompatible models, click an AI Latency cell to run a per-row benchmark, sticky header |
|
|
363
|
-
| **Filter bar** | Tier / Status / Verdict / Health chip rows ยท Visibility (Normal / Configured only / Usable only) ยท Provider select ยท text filter with `X` clear ยท Reset (TUI `N`) ยท ping mode (Speed / Normal / Slow / Forced) ยท "next ping in Xs" countdown |
|
|
364
|
-
| **Detail panel** | Slide-in on row click ยท install-endpoint + per-row benchmark ยท favorite toggle + reorder (TUI `Shift+โโ`) ยท latency trend chart ยท all stats |
|
|
365
|
-
| **Command palette** | `โK` / `Ctrl+P` โ the only global shortcut. Fuzzy search across views, theme, ping mode, reset, export, **and the full TUI command registry** |
|
|
366
|
-
| **Smart Recommend** | The 3-question wizard โ Top 3 shared-score recommendations with Pin + install actions |
|
|
367
|
-
| **Router Dashboard** | Daemon start/stop, model health table with circuit-breaker badges, request log, probe-mode selector, "Probe all" benchmark, and a **Test Router** mini-playground |
|
|
368
|
-
| **Token Usage** | (inside Analytics) today + all-time summary, 7-day bar chart, top models & providers breakdown |
|
|
369
|
-
| **Settings parity** | Theme (auto/dark/light), favorites pinned mode, Startup AI Speed Scan, shell-env export, per-provider **Test key** button โ all persisted to the same `~/.free-coding-models.json` the TUI uses |
|
|
370
|
-
|
|
371
|
-
**Keyboard:** `Esc` closes any modal ยท `Cmd+K` toggles the palette. Everything else is mouse-first.
|
|
372
|
-
|
|
373
|
-
**URL deep-linking:** `?tier=S+&sort=verdict&origin=groq&toolMode=goose&q=โฆ` hydrates the dashboard on load **and** every filter/sort/view change is reflected back into the URL (debounced). CLI flags become shareable links โ favorites are shared with the TUI through the same config file.
|
|
374
|
-
|
|
375
|
-
<p align="center"><video src="website/public/videos/web-url-deep-linking.mp4" alt="URL deep-linking โ filter the dashboard, share the URL" autoplay muted loop playsinline width="100%"></video></p>
|
|
376
|
-
|
|
377
|
-
### Run it in Docker
|
|
378
|
-
|
|
379
|
-
Run FCM without installing Node.js using the official image:
|
|
380
|
-
|
|
381
|
-
> **Note:** GHCR requires authentication even for public images. Login once with:
|
|
382
|
-
> ```bash
|
|
383
|
-
> echo $GITHUB_TOKEN | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
|
|
384
|
-
> ```
|
|
385
|
-
> Or use a [personal access token](https://github.com/settings/tokens) with `read:packages` scope.
|
|
386
|
-
|
|
387
|
-
```bash
|
|
388
|
-
# Quick start โ daemon + web UI on port 19280
|
|
389
|
-
docker run -p 19280:19280 ghcr.io/vava-nessa/free-coding-models:latest
|
|
390
|
-
|
|
391
|
-
# With an API key
|
|
392
|
-
docker run -p 19280:19280 -e OPENROUTER_API_KEY=your_key ghcr.io/vava-nessa/free-coding-models:latest
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
Point your coding tool at `http://localhost:19280/v1` with model `fcm` and key `fcm-local`. See the [Smart Model Router](#-the-smart-model-router) section for routing details.
|
|
396
|
-
|
|
397
|
-
**Available image tags:** `latest` ยท `v{major}.{minor}.{patch}` (e.g. `v0.3.70`) ยท `v{major}.{minor}` (e.g. `v0.3`) ยท `v{major}` (e.g. `v0`)
|
|
398
|
-
|
|
399
|
-
| Env var | Default | Description |
|
|
400
|
-
|---------|---------|-------------|
|
|
401
|
-
| `FCM_HOST` | `0.0.0.0` | Bind host (`127.0.0.1` for localhost-only) |
|
|
402
|
-
| `FCM_PORT` | `19280` | Port to listen on |
|
|
403
|
-
| `FREE_CODING_MODELS_TELEMETRY` | `0` | `0` disables telemetry |
|
|
404
|
-
|
|
405
|
-
<details>
|
|
406
|
-
<summary><strong>Docker Compose + troubleshooting</strong></summary>
|
|
407
|
-
|
|
408
|
-
```yaml
|
|
409
|
-
version: '3.8'
|
|
410
|
-
services:
|
|
411
|
-
fcm:
|
|
412
|
-
image: ghcr.io/vava-nessa/free-coding-models:latest
|
|
413
|
-
container_name: fcm
|
|
414
|
-
restart: unless-stopped
|
|
415
|
-
ports:
|
|
416
|
-
- "19280:19280"
|
|
417
|
-
environment:
|
|
418
|
-
FREE_CODING_MODELS_TELEMETRY: "0"
|
|
419
|
-
FCM_HOST: "0.0.0.0"
|
|
420
|
-
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
|
|
421
|
-
ORCAROUTER_API_KEY: ${ORCAROUTER_API_KEY:-}
|
|
422
|
-
volumes:
|
|
423
|
-
- fcm-data:/home/fcm
|
|
424
|
-
volumes:
|
|
425
|
-
fcm-data:
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
**Troubleshooting:**
|
|
429
|
-
- **Won't start** โ `docker logs fcm`, and check port 19280 isn't in use (`docker ps | grep 19280`).
|
|
430
|
-
- **Health check fails** โ wait ~30s for the first probe cycle; verify keys with `docker exec fcm curl http://localhost:19280/health`.
|
|
431
|
-
- **Can't connect from host** โ ensure `FCM_HOST=0.0.0.0` (default) and the firewall allows localhost.
|
|
432
|
-
- **Reset data** โ config lives in the `fcm-data` volume; wipe it with `docker-compose down -v`.
|
|
433
|
-
|
|
434
|
-
</details>
|
|
435
|
-
|
|
436
|
-
---
|
|
437
|
-
|
|
438
|
-
## ๐ Agent Extensions
|
|
439
|
-
|
|
440
|
-
FCM ships two **agent extensions** that bring the scanner/ranker directly into your coding agent โ so you can hot-swap models mid-session without leaving the terminal. Both share one core (`fcm-agent-core`), so a scan done in one benefits the other.
|
|
441
|
-
|
|
442
|
-
### OpenCode Plugin โ `fcm-opencode` โ ๏ธ BETA
|
|
443
|
-
|
|
444
|
-
The OpenCode adapter for the FCM scanner. Startup is intentionally light: fresh cache first, daemon second, **no direct scan** unless you run `/fcm`.
|
|
445
|
-
|
|
446
|
-
```bash
|
|
447
|
-
# Local install (symlink the adapter into OpenCode's plugins dir)
|
|
448
|
-
mkdir -p ~/.config/opencode/plugins
|
|
449
|
-
ln -sf /Users/<you>/Documents/GitHub/free-coding-models/packages/fcm-opencode/index.js \
|
|
450
|
-
~/.config/opencode/plugins/fcm-opencode.js
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
> (`opencode-plugin/` at the repo root is kept as a thin compat wrapper, so existing symlinks keep working.)
|
|
454
|
-
|
|
455
|
-
| Command | Description |
|
|
456
|
-
|---------|-------------|
|
|
457
|
-
| `/fcm` | Run an explicit scan and list ranked choices (no switch) |
|
|
458
|
-
| `/fcm 1` | Switch OpenCode config to ranked model #1 |
|
|
459
|
-
| `/fcm best` | Switch OpenCode config to the best ranked model |
|
|
460
|
-
| `/fcm rescan` | Force a fresh scan |
|
|
461
|
-
| `/fcm status` / `/fcm-status` | Show plugin diagnostics |
|
|
462
|
-
| `/fcm router` / `/fcm-router` | Switch OpenCode config to the local FCM Smart Router daemon |
|
|
144
|
+
A real-time browser control center for the same catalog: full filter/sort parity with the TUI, per-row benchmarks, favorites, Smart Recommend, a Router Dashboard, token usage analytics, and shareable URL deep-links (`?tier=S+&sort=verdict&origin=groq`). Start it with `free-coding-models web` (port 3333) or `free-coding-models --daemon` (dashboard + router API on port 19280). Runs headless in Docker (`ghcr.io/vava-nessa/free-coding-models`).
|
|
463
145
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
### Pi Extension โ `FCM-Pi` โ ๏ธ BETA
|
|
467
|
-
|
|
468
|
-
A native [Pi coding agent](https://pi.dev) extension. It stays **silent by default** โ no scan, no footer noise, no automatic model switch on boot or `/resume`. It only acts when you ask.
|
|
469
|
-
|
|
470
|
-
**Install** โ add the extension path to `~/.pi/agent/settings.json` (not yet on npm โ local path only):
|
|
471
|
-
|
|
472
|
-
```json
|
|
473
|
-
{
|
|
474
|
-
"packages": [
|
|
475
|
-
"/Users/<you>/Documents/GitHub/free-coding-models/pi-extension"
|
|
476
|
-
]
|
|
477
|
-
}
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
Then restart Pi. The extension loads automatically. Requires Pi + `free-coding-models` installed and configured with at least one API key.
|
|
481
|
-
|
|
482
|
-
| Feature | What it does |
|
|
483
|
-
|---------|--------------|
|
|
484
|
-
| **Silent startup** | No scan, no footer noise, no auto-switch on boot or `/resume` |
|
|
485
|
-
| **Manual scan** | `/fcm` pings ~30 candidates in parallel, then waits for your explicit pick |
|
|
486
|
-
| **Live progress** | The Pi status bar shows `โ ธ Probing: Kimi K2.6 [Nvidia]โฆ` only while probing, then hides |
|
|
487
|
-
| **10-min disk cache** | Results cached to `~/.pi/agent/fcm-cache.json` for fast diagnostics |
|
|
488
|
-
| **Error-triggered picker** | If a request fails (HTTP 4xx/5xx), FCM reopens the picker and marks the failed model `๐ด BUGGED` |
|
|
489
|
-
| **Daemon integration** | If the router daemon is running (`--daemon-bg`), scan results are fetched instantly from its cache |
|
|
490
|
-
|
|
491
|
-
| Command | Description |
|
|
492
|
-
|---------|-------------|
|
|
493
|
-
| `/fcm` | Re-scan and pick a model interactively from the top 10 |
|
|
494
|
-
| `/fcm-list` | Ranked table of top 20 models (SWE / Latency / TPS / Provider) |
|
|
495
|
-
| `/fcm-router` | Connect Pi to the local FCM Smart Router daemon |
|
|
496
|
-
| `/fcm-status` | Diagnostics: active model, last scan source, daemon state |
|
|
497
|
-
|
|
498
|
-
**Composite ranking** โ SWE-bench (60%) + Latency (20%) + TPS (10%) + Stability (10%). Cerebras free-tier models are capped at ~64-65k total tokens (paid tier gets 131k) and are hidden from Pi/OpenCode pickers when they fail real agent prompts.
|
|
499
|
-
|
|
500
|
-
โ Full architecture: [`packages/fcm-pi/README.md`](./packages/fcm-pi/README.md)
|
|
501
|
-
|
|
502
|
-
### Shared agent architecture
|
|
503
|
-
|
|
504
|
-
```
|
|
505
|
-
packages/
|
|
506
|
-
โโโ fcm-agent-core/ โ shared core (scan, rank, cache, daemon, keys, providers; no rendering)
|
|
507
|
-
โโโ fcm-pi/ โ Pi adapter (hooks, commands, status-bar renderer, ~/.pi/agent disk writer)
|
|
508
|
-
โโโ fcm-opencode/ โ OpenCode adapter (config mutation, commands, toasts, shell.env)
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
- The core emits **structured progress events**; each adapter renders them its own way (Pi status bar, OpenCode toast).
|
|
512
|
-
- API keys are never inlined into OpenCode config โ referenced via `{env:FCM_<PROVIDER>_API_KEY}`.
|
|
513
|
-
- A **cross-tool cache** means a scan done in Pi benefits OpenCode (and vice-versa).
|
|
514
|
-
|
|
515
|
-
> One-time self-link so `free-coding-models` resolves by name during local-path use:
|
|
516
|
-
> ```bash
|
|
517
|
-
> cd packages && mkdir -p node_modules && ln -s ../../ node_modules/free-coding-models
|
|
518
|
-
> ```
|
|
519
|
-
|
|
520
|
-
โ Public API & rationale: [`packages/fcm-agent-core/README.md`](./packages/fcm-agent-core/README.md)
|
|
146
|
+
> ๐ **Modes, Docker, Compose and all env vars** (`FCM_HOST`, `FCM_PORT`, `FCM_WEB_PORT`, `FCM_ROUTER_TOKEN`, `FCM_ALLOWED_ORIGINS`, `FCM_DISCORD_*_WEBHOOK`): [`docs/web-dashboard.md`](./docs/web-dashboard.md)
|
|
521
147
|
|
|
522
148
|
---
|
|
523
149
|
|
|
524
150
|
## ๐ The Smart Model Router
|
|
525
151
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
> This is the most advanced surface. Most users start with the TUI or Web Dashboard and only reach for the router once they want *one endpoint that never goes down*.
|
|
529
|
-
|
|
530
|
-
### Quick start
|
|
531
|
-
|
|
532
|
-
```bash
|
|
533
|
-
# Start the router in the background (keeps running after the TUI closes)
|
|
534
|
-
free-coding-models --daemon-bg
|
|
535
|
-
|
|
536
|
-
# Check the active port, set, model count, uptime, and request totals
|
|
537
|
-
free-coding-models --daemon-status
|
|
538
|
-
|
|
539
|
-
# Stop it cleanly
|
|
540
|
-
free-coding-models --daemon-stop
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
Point your coding tool at:
|
|
544
|
-
|
|
545
|
-
| Field | Value |
|
|
546
|
-
|-------|-------|
|
|
547
|
-
| Base URL | `http://localhost:19280/v1` |
|
|
548
|
-
| Model | `fcm` |
|
|
549
|
-
| API key | `fcm-local` |
|
|
550
|
-
|
|
551
|
-
On first start the daemon auto-creates a `fast-coding` set from your configured providers. It stores router settings in `~/.free-coding-models.json`, writes lifecycle logs to `~/.free-coding-models-daemon.log`, and tracks token metadata in `~/.free-coding-models-tokens.json`.
|
|
552
|
-
|
|
553
|
-
### How it works
|
|
554
|
-
|
|
555
|
-
**1. Probe mechanism (adaptive cadence)** โ the daemon sends a 1-token chat-completion ping to every model in the active set. It measures latency **+ status code**, not just reachability, so a wrong API key is caught and the circuit breaker opens. Probe modes:
|
|
556
|
-
|
|
557
|
-
| Mode | Interval | Use when |
|
|
558
|
-
|------|----------|----------|
|
|
559
|
-
| `eco` | 120s | You want to save quota |
|
|
560
|
-
| `balanced` *(default)* | 30s | Everyday use |
|
|
561
|
-
| `aggressive` | 10s | You're actively debugging routing |
|
|
562
|
-
|
|
563
|
-
**2. Circuit breaker (per-model state)** โ each model flips between states:
|
|
564
|
-
|
|
565
|
-
| State | Meaning |
|
|
566
|
-
|-------|---------|
|
|
567
|
-
| ๐ข **Healthy** | Last probe returned 2xx โ route here freely |
|
|
568
|
-
| ๐ด **Down** | Last 3 probes failed โ skip until cooldown |
|
|
569
|
-
| ๐ก **Recovering** | Cooldown expired โ retrying with 1 request |
|
|
570
|
-
| ๐ **Auth error** | 401/403 โ your API key is wrong for this model |
|
|
571
|
-
| โช **Deprecated** | Removed from the catalog โ will be replaced |
|
|
572
|
-
|
|
573
|
-
**3. Failover order (family preserving)** โ models are tried in priority order; a `Recovering` / `Down` / `Auth error` model is skipped and the request goes to the next healthy one. When a model fails, the router first looks for the **same model family on another provider** (e.g. `nvidiaNim/deepseek-v4-pro` down โ `sambanova/DeepSeek-V3.1` next), so your coding assistant keeps the same model behaviour mid-conversation instead of silently switching to a different family. If no same-family alternative is healthy, it falls back to the plain priority order. Families covered: Claude, DeepSeek, Gemini, GPT, Nemotron, Llama, MiniMax, Qwen, Kimi, GLM, Mistral, OpenAI o-series. The toggle lives on the Router Dashboard's set panel (**Family failover: on/off**, on by default, stored per set as `familyFailover`), and family hops are tagged `family` in the request log of both the TUI and Web dashboard. If *all* fail, you get a `503` with a `models_tried` list in the body for debugging.
|
|
574
|
-
|
|
575
|
-
**4. Auto-heal (on by default)** โ at daemon start, any model in `Auth error` or `Deprecated` is swapped for a working alternative (same provider first, then cross-provider). The first time you manually add/remove/reorder a model, auto-heal switches off and your choices are preserved โ so a new user with a half-broken key set lands on a usable default set by the time the dashboard renders.
|
|
576
|
-
|
|
577
|
-
### Playground โ chat with the router
|
|
578
|
-
|
|
579
|
-
The fastest way to try the router without configuring a tool. Every chat starts with a configurable **pre-prompt** that introduces the assistant as the FCM routing agent.
|
|
152
|
+
A local OpenAI-compatible daemon: point any coding tool at `http://localhost:19280/v1` with model `fcm` (key `fcm-local`) and FCM routes every request to the best available model in your active set. Adaptive health probes, per-model circuit breakers, family-preserving failover, auto-heal of broken sets, and a Playground chat to try it without configuring a tool.
|
|
580
153
|
|
|
581
154
|
```bash
|
|
582
|
-
free-coding-models --daemon-bg
|
|
583
|
-
free-coding-models --
|
|
584
|
-
#
|
|
585
|
-
# โฆor click "Playground" in the Web Dashboard header
|
|
155
|
+
free-coding-models --daemon-bg # start
|
|
156
|
+
free-coding-models --daemon-status # inspect
|
|
157
|
+
free-coding-models --daemon-stop # stop
|
|
586
158
|
```
|
|
587
159
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
The Playground streams responses token-by-token (SSE), shows the routed-via provider/model + latency + tokens on every reply, lets you pin a specific model (`fcm` = auto, or `groq/<id>` / `cerebras/<id>` / โฆ) for A/B testing, and lets you toggle the pre-prompt per session. The pre-prompt lives in `router.prePrompt` and is editable from any surface (the daemon reloads it on its 10s config-refresh tick):
|
|
591
|
-
|
|
592
|
-
```json
|
|
593
|
-
{
|
|
594
|
-
"router": {
|
|
595
|
-
"prePrompt": {
|
|
596
|
-
"enabled": true,
|
|
597
|
-
"text": "You are free-coding-models, the free coding-model routing agent..."
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
```
|
|
602
|
-
|
|
603
|
-
### Routing behavior details
|
|
604
|
-
|
|
605
|
-
- Priority order works immediately on cold start, then probes refine health over time.
|
|
606
|
-
- **Transient failures** (`429`, `500`, `502`, `503`, timeouts) fail over to the next model.
|
|
607
|
-
- **Auth problems** (`401`, `403`, missing keys) are marked separately so bad credentials never poison the circuit breaker; after one provider returns an auth error, the router skips the rest of that provider for the current request.
|
|
608
|
-
- Upstream HTML maintenance pages and malformed "successful" JSON are treated as retryable provider failures instead of being forwarded to your tool.
|
|
609
|
-
- Quota/rate-limit failures include retry headers in the final router `503` payload when providers expose them.
|
|
610
|
-
- If a coding tool disconnects mid-request, the daemon aborts the upstream request **without** counting it as a provider failure.
|
|
611
|
-
- Streaming requests retry before the first byte; after partial output starts, the daemon records the failure and lets the current stream finish as safely as possible.
|
|
612
|
-
|
|
613
|
-
### Auto-discover the best set โ `--sync-set`
|
|
614
|
-
|
|
615
|
-
`--sync-set [name]` auto-discovers, live-probes, and populates a named router set with the best currently-available coding models โ perfect for scheduled refreshes so your set stays current without manual picking.
|
|
616
|
-
|
|
617
|
-
```bash
|
|
618
|
-
free-coding-models --sync-set # create/refresh the default "auto" set
|
|
619
|
-
free-coding-models --sync-set my-coding-set # named set
|
|
620
|
-
free-coding-models --daemon-bg # then run the daemon with it
|
|
621
|
-
```
|
|
622
|
-
|
|
623
|
-
Each candidate is probed twice (plain text must return exactly `OK`, and a tool-call must produce a valid `tool_calls` array), so models that work reliably with function-calling tools get in. Run it on a cron to keep the set fresh:
|
|
624
|
-
|
|
625
|
-
```bash
|
|
626
|
-
# crontab โ refresh every 4 hours
|
|
627
|
-
0 */4 * * * /usr/local/bin/free-coding-models --sync-set >> ~/.free-coding-models-sync.log 2>&1
|
|
628
|
-
```
|
|
629
|
-
|
|
630
|
-
โ Full pipeline, output shape, and failure modes: [`docs/sync-set.md`](./docs/sync-set.md)
|
|
631
|
-
|
|
632
|
-
### REST API
|
|
633
|
-
|
|
634
|
-
**Router endpoints** (`/v1/...`):
|
|
635
|
-
|
|
636
|
-
| Endpoint | Purpose |
|
|
637
|
-
|----------|---------|
|
|
638
|
-
| `POST /v1/chat/completions` | Route through the active set |
|
|
639
|
-
| `POST /v1/sets/:name/chat/completions` | Route through a named set |
|
|
640
|
-
| `GET /v1/models` | Virtual models (`fcm`, `fcm:set-name`) |
|
|
641
|
-
| `GET /health` | Daemon status JSON |
|
|
642
|
-
| `GET /stats` | Routing, health, request log, token + probe-cache + quota + runtime stats |
|
|
643
|
-
| `GET /stream/events` | Live SSE events for router updates |
|
|
644
|
-
| `POST /daemon/probe-mode` | Set probe mode `{ "probeMode": "eco" \| "balanced" \| "aggressive" }` |
|
|
645
|
-
|
|
646
|
-
**Web Dashboard endpoints** (same port in `--daemon` mode):
|
|
647
|
-
|
|
648
|
-
| Endpoint | Purpose |
|
|
649
|
-
|----------|---------|
|
|
650
|
-
| `GET /` | Web dashboard HTML |
|
|
651
|
-
| `GET /api/models` | All model data with latency stats |
|
|
652
|
-
| `GET /api/config` | Provider config (keys masked) |
|
|
653
|
-
| `GET /api/events` | Live SSE events for the dashboard |
|
|
654
|
-
| `GET /api/key/:provider` | Reveal the full API key for a provider |
|
|
655
|
-
| `POST /api/settings` | Save API keys and provider toggles |
|
|
656
|
-
|
|
657
|
-
โ Full router guide: [`docs/README_ROUTER.md`](./docs/README_ROUTER.md)
|
|
160
|
+
> ๐ **Full guide (probes, circuit breaker, failover, Playground, `--sync-set`, REST API):** [`docs/router.md`](./docs/router.md)
|
|
658
161
|
|
|
659
162
|
---
|
|
660
163
|
|
|
661
|
-
## ๐
|
|
164
|
+
## ๐ CLI Flags
|
|
662
165
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
### CLI flags
|
|
666
|
-
|
|
667
|
-
Flags combine freely in any order. Run `free-coding-models --help` to print the full list in-app.
|
|
166
|
+
Flags combine freely in any order. The most common:
|
|
668
167
|
|
|
669
168
|
| Flag | Effect |
|
|
670
169
|
|------|--------|
|
|
671
|
-
| `--best` |
|
|
672
|
-
| `--
|
|
673
|
-
| `--
|
|
674
|
-
| `--
|
|
675
|
-
| `--
|
|
676
|
-
| `--
|
|
677
|
-
| `--
|
|
678
|
-
| `--
|
|
679
|
-
| `--recommend` | Open Smart Recommend immediately on startup |
|
|
680
|
-
| `--hide-unconfigured` / `--show-unconfigured` | Control whether models without a key are shown |
|
|
170
|
+
| `--best` / `--premium` | Top tiers only / elite preset (S filter + verdict sort) |
|
|
171
|
+
| `--tier <S\|A\|B\|C>` | Filter by tier family |
|
|
172
|
+
| `--origin <provider>` | Filter by provider (e.g. `groq`) |
|
|
173
|
+
| `--sort <column>` + `--asc` / `--desc` | Start sorted by a column (`rank`, `swe`, `verdict`, `stability`, ...) |
|
|
174
|
+
| `--json` | Skip the TUI, print results as JSON (great with `jq`) |
|
|
175
|
+
| `--fiable` | Wait 10s, print the single most reliable model, exit |
|
|
176
|
+
| `--recommend` | Open Smart Recommend on startup |
|
|
177
|
+
| `--hide-unconfigured` / `--show-unconfigured` | Control keyless models visibility |
|
|
681
178
|
| `--ping-interval <ms>` | Override the ping interval |
|
|
682
|
-
| `--reprobe` / `--
|
|
683
|
-
| `--
|
|
684
|
-
| `--
|
|
685
|
-
| `--
|
|
179
|
+
| `--reprobe` / `--probe-ttl <ms>` / `--show-broken` | Probe cache control |
|
|
180
|
+
| `--check-drift` | Diff `sources.js` vs models.dev, exit 1 on mismatch |
|
|
181
|
+
| `--config-dir <dir>` | Custom config location |
|
|
182
|
+
| `--fix-permissions` / `--yes` | Auto-fix config file permissions (chmod 600) |
|
|
183
|
+
| `--web` | Open the Web Dashboard instead of the TUI |
|
|
184
|
+
| `--daemon` / `--daemon-bg` / `--daemon-status` / `--daemon-stop` | Smart Model Router lifecycle |
|
|
185
|
+
| `--sync-set [name]` | Auto-populate a router set with the currently best models |
|
|
686
186
|
| `--no-telemetry` | Disable anonymous telemetry for this run |
|
|
687
|
-
| `--
|
|
688
|
-
| `--fix-permissions` / `--yes` / `-y` | Auto-fix insecure config file permissions (chmod 600) without prompting; never asked on piped stdin, daemon, web, or `--json` runs |
|
|
689
|
-
|
|
690
|
-
**Tool launchers** โ start the TUI pre-configured for a tool, then `Enter` writes the model into that tool's config and launches it:
|
|
691
|
-
|
|
692
|
-
| Flag | Tool | Flag | Tool |
|
|
693
|
-
|------|------|------|------|
|
|
694
|
-
| `--opencode` | ๐ฆ OpenCode CLI | `--openhands` | ๐คฒ OpenHands |
|
|
695
|
-
| `--opencode-desktop` | ๐ฆ OpenCode Desktop | `--amp` | โก Amp |
|
|
696
|
-
| `--opencode-web` | ๐ฆ OpenCode WebUI | `--hermes` | ๐ฎ Hermes |
|
|
697
|
-
| `--openclaw` | ๐ฆ OpenClaw | `--continue` | โถ๏ธ Continue CLI |
|
|
698
|
-
| `--crush` | ๐ Crush | `--cline` | ๐ง Cline |
|
|
699
|
-
| `--goose` | ๐ชฟ Goose | `--xcode` | ๐ ๏ธ Xcode Intelligence |
|
|
700
|
-
| `--aider` | ๐ Aider | `--pi` | ฯ Pi |
|
|
701
|
-
| `--kilo` | โก๏ธ Kilo CLI | `--copilot` | ๐ค Copilot CLI |
|
|
702
|
-
| `--qwen` | ๐ Qwen Code | `--forgecode` | ๐ฅ ForgeCode |
|
|
703
|
-
| | | `--zcode` | ๐ง ZCode |
|
|
704
|
-
|
|
705
|
-
> Default (no tool flag) = OpenCode CLI. Press **`Z`** in the TUI to cycle tools without restarting. Incompatible models get a dark-red row background when a tool mode is active.
|
|
706
|
-
|
|
707
|
-
โ Full flag reference: [`docs/flags.md`](./docs/flags.md) ยท Tool โ config mapping: [`docs/integrations.md`](./docs/integrations.md)
|
|
708
|
-
|
|
709
|
-
### OpenCode Zen โ free models exclusive to OpenCode
|
|
710
|
-
|
|
711
|
-
[OpenCode Zen](https://opencode.ai/zen) is a hosted AI gateway offering **5 free coding models** exclusively through OpenCode CLI/Desktop (OpenAI-compatible endpoint, so other tools can use them too):
|
|
712
|
-
|
|
713
|
-
| Model | Tier | SWE-bench | Context |
|
|
714
|
-
|-------|------|-----------|---------|
|
|
715
|
-
| Big Pickle | S+ | 72.0% | 200k |
|
|
716
|
-
| DeepSeek V4 Flash Free | S+ | 79.0% | 200k |
|
|
717
|
-
| MiMo-V2.5 Free | S+ | - | 200k |
|
|
718
|
-
| Nemotron 3 Super Free | A+ | 52.0% | 200k |
|
|
719
|
-
| MiniMax M3 Free | S+ | 59.0% | 1M |
|
|
720
|
-
|
|
721
|
-
Sign up at [opencode.ai/auth](https://opencode.ai/auth), enter your Zen key via `P`, and Zen models appear in the main table (auto-switching to OpenCode CLI on launch).
|
|
722
|
-
|
|
723
|
-
### ๐ง Persistent probe cache
|
|
724
|
-
|
|
725
|
-
Every health-probe result is cached to `~/.free-coding-models/probe-cache.json` for **24 hours** and **shared across all surfaces** (CLI TUI, Web Dashboard / daemon, Tauri Desktop).
|
|
726
|
-
|
|
727
|
-
- **Warm start** renders the full ranking in <500ms using cached results, then re-pings only models that are due (broken or past TTL).
|
|
728
|
-
- **Broken models** are auto-hidden across sessions โ a model that 401s today stays out of tomorrow's default view, and recovers automatically when it returns `ok`.
|
|
729
|
-
- **Cross-process safe** โ debounced flush + atomic rename + read-merge-write, so the CLI and the daemon share the file without clobbering each other.
|
|
730
|
-
|
|
731
|
-
| Flag / key | Effect |
|
|
732
|
-
|------------|--------|
|
|
733
|
-
| `--reprobe` / `--no-cache` | Nuke the cache; ping everything fresh |
|
|
734
|
-
| `--probe-ttl <ms>` | Override the 24h TTL (e.g. `--probe-ttl 3600000` for 1h) |
|
|
735
|
-
| `--show-broken` | Don't auto-hide broken models this run |
|
|
736
|
-
| `Shift+B` (TUI) | Toggle broken-model visibility (footer: `โก N cached ยท ๐ด M broken`) |
|
|
737
|
-
|
|
738
|
-
**Cache location:** `$XDG_CACHE_HOME/free-coding-models/probe-cache.json` if set, else `~/.free-coding-models/probe-cache.json` (Windows: `%USERPROFILE%\.free-coding-models\probe-cache.json`). Plain JSON, `0600` perms โ inspect or wipe it any time.
|
|
739
|
-
|
|
740
|
-
### ๐ Live quota from response headers
|
|
187
|
+
| `--help` / `-h` | Full in-app help |
|
|
741
188
|
|
|
742
|
-
|
|
189
|
+
**Tool launchers** (21): `--opencode` (default), `--openclaw`, `--crush`, `--goose`, `--aider`, `--kilo`, `--qwen`, `--openhands`, `--amp`, `--pi`, `--hermes`, `--continue`, `--cline`, `--xcode`, `--copilot`, `--forgecode`, `--zcode`, `--jcode`, `--caveman`, plus OpenCode Desktop / WebUI variants.
|
|
743
190
|
|
|
744
|
-
|
|
745
|
-
- **Pre-warmed by pings** โ even health pings return headers, so quota is visible before you ever route a real request.
|
|
746
|
-
- **5-minute staleness** โ snapshots older than 5 min are excluded, with the active `/api/v1/key` fetcher as fallback for idle providers.
|
|
191
|
+
> ๐ **Canonical full flag reference (every flag, verified against the parser):** [`docs/flags.md`](./docs/flags.md) ยท Tool-to-config mapping: [`docs/integrations.md`](./docs/integrations.md)
|
|
747
192
|
|
|
748
|
-
|
|
749
|
-
|---------|-----------------|
|
|
750
|
-
| TUI footer | `๐ groq 78% ยท sambanova 41%` (top 5 most-depleted first) |
|
|
751
|
-
| Web Dashboard | `Provider Quota` section with animated progress bars |
|
|
752
|
-
| `/stats.quota` | `{ providerKey: { remaining, limit, percent, source, lastUpdated, windowType } }` |
|
|
753
|
-
|
|
754
|
-
The `source` field is `"header"` (passive) or `"endpoint"` (active fetcher) โ handy in devtools to debug why a provider shows the value it does.
|
|
755
|
-
|
|
756
|
-
### ๐ Runtime telemetry: real-world scores
|
|
757
|
-
|
|
758
|
-
Every routed request through the daemon feeds a persistent per-model telemetry file (`~/.free-coding-models/runtime-telemetry.json`) โ the **honesty layer** that complements SWE-bench with what models *actually* do on free tiers.
|
|
759
|
-
|
|
760
|
-
- **Real success rate** = `successCalls / totalCalls` (updated on every request, success and failure alike).
|
|
761
|
-
- **Real throughput** = `avgTokensPerSecond` from completion tokens / total latency.
|
|
762
|
-
- **Recent calls (last 50)** โ for "why did this just 500?" without rebuilding state.
|
|
763
|
-
- **Composite `Real` score** = `successRate ร 0.6 + sigmoid01(tok/s) ร 0.25 + recency ร 0.15` (null below 5 calls โ no penalty for new models).
|
|
764
|
-
|
|
765
|
-
| Surface | What you'll see |
|
|
766
|
-
|---------|-----------------|
|
|
767
|
-
| TUI `Real` column | Inline composite per row (`โ` when insufficient) |
|
|
768
|
-
| TUI `W` / `Shift+W` | Sort by real-world score / Runtime Report overlay |
|
|
769
|
-
| Web Dashboard | "Runtime Telemetry" cards with animated success-rate bars |
|
|
770
|
-
| `/stats.runtime` | `{ stats: { modelsTracked, totalCalls, modelsWithSignal }, models: {โฆ} }` |
|
|
771
|
-
|
|
772
|
-
**Privacy** โ the file is **local only** (`0600` perms) and holds metadata only: success, latency, tokens, error reason. No prompts, no responses, no content. Wipe the baseline with `--clear-runtime`.
|
|
773
|
-
|
|
774
|
-
### Features at a glance
|
|
775
|
-
|
|
776
|
-
- **Parallel pings** โ all models tested simultaneously via native `fetch`
|
|
777
|
-
- **AI benchmark columns** โ `Ctrl+A` / `Ctrl+U` split into AI Latency + TPS; optional Startup AI Speed Scan
|
|
778
|
-
- **Adaptive monitoring** โ 2s burst for 60s โ 10s normal โ 30s idle
|
|
779
|
-
- **Stability score** โ composite 0โ100 (p95, jitter, spike rate, uptime)
|
|
780
|
-
- **Smart ranking** โ top 3 highlighted ๐ฅ๐ฅ๐ฅ
|
|
781
|
-
- **Configured-only default** โ shows only providers you have keys for; keyless models still ping (๐ NO KEY)
|
|
782
|
-
- **Smart Recommend** โ questionnaire picks the best model for your task type
|
|
783
|
-
- **Smart Model Router** โ local OpenAI-compatible daemon with model sets, failover, circuit breakers, health probes, token stats
|
|
784
|
-
- **Playground chat** โ multi-turn chat with the router on every surface
|
|
785
|
-
- **โก๏ธ Command Palette** โ `Ctrl+P` fuzzy action launcher
|
|
786
|
-
- **Install Endpoints** โ push a full provider catalog into any tool's config
|
|
787
|
-
- **Missing-tool bootstrap** โ detect absent CLIs, offer one-click install, resume the launch
|
|
788
|
-
- **Tool compatibility matrix** โ incompatible rows highlighted in dark red
|
|
789
|
-
- **Width guardrail** โ warning instead of a broken table in narrow terminals
|
|
790
|
-
- **Mandatory self-update** โ checks npm on startup and auto-installs; falls back to a red warning if install fails twice
|
|
791
|
-
- **Extended benchmark catalog** โ `src/data/benchmarks.json` layers Coding/Math/Agentic/Reasoning/MMLU-Pro/GPQA/HLE on top of `sources.js` (footer: `๐ bench 49 (2026-07-25)`)
|
|
792
|
-
- **Live `models.dev` enrichment + drift detection** โ community catalog overlaid in the background (footer: `๐ก 102 live ยท 62 curated`); `--check-drift` prints a drift report
|
|
193
|
+
---
|
|
793
194
|
|
|
794
|
-
|
|
195
|
+
## ๐ Agent Extensions
|
|
795
196
|
|
|
796
|
-
|
|
197
|
+
- **OpenCode plugin** (`fcm-opencode`, beta): `/fcm` scans and ranks, `/fcm 1` switches models, `/fcm rescan` forces a fresh scan. Install: [`packages/fcm-opencode/README.md`](./packages/fcm-opencode/README.md)
|
|
198
|
+
- **Pi extension** (`fcm-pi`, beta): silent by default, `/fcm` re-scans and lets you pick, `/fcm-list` shows a ranked table, error-triggered picker on 4xx/5xx. Install: [`packages/fcm-pi/README.md`](./packages/fcm-pi/README.md)
|
|
199
|
+
- **Shared core** (`fcm-agent-core`): one scan/rank/cache engine for both adapters, with a cross-tool cache and daemon integration. API: [`packages/fcm-agent-core/README.md`](./packages/fcm-agent-core/README.md)
|
|
797
200
|
|
|
798
201
|
---
|
|
799
202
|
|
|
800
203
|
## ๐ Contributing
|
|
801
204
|
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
**Q: How accurate are the latency numbers?**
|
|
805
|
-
A: Real round-trip times measured by your machine. Results depend on your network and provider load at that moment.
|
|
806
|
-
|
|
807
|
-
**Q: Can I add a new provider?**
|
|
808
|
-
A: Yes โ see [`sources.js`](./sources.js) for the model catalog format.
|
|
205
|
+
Issues, PRs and new provider integrations are welcome. To add a provider, see the format in [`sources.js`](./sources.js) and re-run `node scripts/generate-provider-table.mjs` so [`docs/providers.md`](./docs/providers.md) stays in sync. Latency numbers are real round-trip times from your machine.
|
|
809
206
|
|
|
810
|
-
โ [Development guide](./docs/development.md) ยท [Config reference](./docs/config.md) ยท [
|
|
207
|
+
โ [Development guide](./docs/development.md) ยท [Config reference](./docs/config.md) ยท [Sync-set](./docs/sync-set.md) ยท [Contributors](./CONTRIBUTORS.md)
|
|
811
208
|
|
|
812
209
|
---
|
|
813
210
|
|
|
814
|
-
## โ๏ธ Model Licensing
|
|
211
|
+
## โ๏ธ Model Licensing
|
|
815
212
|
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
| License | Models | Commercial Output |
|
|
819
|
-
|---------|--------|:-----------------:|
|
|
820
|
-
| **Apache 2.0** | Qwen3/Qwen3.5/Qwen2.5 Coder, GPT-OSS 120B/20B, Devstral 2, Gemma 4 | โ
Unrestricted |
|
|
821
|
-
| **MIT / permissive model terms** | GLM Flash, MiniMax M2.x, Devstral 2 | โ
Provider/model terms apply |
|
|
822
|
-
| **Modified MIT** | Kimi K2/K2.6 (>100M MAU โ display "Kimi K2" branding) | โ
With attribution at scale |
|
|
823
|
-
| **Llama Community License** | Llama 3.3 70B, Llama 4 Scout/Maverick | โ
Attribution required. >700M MAU โ separate Meta license |
|
|
824
|
-
| **DeepSeek License** | DeepSeek V3/V3.1/V3.2/V4 family | โ
Use restrictions on model (no military, no harm) โ output is yours |
|
|
825
|
-
| **NVIDIA Nemotron License** | Nemotron Super/Ultra/Nano | โ
Updated Mar 2026, now near-Apache 2.0 permissive |
|
|
826
|
-
| **MiniMax Model License** | MiniMax M2, M2.5, M3 | โ
Royalty-free, non-exclusive. Prohibited-uses policy applies to model |
|
|
827
|
-
| **Proprietary / hosted API terms** | Gemini, GitHub Models, Mistral/Codestral, OpenRouter-hosted models | โ
Provider ToS applies |
|
|
828
|
-
| **OpenCode Zen** | Big Pickle, GPT 5 Nano, MiniMax M3 Free, Nemotron 3 Super Free, HY3/Ling/Trinity previews | โ
Per OpenCode Zen ToS |
|
|
829
|
-
|
|
830
|
-
**Key points:** (1) generated code is yours; (2) Apache 2.0 / permissive families (Qwen, GLM Flash, GPT-OSS, Devstral, Gemma) are the lowest-friction; (3) Llama requires "Built with Llama" attribution, >700M MAU needs a Meta license; (4) DeepSeek / MiniMax have use-restriction policies that govern the model, not your output; (5) API-served models grant output ownership under their current ToS.
|
|
831
|
-
|
|
832
|
-
> โ ๏ธ This is a summary, not legal advice. License terms can change โ always verify on the model's official page before making legal decisions.
|
|
213
|
+
You own the generated output: the code and text these models produce is yours to use commercially under current provider terms. The licenses below govern the model weights, not your output: Apache 2.0 (Qwen, GPT-OSS, Devstral, Gemma), MIT / permissive (GLM Flash, MiniMax), Modified MIT (Kimi K2), Llama Community License (attribution required), DeepSeek and NVIDIA Nemotron licenses, and hosted-API terms (Gemini, Mistral, OpenRouter-hosted). Verify on the model's official page before making legal decisions; this is a summary, not legal advice.
|
|
833
214
|
|
|
834
215
|
---
|
|
835
216
|
|
|
836
217
|
## ๐ Telemetry
|
|
837
218
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
| Method | How |
|
|
841
|
-
|--------|-----|
|
|
842
|
-
| CLI flag | `free-coding-models --no-telemetry` |
|
|
843
|
-
| Env var | `FREE_CODING_MODELS_TELEMETRY=0` (also `false` / `off`) |
|
|
219
|
+
FCM collects **anonymous** usage telemetry (app version, tool mode, OS, terminal family, a random install ID). No personal information, API keys, prompts, source code, or file paths ever leave your machine. Disable with `--no-telemetry` or `FREE_CODING_MODELS_TELEMETRY=0`.
|
|
844
220
|
|
|
845
221
|
---
|
|
846
222
|
|
|
847
223
|
## ๐ก๏ธ Security & Trust
|
|
848
224
|
|
|
849
|
-
<p align="center">
|
|
850
|
-
<img src="https://img.shields.io/badge/dependencies-1-76b900?logo=npm" alt="1 dependency">
|
|
851
|
-
<img src="https://img.shields.io/badge/provenance-sigstore-blueviolet?logo=signstore" alt="npm provenance">
|
|
852
|
-
<img src="https://img.shields.io/badge/supply_chain-verified-brightgreen" alt="supply chain verified">
|
|
853
|
-
</p>
|
|
854
|
-
|
|
855
225
|
| Signal | Status |
|
|
856
226
|
|--------|--------|
|
|
857
227
|
| **npm Provenance** | โ
Sigstore-signed |
|
|
858
228
|
| **SBOM** | โ
Attached to every GitHub Release |
|
|
859
|
-
| **Dependencies** | โ
|
|
860
|
-
| **
|
|
861
|
-
| **
|
|
862
|
-
| **Code Owners** | โ
[`CODEOWNERS`](CODEOWNERS) โ all changes require maintainer review |
|
|
863
|
-
| **Dependabot** | โ
Weekly automated updates |
|
|
864
|
-
| **Audit CI** | โ
`npm audit` on every push/PR + weekly scan |
|
|
229
|
+
| **Dependencies** | โ
Small, pure JavaScript (chalk for the TUI; socket.io + UI libs for the dashboard), no native builds |
|
|
230
|
+
| **Security Policy** | โ
[`SECURITY.md`](./SECURITY.md) |
|
|
231
|
+
| **Dependabot + `npm audit` CI** | โ
Weekly updates, scan on every push |
|
|
865
232
|
| **License** | โ
MIT |
|
|
866
233
|
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
**What this tool does NOT do:** โ never sends your API keys, code, or personal data to any third party ยท โ never installs or executes arbitrary code beyond `chalk` ยท โ never modifies files outside its own config dir ยท โ never requires `sudo`, root, or elevated permissions.
|
|
870
|
-
|
|
871
|
-
> To report a vulnerability, see [`SECURITY.md`](SECURITY.md).
|
|
234
|
+
Keys live locally in `~/.free-coding-models.json` (`0600`) and are only ever sent to the matching provider endpoint. FCM never requires sudo and never executes arbitrary remote code. To report a vulnerability, see [`SECURITY.md`](./SECURITY.md).
|
|
872
235
|
|
|
873
236
|
---
|
|
874
237
|
|
|
@@ -884,152 +247,18 @@ A: Yes โ see [`sources.js`](./sources.js) for the model catalog format.
|
|
|
884
247
|
|
|
885
248
|
---
|
|
886
249
|
|
|
887
|
-
##
|
|
250
|
+
## Contributors
|
|
888
251
|
|
|
889
|
-
|
|
252
|
+
Created and maintained by [Vanessa Depraute](https://vanessadepraute.dev) ([@vava-nessa](https://github.com/vava-nessa)), with contributions from [@erwinh22](https://github.com/erwinh22), [@whit3rabbit](https://github.com/whit3rabbit), [@skylaweber](https://github.com/skylaweber), [@PhucTruong-ctrl](https://github.com/PhucTruong-ctrl), [@chindris-mihai-alexandru](https://github.com/chindris-mihai-alexandru), [@serajbaltu](https://github.com/serajbaltu), [@stgreenb](https://github.com/stgreenb), [@MoriDanWork](https://github.com/MoriDanWork), [@fan92rus](https://github.com/fan92rus), [@Muhammad95959](https://github.com/Muhammad95959), [@FaintFlower](https://github.com/FaintFlower), [@lehneres](https://github.com/lehneres), [@ia-S-on](https://github.com/ia-S-on) and [@bangla24bdrang-lab](https://github.com/bangla24bdrang-lab).
|
|
890
253
|
|
|
891
|
-
|
|
254
|
+
โ Full credits and highlighted contributions: [`CONTRIBUTORS.md`](./CONTRIBUTORS.md)
|
|
892
255
|
|
|
893
256
|
---
|
|
894
257
|
|
|
895
|
-
##
|
|
896
|
-
|
|
897
|
-
<table align="center">
|
|
898
|
-
<tr>
|
|
899
|
-
<td align="center" width="120"><a href="https://github.com/vava-nessa"><img src="https://avatars.githubusercontent.com/u/5466264?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="vava-nessa"></a></td>
|
|
900
|
-
<td align="center" width="120"><a href="https://github.com/erwinh22"><img src="https://avatars.githubusercontent.com/u/6641858?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="erwinh22"></a></td>
|
|
901
|
-
<td align="center" width="120"><a href="https://github.com/whit3rabbit"><img src="https://avatars.githubusercontent.com/u/12357518?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="whit3rabbit"></a></td>
|
|
902
|
-
<td align="center" width="120"><a href="https://github.com/skylaweber"><img src="https://avatars.githubusercontent.com/u/172871734?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="skylaweber"></a></td>
|
|
903
|
-
<td align="center" width="120"><a href="https://github.com/PhucTruong-ctrl"><img src="https://avatars.githubusercontent.com/u/PhucTruong-ctrl.png?s=80" width="80" height="80" style="border-radius:50%" alt="PhucTruong-ctrl"></a></td>
|
|
904
|
-
<td align="center" width="120"><a href="https://github.com/chindris-mihai-alexandru"><img src="https://avatars.githubusercontent.com/u/12643176?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="chindris-mihai-alexandru"></a></td>
|
|
905
|
-
<td align="center" width="120"><a href="https://github.com/serajbaltu"><img src="https://avatars.githubusercontent.com/u/90699173?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="serajbaltu"></a></td>
|
|
906
|
-
<td align="center" width="120"><a href="https://github.com/stgreenb"><img src="https://avatars.githubusercontent.com/u/18483964?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="stgreenb"></a></td>
|
|
907
|
-
<td align="center" width="120"><a href="https://github.com/MoriDanWork"><img src="https://avatars.githubusercontent.com/u/55363096?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="MoriDanWork"></a></td>
|
|
908
|
-
<td align="center" width="120"><a href="https://github.com/fan92rus"><img src="https://avatars.githubusercontent.com/u/13201333?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="fan92rus"></a></td>
|
|
909
|
-
<td align="center" width="120"><a href="https://github.com/Muhammad95959"><img src="https://avatars.githubusercontent.com/u/75130655?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="Muhammad95959"></a></td>
|
|
910
|
-
<td align="center" width="120"><a href="https://github.com/FaintFlower"><img src="https://avatars.githubusercontent.com/u/310248465?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="FaintFlower"></a></td>
|
|
911
|
-
<td align="center" width="120"><a href="https://github.com/lehneres"><img src="https://avatars.githubusercontent.com/u/7437288?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="lehneres"></a></td>
|
|
912
|
-
<td align="center" width="120"><a href="https://github.com/ia-S-on"><img src="https://avatars.githubusercontent.com/u/200600946?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="ia-S-on"></a></td>
|
|
913
|
-
<td align="center" width="120"><a href="https://github.com/bangla24bdrang-lab"><img src="https://avatars.githubusercontent.com/u/321290409?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="bangla24bdrang-lab"></a></td>
|
|
914
|
-
</tr>
|
|
915
|
-
<tr>
|
|
916
|
-
<td align="center"><a href="https://github.com/vava-nessa"><sub><b>vava-nessa</b></sub></a></td>
|
|
917
|
-
<td align="center"><a href="https://github.com/erwinh22"><sub><b>erwinh22</b></sub></a></td>
|
|
918
|
-
<td align="center"><a href="https://github.com/whit3rabbit"><sub><b>whit3rabbit</b></sub></a></td>
|
|
919
|
-
<td align="center"><a href="https://github.com/skylaweber"><sub><b>skylaweber</b></sub></a></td>
|
|
920
|
-
<td align="center"><a href="https://github.com/PhucTruong-ctrl"><sub><b>PhucTruong-ctrl</b></sub></a></td>
|
|
921
|
-
<td align="center"><a href="https://github.com/chindris-mihai-alexandru"><sub><b>chindris-mihai-alexandru</b></sub></a></td>
|
|
922
|
-
<td align="center"><a href="https://github.com/serajbaltu"><sub><b>serajbaltu</b></sub></a></td>
|
|
923
|
-
<td align="center"><a href="https://github.com/stgreenb"><sub><b>stgreenb</b></sub></a></td>
|
|
924
|
-
<td align="center"><a href="https://github.com/MoriDanWork"><sub><b>MoriDanWork</b></sub></a></td>
|
|
925
|
-
<td align="center"><a href="https://github.com/fan92rus"><sub><b>fan92rus</b></sub></a></td>
|
|
926
|
-
<td align="center"><a href="https://github.com/Muhammad95959"><sub><b>Muhammad95959</b></sub></a></td>
|
|
927
|
-
<td align="center"><a href="https://github.com/FaintFlower"><sub><b>FaintFlower</b></sub></a></td>
|
|
928
|
-
<td align="center"><a href="https://github.com/lehneres"><sub><b>lehneres</b></sub></a></td>
|
|
929
|
-
<td align="center"><a href="https://github.com/ia-S-on"><sub><b>ia-S-on</b></sub></a></td>
|
|
930
|
-
<td align="center"><a href="https://github.com/bangla24bdrang-lab"><sub><b>bangla24bdrang-lab</b></sub></a></td>
|
|
931
|
-
</tr>
|
|
932
|
-
<tr>
|
|
933
|
-
<td align="center" colspan="15"><sub>๐ก๏ธ <b>fan92rus</b> โ Windows path traversal fix (<code>path.sep</code>)</sub></td>
|
|
934
|
-
</tr>
|
|
935
|
-
<tr>
|
|
936
|
-
<td align="center" colspan="15"><sub>๐ <b>Muhammad95959</b> โ <code>--config-dir</code> flag & XDG support</sub></td>
|
|
937
|
-
</tr>
|
|
938
|
-
<tr>
|
|
939
|
-
<td align="center" colspan="15"><sub>โญ <b>FaintFlower</b> โ Star History chart mirror fix</sub></td>
|
|
940
|
-
</tr>
|
|
941
|
-
<tr>
|
|
942
|
-
<td align="center" colspan="15"><sub>๐ <b>lehneres</b> โ Proxmox VE installation scripts</sub></td>
|
|
943
|
-
</tr>
|
|
944
|
-
<tr>
|
|
945
|
-
<td align="center" colspan="15"><sub>๐ฉ๏ธ <b>ia-S-on</b> โ Cloudflare <code>{account_id}</code> env resolution in launch paths</sub></td>
|
|
946
|
-
</tr>
|
|
947
|
-
<tr>
|
|
948
|
-
<td align="center" colspan="15"><sub>๐ฌ <b>bangla24bdrang-lab</b> โ OrcaRouter provider integration</sub></td>
|
|
949
|
-
</tr>
|
|
950
|
-
</table>
|
|
258
|
+
## ๐ More docs
|
|
951
259
|
|
|
952
|
-
|
|
260
|
+
[Providers](./docs/providers.md) ยท [TUI](./docs/tui.md) ยท [Web Dashboard](./docs/web-dashboard.md) ยท [Router](./docs/router.md) ยท [Flags](./docs/flags.md) ยท [Integrations](./docs/integrations.md) ยท [Stability & columns](./docs/stability.md) ยท [Sync-set](./docs/sync-set.md) ยท [Config](./docs/config.md) ยท [Development](./docs/development.md) ยท [Other free AI resources](./docs/resources.md)
|
|
261
|
+
|
|
262
|
+
## License
|
|
953
263
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
Curated resources kept **outside** the active CLI catalog โ IDE extensions, coding agents, GitHub lists, and providers that are useful but not clean enough for the core free-provider table.
|
|
957
|
-
|
|
958
|
-
### ๐ Awesome Lists (curated by the community)
|
|
959
|
-
|
|
960
|
-
| Resource | What it is |
|
|
961
|
-
|----------|------------|
|
|
962
|
-
| [cheahjs/free-llm-api-resources](https://github.com/cheahjs/free-llm-api-resources) (18.4k โญ) | Comprehensive list of free LLM API providers with rate limits |
|
|
963
|
-
| [mnfst/awesome-free-llm-apis](https://github.com/mnfst/awesome-free-llm-apis) (2.1k โญ) | Permanent free LLM API tiers organized by provider |
|
|
964
|
-
| [inmve/free-ai-coding](https://github.com/inmve/free-ai-coding) (648 โญ) | Pro-grade AI coding tools side-by-side โ limits, models, CC requirements |
|
|
965
|
-
| [amardeeplakshkar/awesome-free-llm-apis](https://github.com/amardeeplakshkar/awesome-free-llm-apis) | Additional free LLM API resources |
|
|
966
|
-
|
|
967
|
-
### ๐ฅ๏ธ AI-Powered IDEs with Free Tiers
|
|
968
|
-
|
|
969
|
-
| IDE | Free tier | Credit card |
|
|
970
|
-
|-----|-----------|-------------|
|
|
971
|
-
| [Qwen Code](https://github.com/QwenLM/qwen-code) | 2,000 requests/day | No |
|
|
972
|
-
| [Jules](https://jules.google/) | 15 tasks/day | No |
|
|
973
|
-
| [AWS Kiro](https://kiro.dev/) | 50 credits/month | No |
|
|
974
|
-
| [Trae](https://trae.ai/) | 10 fast + 50 slow requests/month | No |
|
|
975
|
-
| [Codeium](https://codeium.com/) | Unlimited forever, basic models | No |
|
|
976
|
-
| [JetBrains AI Assistant](https://www.jetbrains.com/ai/) | Unlimited completions + local models | No |
|
|
977
|
-
| [Continue.dev](https://www.continue.dev/) | Free VS Code/JetBrains extension, local models via Ollama | No |
|
|
978
|
-
| [Warp](https://warp.dev/) | 150 credits/month (first 2 months), then 75/month | No |
|
|
979
|
-
| [Amazon Q Developer](https://aws.amazon.com/q/developer/) | 50 agentic requests/month | Required |
|
|
980
|
-
| [Windsurf](https://windsurf.com/) | 25 prompt credits/month | Required |
|
|
981
|
-
| [Kilo Code](https://kilocode.ai/) | Up to $25 signup credits (one-time) | Required |
|
|
982
|
-
| [Tabnine](https://www.tabnine.com/) | Basic completions + chat (limited) | Required |
|
|
983
|
-
| [SuperMaven](https://www.supermaven.com/) | Basic suggestions, 1M token context | Required |
|
|
984
|
-
|
|
985
|
-
### ๐ API Providers with Permanent Free Tiers
|
|
986
|
-
|
|
987
|
-
| Provider | Free limits | Notable models |
|
|
988
|
-
|----------|-------------|----------------|
|
|
989
|
-
| [Vercel AI Gateway](https://vercel.com/ai-gateway) | $5 credits every 30 days (no card) + explicit $0 models | MiniMax M3 (1M ctx), Laguna S 2.1, MiniMax M2.7, Ling 3.0 Flash Fin |
|
|
990
|
-
| [OrcaRouter](https://www.orcarouter.ai) | Free Hacker tier, zero token markup, 3 API keys | DeepSeek V4 Flash (Free), Tencent Hy3 (Free), Qwen3.8 27B (Free) |
|
|
991
|
-
| [OpenRouter](https://openrouter.ai/keys) | 50 req/day, 1K/day with $10 purchase | Qwen3-Coder, Tencent HY3, Laguna, Gemma 4 |
|
|
992
|
-
| [Google AI Studio](https://aistudio.google.com/apikey) | Varies by Gemini model and region | Gemini 3.8 Flash, Gemini 2.5 Pro |
|
|
993
|
-
| [NVIDIA NIM](https://build.nvidia.com) | ~40 RPM | MiniMax M2.7, GLM 5.1, Kimi K2.6 |
|
|
994
|
-
| [GitHub Models](https://models.github.ai) | Depends on GitHub/Copilot tier | GPT-4.1, DeepSeek V3, Llama 4 |
|
|
995
|
-
| [Groq](https://console.groq.com/keys) | 1Kโ14.4K req/day (model-dependent) | Llama 3.3 70B, Llama 4 Scout, GPT-OSS |
|
|
996
|
-
| [Cerebras](https://cloud.cerebras.ai/) | 30 RPM, 1M tokens/day | Qwen3-235B, Llama 3.1 70B, GPT-OSS 120B |
|
|
997
|
-
| [Cohere](https://cohere.com/) | 20 RPM, 1K/month | Command R+, Aya Expanse 32B |
|
|
998
|
-
| [Mistral La Plateforme](https://console.mistral.ai/) | 1 req/s, 1B tokens/month | Mistral Large, Devstral, Magistral |
|
|
999
|
-
| [Cloudflare Workers AI](https://dash.cloudflare.com) | 10K neurons/day | Llama 3.3 70B, QwQ 32B, 47+ models |
|
|
1000
|
-
| [OVHcloud AI Endpoints](https://endpoints.ai.cloud.ovh.net) | 2 req/min/IP sandbox | GPT-OSS, Qwen3, Mistral |
|
|
1001
|
-
|
|
1002
|
-
### ๐งช Good candidates kept outside the core catalog
|
|
1003
|
-
|
|
1004
|
-
| Provider | Why it's not core |
|
|
1005
|
-
|----------|--------------------|
|
|
1006
|
-
| [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) | Useful gateway with included credits, but it's a router/billing layer, not a provider of permanently free models. |
|
|
1007
|
-
| [Cohere](https://cohere.com/) | Real evaluation key, but the allowance is small and the catalog isn't coding-first enough for the default TUI. |
|
|
1008
|
-
| [Ollama Cloud](https://ollama.com/pricing) | Interesting for light cloud usage, but closer to hosted Ollama capacity than a classic OpenAI-compatible free provider. |
|
|
1009
|
-
|
|
1010
|
-
### ๐ฐ Providers with Trial Credits
|
|
1011
|
-
|
|
1012
|
-
| Provider | Credits | Duration |
|
|
1013
|
-
|----------|---------|----------|
|
|
1014
|
-
| [Hyperbolic](https://app.hyperbolic.ai/) | $1 | Trial/promo |
|
|
1015
|
-
| [Fireworks](https://fireworks.ai/) | $1 | Trial/promo |
|
|
1016
|
-
| [Nebius](https://tokenfactory.nebius.com/) | $1 | Permanent |
|
|
1017
|
-
| [SambaNova Cloud](https://cloud.sambanova.ai/) | $5 | 3 months |
|
|
1018
|
-
| [AI21](https://studio.ai21.com/) | $10 | 3 months |
|
|
1019
|
-
| [Upstage](https://console.upstage.ai/) | $10 | 3 months |
|
|
1020
|
-
| [NLP Cloud](https://nlpcloud.com/home) | $15 | Permanent |
|
|
1021
|
-
| [Alibaba DashScope](https://bailian.console.alibabacloud.com/) | 1M tokens/model | 90 days |
|
|
1022
|
-
| [Scaleway](https://console.scaleway.com/generative-api/models) | 1M tokens | Permanent |
|
|
1023
|
-
| [Modal](https://modal.com) | $5/month | Monthly |
|
|
1024
|
-
| [Inference.net](https://inference.net) | $1 (+ $25 on survey) | Permanent |
|
|
1025
|
-
| [Novita](https://novita.ai/) | $0.5 | 1 year |
|
|
1026
|
-
|
|
1027
|
-
These trial-credit providers are deliberately not treated as core unless their free allowance is practical for recurring coding use.
|
|
1028
|
-
|
|
1029
|
-
### ๐ Free with Education / Developer Programs
|
|
1030
|
-
|
|
1031
|
-
| Program | What you get |
|
|
1032
|
-
|---------|--------------|
|
|
1033
|
-
| [GitHub Student Pack](https://education.github.com/pack) | Free Copilot Pro for students (verify with .edu email) |
|
|
1034
|
-
| [GitHub Copilot Free](https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot) | 50 chat + 2,000 completions/month in VS Code |
|
|
1035
|
-
| [Copilot Pro for teachers/maintainers](https://docs.github.com/en/copilot/how-tos/manage-your-account/get-free-access-to-copilot-pro) | Free Copilot Pro for open-source maintainers & educators |
|
|
264
|
+
[MIT](./LICENSE)
|