15 4 days ago

Small models for the Metzger plugin for Claude Code. They score every tool call in a conversation for relevance. Stale calls get cut, everything else stays.

0.8b
ollama run kaineone/metzger

Models

View all →

Readme

Metzger

Decision models for Claude Code context compaction.

Metzger (German for “butcher”) is a family of small models fine-tuned to score tool calls in Claude Code conversations. When a session gets long and Claude Code needs to compact its context, Metzger looks at every tool call and decides: does the call still matter? Does its output still matter? Anything scored below the threshold gets cut; everything else stays verbatim. Nothing is summarized or rewritten.

How it works

The Metzger plugin for Claude Code hooks into session.compact. Instead of the default summarization, it sends the full conversation as context and asks the model two questions per tool call:

  1. Should this tool call stay? Is knowing that this call was made, with its input, still relevant to what the assistant does next?
  2. Should this tool’s output stay? Does the assistant still need the full output, or would re-running the tool work just as well?

Each answer is a calibrated probability. Calls scoring below the threshold are removed entirely. Calls kept but with dropped results get truncated to a short head plus a note. User and assistant text is never touched.

Models

Tag Parameters Size Quantization Backend Use case
kaineone/metzger:0.8b 773M 833 MB Q8_0 System One Default. Fast on CPU or GPU. Good accuracy for most sessions.
kaineone/metzger 4.3B 4.6 GB Q8_0 System One Higher accuracy. Needs a GPU with 6+ GB VRAM; slow on CPU-only machines.
kaineone/metzger:distill-0.8b 752M 1.5 GB F16 Chat API Distilled variant. V2 weights with improved calibration on long sessions.

Which one should I use?

Start with kaineone/metzger:0.8b. It runs on CPU without stalling your machine and scores a full conversation in a few seconds. If you have a GPU with 6+ GB VRAM and want tighter decisions, try kaineone/metzger (the 4.3B). The distill variant is for users running the chat-API backend (backend: "chat" in plugin config) instead of the default System One protocol.

Quick start

# 1. Install Ollama (if you haven't)
# https://ollama.com/download

# 2. Pull the default model
ollama pull kaineone/metzger:0.8b

# 3. Install the Claude Code plugin
claude plugin marketplace add FlintWave/metzger
claude plugin install metzger@metzger

The plugin detects Ollama on session start and tells you if something’s missing.

Base model

All Metzger models are fine-tuned from Qwen 3.5 (Alibaba). The 0.8B and 4.3B sizes use Q8_0 quantization for the System One backend. The distill variant uses F16 (full precision) for the chat-API backend.

Training

The models are trained on the Jev scoring protocol, a probability-calibrated binary decision format designed for conversation triage. Training data comes from real Claude Code sessions with hand-labeled keep/drop annotations on tool calls and their results. The scoring function considers:

  • Does the tool call’s input contain information the assistant still references?
  • Does the tool result hold data not available elsewhere in the conversation?
  • Could the tool be cheaply re-run if its output were needed again?
  • How recent is the call, and how relevant is it to the current task?

Protocol

The default models (metzger:0.8b, metzger) use the System One protocol. The model receives the full conversation as state and a batch of yes/no questions, and responds with calibrated probabilities for each. This is not a standard chat completion format.

The distill model (metzger:distill-0.8b) speaks standard chat completions and returns JSON with keep/drop probabilities. Set backend: "chat" in the plugin config to use it.

License

Apache 2.0 (inherited from the Qwen 3.5 base model).

Companion plugins

If you use MemoryGraph, the memorygraph-bridge plugin saves key context to MemoryGraph before compaction so agents can recall it afterward.

Links