Brimkerndocs

$ claude mcp add brimkern -- brimkern mcp

A local GPU worker for your coding agent

Your main agent (Claude Code, Cursor, Windsurf…) keeps the design and the decisions. The mechanical sub-tasks, a first-pass review, a test draft, a commit title, go to a model running on your own GPU through MCP, the CLI or a skill. Nothing leaves the machine and nothing is billed.

How delegation works

The agent sees Brimkern as a set of tools. When it decides a sub-task is routine, it calls one; the MCP server runs the model on the GPU and returns plain text, which the agent reads, checks and uses.

delegation
Claude Code  (cloud: plans, decides, edits)
   │
   │ tools/call brimkern_review { code, file_path }
   ▼
brimkern mcp  (stdio, JSON-RPC 2.0)
   │ model loaded once, calls queued one at a time
   ▼
your GPU  (WebGPU, hand-written WGSL kernels)
   │
   └─▶ text back to the agent, which checks it

Good fits

First-pass reviews, unit-test drafts, commit titles, regexes, renames and other mechanical rewrites.

Keep on the main agent

Architecture, security-critical code, anything that needs the whole repository in context. A 4B model helps; it does not decide.

MCP server

With the CLI installed, one command registers it in Claude Code:

claude mcp add brimkern -- brimkern mcp --model=coder

For Claude Desktop, Cursor and other clients, the same server in their JSON config:

{
  "mcpServers": {
    "brimkern": {
      "command": "brimkern",
      "args": ["mcp", "--model=coder"]
    }
  }
}

Below, a real exchange with the server: the handshake, the tool list, and a stats call (which does not load the model, so it answers instantly).

brimkern mcp · stdio
→ initialize { protocolVersion: "2025-06-18" }
← { "protocolVersion": "2025-06-18", "capabilities": { "tools": {} },
    "serverInfo": { "name": "brimkern", "version": "0.1.0" } }

→ tools/list
← brimkern_ask · brimkern_review · brimkern_generate_tests · brimkern_stats

→ tools/call brimkern_stats
← { "model": "Qwen 3 4B (BRIK int4)", "loaded": false, "callsServed": 0,
    "totalTokensServed": 0, "estimatedSavingsUsd": 0 }

Captured on 2026-09-24 from brimkern mcp; the tool list is shown by name only.

The four tools

Each call is independent: no memory of the previous ones, so a review never sees an earlier question.

brimkern_askprompt, model?, mode?, max_tokens?
Free-form query. mode = code (default), plan, review or auto; max_tokens up to 2048.
brimkern_reviewcode, file_path?, max_tokens?
Review of a snippet or file: bugs, edge cases, error handling, security, performance.
brimkern_generate_testscode, test_framework?, max_tokens?
Unit-test draft in the framework of your choice (vitest by default).
brimkern_stats—
Active model, calls and tokens served, estimated savings. Does not load a model.

Reasoning blocks (<think>…</think>) are stripped from every answer: the agent only receives the result.

The skill

A skill is a Markdown file that tells Claude Code when to hand work to Brimkern and how (which commands, which flags). It ships with the CLI; copy it into a project to enable it there.

mkdir -p .claude/skills
cp -r ~/.brimkern/skills/brimkern-worker .claude/skills/
.claude/skills/brimkern-worker/SKILL.md
---
name: brimkern-worker
description: Offload routine sub-tasks (exploratory tests, syntax transformations, code reviews, repetitive drafting) to local WebGPU Brimkern workers…
---

# Brimkern Worker
…
brimkern -q "…"          # answer only, for scripts
brimkern --json "…"      # structured payload
claude mcp add brimkern -- brimkern mcp

Scripts & JSON

Without MCP, any agent that can run a shell command can delegate: -q prints the answer alone, --json a structured payload with the token count, speed and duration.

git diff | brimkern --json "Draft a conventional commit title"
brimkern --json
{
  "ok": true,
  "content": "The conventional commit title for the provided diff could be:\n\n`feat(auth): add passkey registration support`\n\n…",
  "tokens": 48,
  "elapsedMs": 4735,
  "tokPerSec": 10.1,
  "model": "Qwen 3 4B (BRIK int4)",
  "backend": "Dawn (Metal)",
  "savedUsd": 0.00158
}

Real output, coder (Qwen 3 4B), native Dawn on an M-series Mac. savedUsd is an estimate of what a paid API would have charged, not a measurement.

Limits

One generation at a time

Parallel tool calls are queued: the model is loaded once and serves them in turn.

Memory

The default model takes about 2.5 GB of GPU memory while the server runs.

First call

The first call downloads and loads the model; the following ones reuse it.

Brimkern: open WebGPU engine, built by Romain Khanoyan. Local AI, WebGPU, on-device engines.