Free AI coding agent for VS Code. Use your existing web AI accounts (DeepSeek, ChatGPT, Claude, Gemini, Mistral, Qwen) or a local Ollama model. No API keys, no subscriptions, no costs.

Unlike other AI coding agents, Freekit works with your existing web AI accounts:
| Feature | Freekit | Cline | Cursor | Copilot |
|---|---|---|---|---|
| Web AI providers (no API keys) | ✅ 6 | ❌ | ❌ | ❌ |
| Cost | $0 | API costs | $20/mo | $10-19/mo |
| Local Ollama (hardware-aware) | ✅ | ✅ | ⚠️ | ❌ |
| Works with free accounts | ✅ | ❌ | ❌ | ❌ |
| Self-maintaining | ✅ | ❌ | ❌ | ❌ |
| Native VS Code diff | ✅ | ✅ | ✅ | ❌ |
Perfect for:
tsc --noEmit / astro check / build); failures go back to the AI (up to 3 attempts) and are rolled back if they can't be fixednpm run dev, vite, nodemon, … start in a dedicated VS Code terminal, and the AI gets the live URL immediatelyWrite a Python function for factorialFirst time? VS Code may show a blue "Restricted Mode" banner. Click Trust to enable full functionality (Freekit writes files and runs commands — this is required).
Freekit connects to your existing web AI sessions via browser automation:
Everything is local. No middle server. No data sent to third parties.
freekit.reporting.enabledFreekit writes files, runs terminal commands and controls a browser — it needs a trusted workspace.
On first launch, VS Code shows a blue "Restricted Mode" banner. Click Trust to enable full functionality.
In Restricted Mode (no trust):
read_file, search_files, etc.)You can also run Freekit: Trust This Workspace from the Command Palette.
Additional safeguards:
| Command | What it does |
|---|---|
Freekit: Trust This Workspace | Grant Workspace Trust to the current folder (opens the native dialog) — unlocks file writes, shell commands, git changes and MCP tools |
Freekit: Open Browser | Launch / connect the dedicated Chrome |
Freekit: Close Browser | Really close it (graceful CDP close + PID fallback) |
Freekit: Show Chrome | Bring the hidden Chrome window back on screen and focus it |
Freekit: Show Provider Status | Detailed report: CDP port, DeepSeek login, Ollama models |
Freekit: Clear No-Ask File List | Forget the files you marked "Accept (don't ask again)" |
Freekit: Reset Repaired Selectors | Forget auto-repaired selectors, go back to selectors.json |
Freekit: Update Selectors | Fetch and apply the selector config from the configured Gist |
Freekit: Diagnostics | Environment check: browser, CDP port, profile, Ollama, selectors, MCP |
Freekit: MCP Servers | Manage MCP servers: status, restart/stop, list tools, open/create .vscode/mcp.json |
Freekit: Setup Local Whisper | Download the prebuilt whisper.cpp binaries + ggml-base model into global storage (one time, ~160 MB) for offline voice input |
Freekit: Install Ollama | Open the official Ollama download page (https://ollama.com/download); if a binary is already installed but the server isn't running, it just tells you to run ollama serve |
Freekit: Stop Dev Servers | Stop every dev server started by the AI (sends Ctrl+C to its terminal; if the process ignores it, the terminal is closed) |
Freekit: Index Workspace | Build / update the local semantic index (embeddings via Ollama, incremental, cancellable, with progress) |
Freekit: Index Status | Show the index: model, dimensions, indexed files, chunks, storage file, size and last update |
Freekit: Clear Index | Delete the workspace's semantic index from globalStorage (confirmation required) |
Freekit: Reporting Status | Show the reporting integration: registration, endpoint, selectors revision, last health check / fetch — with shortcuts to run a check now or reset the identity |
Freekit: Run Selector Health Check | Immediately check the selectors of the providers that have a tab open (repair locally, report only if the repair fails) |
Freekit: Reset Reporting Registration | Remove the local reporting identity (apiKey + installation id); the extension registers as a new installation on the next start |
| Setting | Default | Description |
|---|---|---|
freekit.provider | deepseek | Active provider (auto = browser provider → Ollama fallback) |
freekit.ollamaModel | qwen2.5-coder:7b | Model used in local mode |
freekit.ollamaUrl | http://localhost:11434 | Ollama server URL |
freekit.cdpPort | 9222 | CDP port used to launch / connect Chrome |
freekit.chromePath | (empty) | Manual Chrome/Edge path (empty = auto-detect) |
freekit.messageTimeoutMinutes | 20 | Total time budget for one agentic message |
freekit.autoVerify | true | Check the project after every file write (astro check / tsc --noEmit / build); failures trigger up to 3 AI repair attempts, then an automatic rollback to the last verified state |
freekit.promptCheckpoints | true | Create a git checkpoint before every prompt and show the ⟲ restore button on each user message |
freekit.autoInitGit | true | Run git init (plus a minimal .gitignore, if missing) when the project folder isn't a git repo yet, so checkpoints / ⟲ restore work out of the box |
freekit.selectorsUrl | (empty) | Raw URL of a public Gist with selectors.json (version + providers); empty = remote selectors disabled |
freekit.checkSelectorsOnStartup | true | Look for a newer selector config at startup — at most once every 24 h (only when freekit.selectorsUrl is set) |
freekit.humanTyping | true | Type messages with human timing (random delays, punctuation pauses, bursts); off = instant insertion |
freekit.humanBehavior | true | Small mouse moves before clicks + occasional gentle scroll (anti-detect) |
freekit.mutationObserver | false | Experimental: end-of-generation detection via MutationObserver (fast, low CPU). Can be flaky when Chrome runs offscreen — JS is suspended in invisible windows; default off = reliable 500 ms polling |
freekit.autoAcceptPopups | true | Automatically accept consent popups (cookie / terms / “OK” / “Got it”). Safe exact-match on three confidence tiers; refusal wording (Reject / Only necessary / Customize / Not now) is never clicked; max 3 clicks per pass |
freekit.sttLanguage | ro-RO | Language for the 🎤 voice input (local Whisper) — ro-RO (Romanian) or en-US (English); applied at the next transcription |
freekit.whisperCliPath | (empty) | Path to whisper-cli (whisper.cpp) for offline voice input; empty = auto-detect (global storage → classic whisper.cpp locations → PATH) |
freekit.whisperModelPath | (empty) | Path to the Whisper ggml model (e.g. ggml-base.bin); empty = auto-detect |
freekit.whisperTimeoutSeconds | 180 | Timeout for one Whisper transcription (10–1200 s) |
freekit.aiSelectorFinder | true | AI selector-discovery fallback: when the classic healer finds nothing, a cleaned DOM snapshot is analyzed by local Ollama; validated selectors are saved to selectors-user.json |
freekit.aiFinderTimeoutSeconds | 45 | Timeout (5–300 s) for the AI selector analysis |
freekit.mcpEnabled | true | Start the configured MCP servers and expose their tools to the AI (mcp_<server>_<tool>) |
freekit.mcpServers | {} | MCP servers to launch (stdio), e.g. {"filesystem": {"command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]}} |
freekit.mcpToolTimeoutSeconds | 60 | Timeout for a single MCP tool call (tools/call) |
freekit.semanticIndex.enabled | true | Enable semantic code search (search_semantic tool + index commands) |
freekit.semanticIndex.model | nomic-embed-text | Ollama embedding model for the index (changing it invalidates the index) |
freekit.semanticIndex.onSave | false | Re-index a file automatically (incremental, debounced) when it is saved |
freekit.semanticIndex.maxFileKb | 256 | Skip files larger than this (KB) when indexing |
freekit.semanticIndex.topK | 8 | Number of chunks returned by search_semantic (1–25) |
freekit.semanticIndex.exclude | [] | Extra directory/file names to exclude from indexing |
freekit.reporting.enabled | true | Master switch for the reporting-server integration (anonymous registration + selector health checks + selector fixes) |
freekit.reporting.endpoint | https://api.builderweb.app | Base URL of the reporting server |
freekit.reporting.shareDomSnapshot | false | Also send a cleaned DOM snapshot (scripts/styles/media/input values stripped) when reporting a broken selector |
freekit.reporting.healthCheck | true | Periodically verify the selectors of providers that already have a tab open; repair locally first, report only if the repair fails |
freekit.reporting.healthCheckIntervalHours | 6 | Hours between two automatic selector health checks |
freekit.reporting.selectorsIntervalHours | 24 | Hours between two automatic fetches of repaired selectors from the server |
Freekit can find code by meaning instead of exact text — useful for questions like "where do we retry a failed upload?" when you don't know the identifier to grep for.
Freekit: Index Workspace once (needs Ollama running; the embedding model is pulled with ollama pull nomic-embed-text).search_semantic(query) and gets back the best-matching chunks with path:startLine-endLine, a similarity score and a snippet — then it can read_file the ones that matter.How it works:
freekit.ollamaUrl); the vector store is a single JSON file under <globalStorage>/semantic-index/ (keyed per workspace). No new npm dependencies, no cloud.freekit.semanticIndex.onSave to keep the index fresh automatically (debounced 1.5 s).node_modules, .git, out, dist, build, .next, coverage, virtualenvs, target, caches, lockfiles, source maps, minified and binary files are never indexed; extend the list with freekit.semanticIndex.exclude.search_semantic returns a clear message telling the AI to fall back to search_files (or you to run the index command), so nothing breaks.Selector repairs can reach every client without shipping a new extension version:
src/selectors.json and bump version (updated / changelog are optional but recommended).selectors.json in a public GitHub Gist.freekit.selectorsUrl to the Gist raw URL, e.g. https://gist.githubusercontent.com/<user>/<id>/raw/selectors.json.Freekit then checks on startup — rate-limited to once every 24 h — and on demand via Freekit: Update Selectors, applying the config only when its version is newer than the active one. The update is validated, merged over the bundled config, cached locally, and local auto-repairs for the slots it touches are replaced by the curated fix. Any failure (invalid JSON, HTTP error, timeout) leaves the current config in place.
Freekit can feed a central reporting server (https://api.builderweb.app by default) so a site redesign discovered on one machine turns into a fix for everybody — without waiting for an extension release.
apiKey (POST /api/v1/extensions/register). The call is idempotent: the key is cached and re-used until you run Freekit: Reset Reporting Registration.freekit.reporting.healthCheckIntervalHours) — for every provider that already has a tab open in the Freekit Chrome profile, the input and newChat selectors are verified. Chrome is never started just for this. Broken slots are repaired locally first (fingerprint healer → AI finder); only if that also fails is a report sent (POST /api/v1/reports) with the domain, the failing selector, the failure type (not_found / hidden) and the page URL.freekit.reporting.selectorsIntervalHours) — the extension asks GET /api/v1/selectors?since=<revision>, applies anything new (validated by the same fragile/blacklist rules as local repairs) and remembers the revision, so a 304 is the normal, cheap answer.freekit.reporting.shareDomSnapshot). Set freekit.reporting.enabled to false to opt out completely.Use Freekit: Reporting Status for the current state (registration, revision, last check), Freekit: Run Selector Health Check to run a check immediately (e.g. right after a site redesign) and Freekit: Reset Reporting Registration to start over with a new identity.
Freekit ships a Model Context Protocol client: MCP servers give the agent extra tools (databases, browsers, APIs, file systems, …) beyond the built-in ones. Configure them once — they are launched with VS Code and their tools are exposed to the AI as mcp_<server>_<tool>.
.vscode/mcp.json (or to the freekit.mcpServers setting):{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
}
}
}
freekit.mcpEnabled, default on) and config edits are hot-reloaded. Use Freekit: MCP Servers to check status, restart/stop a server, or list its tools.Every MCP call shows an approval card (server, tool and arguments) before it runs — ⚡ auto-approve skips it like any other tool. Only the stdio transport is supported. A crashed or missing server is reported in the chat and in Freekit: Diagnostics.
"Could not find the input box"
→ Log in to the provider. Click Show Chrome in the ⋯ menu, sign in, then retry.
"Restricted Mode — some features disabled"
→ Click Trust in the blue banner at the top of VS Code.
"Ollama not running"
→ Install Ollama from ollama.com and run ollama serve.
Browser automation issues
→ Click Freekit: Reset Repaired Selectors and try again.
npm install
npm run compile # tsc → out/
npx @vscode/vsce package
code --install-extension freekit-2.4.6.vsix --force
Press F5 for an Extension Development Host.
Freekit is free — no API keys, no subscriptions. If it saves you time, you can buy me a coffee:
Proprietary. See LICENSE.txt.
Made by builderweb · Buy me a coffee
TypeScript
82.9%
JavaScript
8.6%
CSS
8.5%
Free AI coding agent for VS Code. Use your existing web AI accounts (DeepSeek, ChatGPT, Claude, Gemini, Mistral, Qwen) or a local Ollama model. No API keys, no subscriptions, no costs.

Unlike other AI coding agents, Freekit works with your existing web AI accounts:
| Feature | Freekit | Cline | Cursor | Copilot |
|---|---|---|---|---|
| Web AI providers (no API keys) | ✅ 6 | ❌ | ❌ | ❌ |
| Cost | $0 | API costs | $20/mo | $10-19/mo |
| Local Ollama (hardware-aware) | ✅ | ✅ | ⚠️ | ❌ |
| Works with free accounts | ✅ | ❌ | ❌ | ❌ |
| Self-maintaining | ✅ | ❌ | ❌ | ❌ |
| Native VS Code diff | ✅ | ✅ | ✅ | ❌ |
Perfect for:
tsc --noEmit / astro check / build); failures go back to the AI (up to 3 attempts) and are rolled back if they can't be fixednpm run dev, vite, nodemon, … start in a dedicated VS Code terminal, and the AI gets the live URL immediatelyWrite a Python function for factorialFirst time? VS Code may show a blue "Restricted Mode" banner. Click Trust to enable full functionality (Freekit writes files and runs commands — this is required).
Freekit connects to your existing web AI sessions via browser automation:
Everything is local. No middle server. No data sent to third parties.
freekit.reporting.enabledFreekit writes files, runs terminal commands and controls a browser — it needs a trusted workspace.
On first launch, VS Code shows a blue "Restricted Mode" banner. Click Trust to enable full functionality.
In Restricted Mode (no trust):
read_file, search_files, etc.)You can also run Freekit: Trust This Workspace from the Command Palette.
Additional safeguards:
| Command | What it does |
|---|---|
Freekit: Trust This Workspace | Grant Workspace Trust to the current folder (opens the native dialog) — unlocks file writes, shell commands, git changes and MCP tools |
Freekit: Open Browser | Launch / connect the dedicated Chrome |
Freekit: Close Browser | Really close it (graceful CDP close + PID fallback) |
Freekit: Show Chrome | Bring the hidden Chrome window back on screen and focus it |
Freekit: Show Provider Status | Detailed report: CDP port, DeepSeek login, Ollama models |
Freekit: Clear No-Ask File List | Forget the files you marked "Accept (don't ask again)" |
Freekit: Reset Repaired Selectors | Forget auto-repaired selectors, go back to selectors.json |
Freekit: Update Selectors | Fetch and apply the selector config from the configured Gist |
Freekit: Diagnostics | Environment check: browser, CDP port, profile, Ollama, selectors, MCP |
Freekit: MCP Servers | Manage MCP servers: status, restart/stop, list tools, open/create .vscode/mcp.json |
Freekit: Setup Local Whisper | Download the prebuilt whisper.cpp binaries + ggml-base model into global storage (one time, ~160 MB) for offline voice input |
Freekit: Install Ollama | Open the official Ollama download page (https://ollama.com/download); if a binary is already installed but the server isn't running, it just tells you to run ollama serve |
Freekit: Stop Dev Servers | Stop every dev server started by the AI (sends Ctrl+C to its terminal; if the process ignores it, the terminal is closed) |
Freekit: Index Workspace | Build / update the local semantic index (embeddings via Ollama, incremental, cancellable, with progress) |
Freekit: Index Status | Show the index: model, dimensions, indexed files, chunks, storage file, size and last update |
Freekit: Clear Index | Delete the workspace's semantic index from globalStorage (confirmation required) |
Freekit: Reporting Status | Show the reporting integration: registration, endpoint, selectors revision, last health check / fetch — with shortcuts to run a check now or reset the identity |
Freekit: Run Selector Health Check | Immediately check the selectors of the providers that have a tab open (repair locally, report only if the repair fails) |
Freekit: Reset Reporting Registration | Remove the local reporting identity (apiKey + installation id); the extension registers as a new installation on the next start |
| Setting | Default | Description |
|---|---|---|
freekit.provider | deepseek | Active provider (auto = browser provider → Ollama fallback) |
freekit.ollamaModel | qwen2.5-coder:7b | Model used in local mode |
freekit.ollamaUrl | http://localhost:11434 | Ollama server URL |
freekit.cdpPort | 9222 | CDP port used to launch / connect Chrome |
freekit.chromePath | (empty) | Manual Chrome/Edge path (empty = auto-detect) |
freekit.messageTimeoutMinutes | 20 | Total time budget for one agentic message |
freekit.autoVerify | true | Check the project after every file write (astro check / tsc --noEmit / build); failures trigger up to 3 AI repair attempts, then an automatic rollback to the last verified state |
freekit.promptCheckpoints | true | Create a git checkpoint before every prompt and show the ⟲ restore button on each user message |
freekit.autoInitGit | true | Run git init (plus a minimal .gitignore, if missing) when the project folder isn't a git repo yet, so checkpoints / ⟲ restore work out of the box |
freekit.selectorsUrl | (empty) | Raw URL of a public Gist with selectors.json (version + providers); empty = remote selectors disabled |
freekit.checkSelectorsOnStartup | true | Look for a newer selector config at startup — at most once every 24 h (only when freekit.selectorsUrl is set) |
freekit.humanTyping | true | Type messages with human timing (random delays, punctuation pauses, bursts); off = instant insertion |
freekit.humanBehavior | true | Small mouse moves before clicks + occasional gentle scroll (anti-detect) |
freekit.mutationObserver | false | Experimental: end-of-generation detection via MutationObserver (fast, low CPU). Can be flaky when Chrome runs offscreen — JS is suspended in invisible windows; default off = reliable 500 ms polling |
freekit.autoAcceptPopups | true | Automatically accept consent popups (cookie / terms / “OK” / “Got it”). Safe exact-match on three confidence tiers; refusal wording (Reject / Only necessary / Customize / Not now) is never clicked; max 3 clicks per pass |
freekit.sttLanguage | ro-RO | Language for the 🎤 voice input (local Whisper) — ro-RO (Romanian) or en-US (English); applied at the next transcription |
freekit.whisperCliPath | (empty) | Path to whisper-cli (whisper.cpp) for offline voice input; empty = auto-detect (global storage → classic whisper.cpp locations → PATH) |
freekit.whisperModelPath | (empty) | Path to the Whisper ggml model (e.g. ggml-base.bin); empty = auto-detect |
freekit.whisperTimeoutSeconds | 180 | Timeout for one Whisper transcription (10–1200 s) |
freekit.aiSelectorFinder | true | AI selector-discovery fallback: when the classic healer finds nothing, a cleaned DOM snapshot is analyzed by local Ollama; validated selectors are saved to selectors-user.json |
freekit.aiFinderTimeoutSeconds | 45 | Timeout (5–300 s) for the AI selector analysis |
freekit.mcpEnabled | true | Start the configured MCP servers and expose their tools to the AI (mcp_<server>_<tool>) |
freekit.mcpServers | {} | MCP servers to launch (stdio), e.g. {"filesystem": {"command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]}} |
freekit.mcpToolTimeoutSeconds | 60 | Timeout for a single MCP tool call (tools/call) |
freekit.semanticIndex.enabled | true | Enable semantic code search (search_semantic tool + index commands) |
freekit.semanticIndex.model | nomic-embed-text | Ollama embedding model for the index (changing it invalidates the index) |
freekit.semanticIndex.onSave | false | Re-index a file automatically (incremental, debounced) when it is saved |
freekit.semanticIndex.maxFileKb | 256 | Skip files larger than this (KB) when indexing |
freekit.semanticIndex.topK | 8 | Number of chunks returned by search_semantic (1–25) |
freekit.semanticIndex.exclude | [] | Extra directory/file names to exclude from indexing |
freekit.reporting.enabled | true | Master switch for the reporting-server integration (anonymous registration + selector health checks + selector fixes) |
freekit.reporting.endpoint | https://api.builderweb.app | Base URL of the reporting server |
freekit.reporting.shareDomSnapshot | false | Also send a cleaned DOM snapshot (scripts/styles/media/input values stripped) when reporting a broken selector |
freekit.reporting.healthCheck | true | Periodically verify the selectors of providers that already have a tab open; repair locally first, report only if the repair fails |
freekit.reporting.healthCheckIntervalHours | 6 | Hours between two automatic selector health checks |
freekit.reporting.selectorsIntervalHours | 24 | Hours between two automatic fetches of repaired selectors from the server |
Freekit can find code by meaning instead of exact text — useful for questions like "where do we retry a failed upload?" when you don't know the identifier to grep for.
Freekit: Index Workspace once (needs Ollama running; the embedding model is pulled with ollama pull nomic-embed-text).search_semantic(query) and gets back the best-matching chunks with path:startLine-endLine, a similarity score and a snippet — then it can read_file the ones that matter.How it works:
freekit.ollamaUrl); the vector store is a single JSON file under <globalStorage>/semantic-index/ (keyed per workspace). No new npm dependencies, no cloud.freekit.semanticIndex.onSave to keep the index fresh automatically (debounced 1.5 s).node_modules, .git, out, dist, build, .next, coverage, virtualenvs, target, caches, lockfiles, source maps, minified and binary files are never indexed; extend the list with freekit.semanticIndex.exclude.search_semantic returns a clear message telling the AI to fall back to search_files (or you to run the index command), so nothing breaks.Selector repairs can reach every client without shipping a new extension version:
src/selectors.json and bump version (updated / changelog are optional but recommended).selectors.json in a public GitHub Gist.freekit.selectorsUrl to the Gist raw URL, e.g. https://gist.githubusercontent.com/<user>/<id>/raw/selectors.json.Freekit then checks on startup — rate-limited to once every 24 h — and on demand via Freekit: Update Selectors, applying the config only when its version is newer than the active one. The update is validated, merged over the bundled config, cached locally, and local auto-repairs for the slots it touches are replaced by the curated fix. Any failure (invalid JSON, HTTP error, timeout) leaves the current config in place.
Freekit can feed a central reporting server (https://api.builderweb.app by default) so a site redesign discovered on one machine turns into a fix for everybody — without waiting for an extension release.
apiKey (POST /api/v1/extensions/register). The call is idempotent: the key is cached and re-used until you run Freekit: Reset Reporting Registration.freekit.reporting.healthCheckIntervalHours) — for every provider that already has a tab open in the Freekit Chrome profile, the input and newChat selectors are verified. Chrome is never started just for this. Broken slots are repaired locally first (fingerprint healer → AI finder); only if that also fails is a report sent (POST /api/v1/reports) with the domain, the failing selector, the failure type (not_found / hidden) and the page URL.freekit.reporting.selectorsIntervalHours) — the extension asks GET /api/v1/selectors?since=<revision>, applies anything new (validated by the same fragile/blacklist rules as local repairs) and remembers the revision, so a 304 is the normal, cheap answer.freekit.reporting.shareDomSnapshot). Set freekit.reporting.enabled to false to opt out completely.Use Freekit: Reporting Status for the current state (registration, revision, last check), Freekit: Run Selector Health Check to run a check immediately (e.g. right after a site redesign) and Freekit: Reset Reporting Registration to start over with a new identity.
Freekit ships a Model Context Protocol client: MCP servers give the agent extra tools (databases, browsers, APIs, file systems, …) beyond the built-in ones. Configure them once — they are launched with VS Code and their tools are exposed to the AI as mcp_<server>_<tool>.
.vscode/mcp.json (or to the freekit.mcpServers setting):{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
}
}
}
freekit.mcpEnabled, default on) and config edits are hot-reloaded. Use Freekit: MCP Servers to check status, restart/stop a server, or list its tools.Every MCP call shows an approval card (server, tool and arguments) before it runs — ⚡ auto-approve skips it like any other tool. Only the stdio transport is supported. A crashed or missing server is reported in the chat and in Freekit: Diagnostics.
"Could not find the input box"
→ Log in to the provider. Click Show Chrome in the ⋯ menu, sign in, then retry.
"Restricted Mode — some features disabled"
→ Click Trust in the blue banner at the top of VS Code.
"Ollama not running"
→ Install Ollama from ollama.com and run ollama serve.
Browser automation issues
→ Click Freekit: Reset Repaired Selectors and try again.
npm install
npm run compile # tsc → out/
npx @vscode/vsce package
code --install-extension freekit-2.4.6.vsix --force
Press F5 for an Extension Development Host.
Freekit is free — no API keys, no subscriptions. If it saves you time, you can buy me a coffee:
Proprietary. See LICENSE.txt.
Made by builderweb · Buy me a coffee
TypeScript
82.9%
JavaScript
8.6%
CSS
8.5%