Run Claude Code Locally with Gemma

Serve Gemma 4 E2B locally via llama.cpp and connect Claude Code to it.

Introduction

30 Second Summary

Cloud AI coding assistants are powerful, but they send your code to remote servers and charge per request. What if you could run the same interface entirely on your own machine, for free?

In this project, you will set up Claude Code to run locally using Google's Gemma 4 E2B model served through llama.cpp. No cloud API keys, no internet required for inference.

What You'll Build

A fully local Claude Code setup powered by Gemma 4 E2B running through llama.cpp's built-in Anthropic-compatible API endpoint.

By the end of this project, you'll have:

  • A configured llama.cpp server with RAM-optimized parameters for 8GB systems, including quantized KV cache and a tuned context window.
  • Claude Code connected to your local server and responding to coding prompts with tool calling support.
  • A reusable PowerShell launch script that starts the full local setup in one command.
  • Secret Mission: Configure the GitHub MCP server so Claude Code can review PRs, resolve conflicts, and update documentation from your local setup.

Are there any prerequisites?

You need a Windows PC with at least 8GB of RAM, basic familiarity with the command line, and Node.js already installed (Claude Code requires it). No GPU is needed.

Download llama.cpp and the Model

Before you can run a local AI coding assistant, you need two things: the server software that hosts the model, and the model itself.

In this step, you will download llama.cpp (the server) and Gemma 4 E2B (the AI model) onto your D: drive.

In this step, get ready to:
  • Download and extract the llama.cpp prebuilt binary.
  • Download the Gemma 4 E2B Q4_K_M model file from Hugging Face.
  • Verify both the binary and the model are ready to use.
Download and extract llama.cpp

llama.cpp is an open-source project that lets you run LLM models on your own hardware. It provides a server binary that exposes an API compatible with the Anthropic Messages format, which is exactly what Claude Code needs to connect.

  • Press the Windows key to open your search bar.
  • Type PowerShell and press Enter to open it.
  • Create the folder where llama.cpp will live by running this command:
New-Item -ItemType Directory -Path "D:\llama-cpp" -Force
  • Open the llama.cpp releases page in your browser by running:
Start-Process "https://github.com/ggml-org/llama.cpp/releases"
  • On the releases page, find the latest release at the top.
  • Scroll down to the Assets section.
  • Download the file with bin-win-cpu-x64.zip in its name.

Which file am I looking for?

The filename follows the pattern llama-b{version}-bin-win-cpu-x64.zip where the version number changes with each release.

For example, you might see llama-b8608-bin-win-cpu-x64.zip or a newer version. Pick the one from the topmost (latest) release.

  • Once the zip finishes downloading, extract its contents into D:\llama-cpp\ by running:
Expand-Archive -Path [[LLAMA_ZIP="$HOME\Downloads\llama-b####-bin-win-cpu-x64.zip"]] -DestinationPath "D:\llama-cpp" -Force

What does this command do?

Replace the placeholder with the actual path to the zip file you just downloaded. If you saved it to your default Downloads folder, the path will look like $HOME\Downloads\llama-b8608-bin-win-cpu-x64.zip (with the version number matching what you downloaded).

Expand-Archive extracts the zip contents directly into D:\llama-cpp\ so that llama-server.exe sits at the top level of that folder.

  • Verify the extraction worked by running:
D:\llama-cpp\llama-server.exe --version
  • You should see a version number printed to the terminal, confirming the binary is ready.

Not seeing a version number?

  • If you see a "path not found" error, check that the zip extracted to the right place. Run ls D:\llama-cpp\ and look for llama-server.exe in the output.
  • If llama-server.exe is inside a subfolder (like D:\llama-cpp\llama-b8608-bin-win-cpu-x64\), move its contents up one level by running Move-Item D:\llama-cpp\llama-*\* D:\llama-cpp\ -Force then try the version command again.
  • If you downloaded the wrong zip (ARM or CUDA variant), go back to the releases page and grab the one ending in win-cpu-x64.zip.

Why can't PowerShell find my llama-server.exe?

Download the Gemma 4 E2B model

The model file is a GGUF-format file that contains the model weights in a compressed (quantized) format. The Q4_K_M variant keeps the file at ~3.4GB so it fits comfortably in your system RAM.

  • Create the models directory by running:
New-Item -ItemType Directory -Path "D:\llama-models" -Force
  • Download the Gemma 4 E2B Q4_K_M model file from Hugging Face by running:
Invoke-WebRequest -Uri "https://huggingface.co/lmstudio-community/gemma-4-E2B-it-GGUF/resolve/main/gemma-4-E2B-it-Q4_K_M.gguf" -OutFile "D:\llama-models\gemma-4-E2B-it-Q4_K_M.gguf"

What does this command do?

Invoke-WebRequest downloads the file directly from Hugging Face to your D: drive. The file is approximately 3.4GB, so this download will take several minutes depending on your internet speed.

You can also download the file through your browser by visiting the URL and saving it to D:\llama-models\ if you prefer.

Download taking too long?

The PowerShell progress bar can significantly slow down large downloads. If the download is crawling, press Ctrl+C to cancel and run this faster alternative instead:

$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://huggingface.co/lmstudio-community/gemma-4-E2B-it-GGUF/resolve/main/gemma-4-E2B-it-Q4_K_M.gguf" -OutFile "D:\llama-models\gemma-4-E2B-it-Q4_K_M.gguf"

Download failed or stalled?

  • If you see a network timeout, check your internet connection and try running the command again. PowerShell will overwrite any partial download.
  • If your antivirus blocks the download, temporarily allow it or download through your browser instead.

Help me troubleshoot my Gemma 4 E2B download in PowerShell.

Verify the model download
  • Confirm the model file exists and check its size by running:
Get-Item "D:\llama-models\gemma-4-E2B-it-Q4_K_M.gguf" | Select-Object Name, @{Name="SizeGB";Expression={[math]::Round($_.Length/1GB, 2)}}

What should I see?

You should see output showing the filename gemma-4-E2B-it-Q4_K_M.gguf with a size of approximately 3.19 GB. If the size is significantly smaller (under 1 GB), the download was likely incomplete. Delete the file and re-run the download command.

Your tools are downloaded and ready. Next up, you will launch the llama-server with optimized settings so it can serve the model within your system's RAM limits.

Launch llama-server with RAM-Optimized Settings

Your model and server binary are ready on disk. Now you need to start the server with settings tuned for your 8GB RAM system.

The challenge is fitting both the 3.4GB model and its working memory (the KV cache) into your remaining RAM. You will quantize the KV cache to q4_0 and cap the context window at 32K tokens to keep everything stable.

In this step, get ready to:
  • Start llama-server with RAM-optimized flags for KV cache quantization and context size.
  • Verify the server is listening and healthy.
  • Test the Anthropic-compatible Messages API endpoint with a direct POST request.
Start llama-server with optimized flags

On an 8GB system, Windows uses roughly 2.5-3GB of RAM. Your Q4_K_M model takes 3.4GB. That leaves very little room for the KV cache, which is the temporary memory the model uses to track conversation context.

Quantizing the KV cache from the default f16 down to q4_0 cuts its size by roughly 75%, making a 32K context window fit in your remaining RAM.

  • Launch the server by running this command in your PowerShell window:
D:\llama-cpp\llama-server.exe -m D:\llama-models\gemma-4-E2B-it-Q4_K_M.gguf --ctx-size 32768 --cache-type-k q4_0 --cache-type-v q4_0 --host 127.0.0.1 --port 8080 --jinja

What do these flags do?

  • -m points to your downloaded Gemma 4 E2B GGUF model file.
  • --ctx-size 32768 sets the context window to 32K tokens. Claude Code needs at least 32K for reliable tool calling and multi-file edits.
  • --cache-type-k q4_0 and --cache-type-v q4_0 quantize the KV cache from f16 to q4_0, cutting memory usage dramatically.
  • --host 127.0.0.1 binds the server to localhost only (not exposed to your network).
  • --port 8080 sets the listening port.
  • --jinja enables the Jinja template engine for applying chat templates to the model.

The model takes 30-60 seconds to load into RAM. You will see progress output in the terminal as layers load.

What should I see?

The terminal prints model loading progress, then a line confirming the server is listening. Look for output that mentions the host and port binding at 127.0.0.1:8080.

This command occupies your PowerShell window. The server runs in the foreground, so you will not get a prompt back. Leave this window open and running.

Server crashes or closes immediately?

  • If you see an out-of-memory error, your system does not have enough free RAM. Close other applications and try again. If it still fails, reduce the context size to --ctx-size 16384 to halve the KV cache memory requirement.
  • If the file path is not found, double-check the model filename matches exactly: gemma-4-E2B-it-Q4_K_M.gguf.
  • If you see a permission error, make sure you are running PowerShell as a regular user (not from a restricted directory).

Help me troubleshoot llama-server not starting on my Windows machine

Verify the server is healthy

Once the server shows it is listening, you need to confirm it is actually ready to accept requests. The /health endpoint returns a simple status check.

  • Open a second PowerShell window. Press the Windows key, type PowerShell, and press Enter.
  • Check the health endpoint by running this command:
Invoke-WebRequest -Uri "http://127.0.0.1:8080/health" -UseBasicParsing

What should I see?

If the model has finished loading, you will see a response with StatusCode: 200 and a body containing {"status": "ok" }.

If the model is still loading, you will see StatusCode: 503 instead. Wait another 30 seconds and try again.

Connection refused?

  • Make sure the first PowerShell window is still running the server. If you closed it, the server stopped.
  • Confirm the server finished starting. Look in the server window for the listening message before retrying.

Help me connect to my local llama-server health endpoint

Test the Anthropic Messages API endpoint

The health check confirms the server is running, but you also need to verify that the Anthropic Messages API endpoint is responding. This is the endpoint Claude Code will use to send prompts.

  • In the same second PowerShell window, send a test message to the Anthropic-compatible endpoint by running:
$body = @{
    model = "gemma-4-e2b"
    max_tokens = 50
    messages = @(
        @{ role = "user"; content = "Say hello in one sentence." }
    )
} | ConvertTo-Json -Depth 3

Invoke-WebRequest -Uri "http://127.0.0.1:8080/v1/messages" -Method POST -Body $body -ContentType "application/json" -UseBasicParsing

What does this request do?

This sends a minimal Anthropic-format message to the server. The model field can be any string because llama-server only has one model loaded.

The max_tokens field limits the response length. The messages array contains a single user message, just like the Anthropic API format.

This request takes 10-30 seconds to complete on CPU. The server is doing inference entirely in RAM without GPU acceleration, so this is expected.

You should see a response with StatusCode: 200 and a JSON body containing the model's reply. The exact text will vary, but any coherent response confirms the endpoint works.

Request timing out or returning an error?

  • If the request takes more than 60 seconds, the server may be struggling with memory. Close other applications to free RAM.
  • If you see a 503 error, the model is still loading. Wait and retry the health check first.
  • If you see a JSON parsing error in PowerShell, make sure you copied the full command including the ConvertTo-Json pipe.

Help me debug my Anthropic API test request to llama-server

Your local inference server is live and confirmed working. Next up, you will connect Claude Code to this server so you can use it as your coding assistant.

Connect Claude Code to the Local Server

Your local server is live and confirmed working. Now it is time to connect Claude Code to it so you can use the familiar coding assistant interface powered entirely by your local model.

Claude Code normally connects to Anthropic's cloud API. Three environment variables redirect it to your local llama-server instead, giving you the same tool calling and file editing experience with zero internet dependency.

In this step, get ready to:
  • Set environment variables to point Claude Code at the local server.
  • Launch Claude Code and verify the connection.
  • Test tool calling with a real prompt.
Set the required environment variables

Claude Code decides where to send API requests based on environment variables set in your terminal session. You need three variables to redirect it to your local server.

  • Press the Windows key to open your search bar.
  • Type PowerShell and press Enter to open a new PowerShell window.
  • Keep your first PowerShell window (where llama-server is running) open. Do not close it.
  • Set the three environment variables by running these commands in the new window:
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:8080"
$env:ANTHROPIC_AUTH_TOKEN = "local"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"

What do these variables do?

  • ANTHROPIC_BASE_URL tells Claude Code to send requests to your local server at port 8080 instead of Anthropic's cloud.
  • ANTHROPIC_AUTH_TOKEN provides a dummy token. The local server does not check authentication, but Claude Code requires the variable to be set.
  • CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC prevents Claude Code from making telemetry or update calls that would fail against a local server.
  • Confirm the variables are set by running:
echo $env:ANTHROPIC_BASE_URL

You should see http://127.0.0.1:8080 printed in the terminal.

Seeing a blank line instead of the URL?

Make sure you ran the $env: commands in the same PowerShell window where you are checking. Environment variables only persist in the session where they were set.

If you accidentally closed the window, open a new one and run all three $env: commands again.

help me set environment variables in PowerShell for Claude Code

Launch Claude Code

With the environment variables set, Claude Code will connect to your local server on launch.

  • Launch Claude Code by running this command in the same PowerShell window:
claude

Claude Code's interactive prompt should appear after a few seconds. The first connection may take a moment while the model processes the initial handshake.

Why is it slow?

Your setup runs entirely on CPU. Expect 10 to 30 second waits for responses, and roughly 2 to 5 tokens per second during generation. This is normal for CPU-only inference with a 3.4GB model.

Seeing an authentication error?

If Claude Code shows an error about an invalid bearer token or fails to authenticate, double-check that ANTHROPIC_AUTH_TOKEN is set to local in the current session. Run echo $env:ANTHROPIC_AUTH_TOKEN to verify.

If the base URL is wrong, Claude Code will try to reach Anthropic's cloud and fail. Verify with echo $env:ANTHROPIC_BASE_URL that it shows http://127.0.0.1:8080 exactly.

help me fix Claude Code connection errors to my local llama-server

Send a test prompt to confirm tool calling

Claude Code relies on tool calls (like reading files and listing directories) for its coding features. A directory listing prompt exercises this tool calling path to confirm everything works end to end.

  • Type the following prompt into Claude Code and press Enter:
What files are in the current directory?
  • Wait for the response. Claude Code should list the files in your current working directory.
  • If Claude Code asks for permission to use a tool (like listing files), approve it.

You should see Claude Code return a list of files and folders from wherever your PowerShell session is pointed. This confirms the local model can process prompts and execute tool calls through the Anthropic-compatible API.

Not getting a response?

Check that your first PowerShell window still shows llama-server running. If you accidentally closed it, the server is no longer available and Claude Code cannot reach it.

If the response seems stuck, give it up to 30 seconds. CPU inference is slow, and the model needs time to process the prompt and generate tool call tokens.

help me troubleshoot why Claude Code is not responding to my prompt

Claude Code is now running entirely on your local machine. Next up, you will wrap the whole startup process into a single script so you can launch everything with one command.

Create a One-Command Launch Script

Your local coding assistant is fully operational. You launched llama-server, configured the environment variables, and connected Claude Code to it manually.

That manual process involved juggling two PowerShell windows and typing several commands from memory. In this step, you will wrap the entire startup sequence into a single PowerShell script so you can launch everything with one command in the future.

In this step, get ready to:
  • Create a PowerShell launch script that starts the server and Claude Code together.
  • Test the script from a completely fresh start to confirm it works end-to-end.
Create the PowerShell launch script

A launch script bundles every manual step (starting the server, waiting for it, setting variables, and launching Claude Code) into a single file you run once. This way you never have to remember the exact flags or variable names again.

  • Open a text editor (Notepad, VS Code, or any editor you prefer).
  • Create a new file and save it as start-local-claude.ps1 inside the D:\llama-cpp\ folder.
  • Paste the following code into the top of start-local-claude.ps1:
# start-local-claude.ps1
# Launches llama-server and Claude Code for local AI coding

Write-Host "Starting llama-server with Gemma 4 E2B..." -ForegroundColor Cyan

# Start llama-server in a new window
$serverProcess = Start-Process -FilePath "D:\llama-cpp\llama-server.exe" `
    -ArgumentList "-m", "D:\llama-models\gemma-4-E2B-it-Q4_K_M.gguf", `
                  "--ctx-size", "32768", `
                  "--cache-type-k", "q4_0", `
                  "--cache-type-v", "q4_0", `
                  "--host", "127.0.0.1", `
                  "--port", "8080", `
                  "--jinja" `
    -PassThru -WindowStyle Normal

Write-Host "Waiting for server to be ready..." -ForegroundColor Yellow
Start-Sleep -Seconds 10

What does this code do?

This section launches llama-server in its own window using Start-Process. The -PassThru flag returns a process object so the script knows the server is running. The -WindowStyle Normal flag opens the server in a visible window so you can monitor its output.

The -ArgumentList passes the same RAM-optimized flags you used in Step 2 (context size 32768, q4_0 KV cache quantization). The script then waits 10 seconds to give the model time to load into memory before continuing.

  • Below the code you just pasted, add the rest of the script:
# Check if server is healthy
try {
    $health = Invoke-WebRequest -Uri "http://127.0.0.1:8080/health" -UseBasicParsing
    if ($health.StatusCode -eq 200) {
        Write-Host "Server is ready!" -ForegroundColor Green
    }
} catch {
    Write-Host "Server may still be loading the model. Launching Claude Code anyway..." -ForegroundColor Yellow
    Write-Host "If Claude Code fails, wait a moment and try again." -ForegroundColor Yellow
}

# Set environment variables for Claude Code
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:8080"
$env:ANTHROPIC_AUTH_TOKEN = "local"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"

Write-Host "" 
Write-Host "Launching Claude Code connected to local Gemma 4 E2B..." -ForegroundColor Cyan
Write-Host "Context window: 32K tokens | Model: Q4_K_M (~3.4GB)" -ForegroundColor DarkGray
Write-Host "Tip: If responses are slow, this is normal for CPU-only inference." -ForegroundColor DarkGray
Write-Host ""

# Launch Claude Code
claude

What does this section do?

The try/catch block pings the health endpoint to confirm the server is responsive. If the model is still loading (which can take longer on some systems), the script warns you but proceeds anyway so you do not have to restart.

The three $env: lines set the same environment variables you configured manually in Step 3. These tell Claude Code to route its requests to your local server instead of Anthropic's cloud API. Finally, the claude command at the bottom launches Claude Code in the same window.

  • Save start-local-claude.ps1.
  • Confirm the file exists by running this in PowerShell:
ls D:\llama-cpp\start-local-claude.ps1

You should see the file listed with a size of roughly 1-2 KB.

File not found?

  • Make sure you saved with the exact filename start-local-claude.ps1 (not .ps1.txt). Notepad sometimes adds .txt by default. In the Save dialog, change **Save as type** to **All Files**.
  • Check that you saved it inside D:\llama-cpp\ and not another folder.

Can't figure out where it saved?

✔️ Awesome, I've got everything!

Great. Double check you have saved the file before moving on.

ⓧ I'd like to double check the full code

Here is the complete start-local-claude.ps1 file. Make sure yours matches exactly:

# start-local-claude.ps1
# Launches llama-server and Claude Code for local AI coding

Write-Host "Starting llama-server with Gemma 4 E2B..." -ForegroundColor Cyan

# Start llama-server in a new window
$serverProcess = Start-Process -FilePath "D:\llama-cpp\llama-server.exe" `
    -ArgumentList "-m", "D:\llama-models\gemma-4-E2B-it-Q4_K_M.gguf", `
                  "--ctx-size", "32768", `
                  "--cache-type-k", "q4_0", `
                  "--cache-type-v", "q4_0", `
                  "--host", "127.0.0.1", `
                  "--port", "8080", `
                  "--jinja" `
    -PassThru -WindowStyle Normal

Write-Host "Waiting for server to be ready..." -ForegroundColor Yellow
Start-Sleep -Seconds 10

# Check if server is healthy
try {
    $health = Invoke-WebRequest -Uri "http://127.0.0.1:8080/health" -UseBasicParsing
    if ($health.StatusCode -eq 200) {
        Write-Host "Server is ready!" -ForegroundColor Green
    }
} catch {
    Write-Host "Server may still be loading the model. Launching Claude Code anyway..." -ForegroundColor Yellow
    Write-Host "If Claude Code fails, wait a moment and try again." -ForegroundColor Yellow
}

# Set environment variables for Claude Code
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:8080"
$env:ANTHROPIC_AUTH_TOKEN = "local"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"

Write-Host "" 
Write-Host "Launching Claude Code connected to local Gemma 4 E2B..." -ForegroundColor Cyan
Write-Host "Context window: 32K tokens | Model: Q4_K_M (~3.4GB)" -ForegroundColor DarkGray
Write-Host "Tip: If responses are slow, this is normal for CPU-only inference." -ForegroundColor DarkGray
Write-Host ""

# Launch Claude Code
claude
Test the script from a fresh start

The real test is whether the script works when nothing is running. You will close everything down and launch from scratch.

  • In the PowerShell window where Claude Code is running, type /exit and press **Enter** to quit Claude Code.
  • Close the PowerShell window that was running llama-server.
  • Close any remaining PowerShell windows from previous steps.
  • Press the **Windows** key to open your search bar.
  • Type PowerShell and press **Enter** to open a fresh window.
  • Run the launch script by entering this command:
D:\llama-cpp\start-local-claude.ps1

You should see the cyan "Starting llama-server" message, then a new window opens running the server. After about 10 seconds, the script checks the health endpoint and reports whether the server is ready. Then Claude Code launches in your original window.

What should I see?

A successful run shows colored status messages in sequence: cyan for startup, yellow for waiting, green for healthy (or yellow if still loading), then cyan again when Claude Code launches. Claude Code's prompt appears at the bottom, ready for input.

  • Send a test prompt to confirm the full connection works. Try asking Claude Code to describe the current directory.

Seeing an execution policy error?

Windows may block scripts from running if the execution policy is set to Restricted. Fix this by running the following in your PowerShell window, then try the script again:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

If Claude Code launches but cannot get a response, the model may still be loading. Wait 20-30 seconds and try your prompt again. CPU-only inference needs time to load a 3.4GB model.

Still stuck?

Your one-command setup is complete. From now on, a single script gives you a fully local AI coding assistant. Next up, the Secret Mission takes this further by connecting a GitHub MCP server so Claude Code can review pull requests directly from your local setup.

Secret mission

Configure GitHub MCP for PR Reviews

Your local Claude Code setup is powerful, but it only knows about local files. What if you could review pull requests, check diffs, and update documentation directly from your local assistant? Connect the GitHub MCP server to unlock repository-aware workflows without leaving your terminal.

Clean Up Your Resources

Clean Up Your Resources

This project runs entirely locally, so there are no ongoing costs or cloud services to worry about. Decide whether to keep your resources on disk, pause by closing your windows, or delete everything to reclaim space.

Resources you used:

  • D:\llama-cpp\ folder (llama.cpp binaries and launch script, ~40MB).
  • D:\llama-models\ folder (Gemma 4 E2B GGUF model file, ~3.4GB).

Keep everything running

No action needed. Choose this if you plan to use your local Claude Code setup again soon.

  • Leave the files on D: drive for future use. The model file takes ~3.4GB and the llama.cpp binaries take ~40MB.
  • Nothing runs in the background after you close your PowerShell windows. The server only runs when you start it.
  • To use your setup again, run D:\llama-cpp\start-local-claude.ps1 in PowerShell.

Pause - I'll come back to this later

Close any open PowerShell windows. Nothing runs in the background after you close them.

  • Close the PowerShell window running llama-server.
  • Close the PowerShell window running Claude Code.
  • Your files stay on disk and are ready when you come back. Run your launch script to start everything again.

Delete - I don't want to use this again

Remove all project files to reclaim disk space. This frees up approximately 3.5GB.

  • Close any PowerShell windows running the server or Claude Code.
  • Remove the llama.cpp binaries and launch script by running this command in PowerShell:
Remove-Item -Recurse -Force "D:\llama-cpp"
  • Remove the model file by running:
Remove-Item -Recurse -Force "D:\llama-models"
  • Verify the folders are gone by running:
Test-Path "D:\llama-cpp", "D:\llama-models"

You should see False for both paths.

Completed the Secret Mission?

If you configured the GitHub MCP server, you may also want to revoke your GitHub Personal Access Token. Go to GitHub, open Settings, then Developer settings, then Personal access tokens, and delete the token you created.

You can also remove the MCP configuration from ~/.claude/settings.json by deleting the GitHub MCP server entry.

Nice Work!

Nice Work!

You just turned your Windows machine into a fully local AI coding assistant. No API keys, no cloud dependency, no ongoing costs.

You've learned how to:

  • Configure llama.cpp to serve Gemma 4 E2B with native Anthropic Messages API compatibility.
  • Connect Claude Code to a fully local backend using environment variables, with KV cache quantization tuned for 8GB RAM.
  • Create a reusable PowerShell launch script for one-command startup of the entire local stack.
  • Connected the GitHub MCP server so Claude Code can review PRs and update documentation directly from your local setup.

Ready to quiz yourself?