Your own models,
one small file.

Gnista knows the big model makers and their published prices. For a model it doesn’t know, one you run through Ollama or LM Studio, a fine-tune or your company’s own endpoint, a small JSON file tells it what the model costs, how much context it has and which icon it shows. No new version of Gnista needed.

Updated

Try it

For a Llama model running locally through Ollama, save this as ~/Library/Application Support/Gnista/Models/ollama.json:

{
  "version": 1,
  "match": ["llama3.1:8b"],
  "price": "free",
  "context": 131072
}

Within ten seconds, sessions running llama3.1:8b say they cost $0 and show how much of their 131K-token context they use, with Meta’s icon, which Gnista already knows. Settings ▸ Agents ▸ Models lists the file; Show Models Folder there opens the folder.

The model file

One file per model, or per family of models: up to 32 lowercase letters, digits, - and _, ending in .json. Only match is required, and a file must give at least an icon, a price or a context.

{
  "version": 1,
  "maker": "Acme",
  "match": ["acme-coder", "acme"],
  "icon": "acme.svg",
  "motion": "breathe",
  "monochrome": false,
  "price": { "input": 0.5, "output": 1.5, "cacheRead": 0.05, "cacheWrite": 0.6 },
  "context": 200000,
  "about": "Prices from our internal rate card."
}
KeyWhat it does
version1.
matchRequired. Up to 32 parts of the model ids it’s for, as your agent reports them: llama3.1:8b, acme-coder. Case doesn’t matter. A part of more than two characters matches anywhere in the id; one of two or fewer only as a whole word, so o3 matches o3-mini but not foo3.
makerWho makes it, as Settings names the file. Up to 40 characters.
iconAn SVG or PNG file in the same folder, up to 1 MB, shown as a small badge on the agent’s icon. Without it, a model Gnista knows keeps its maker’s icon.
motionHow the badge moves while the agent works: spin, twinkle, bob, swim, rock or breathe, or at your own pace: {"name": "spin", "period": 10}.
monochrometrue for a single-colour mark, drawn in the colour of the text around it.
price"free", or US dollars per million tokens: input and output, and optionally cacheRead (a tenth of input if left out) and cacheWrite (1.25 times input if left out).
contextThe model’s context window in tokens, for the ring that shows how full it is.
aboutA note for whoever edits the file next. Gnista doesn’t show it.

A file over 1 MB, or with anything wrong in it (an unknown key, a price that isn’t one, an icon Gnista can’t read), is ignored as a whole, never half-used. Settings ▸ Agents ▸ Models lists it with the reason.

Which file a model gets

  • Your files come before Gnista’s own. Among several that match, the longest matching part wins: llama-3.1-nemotron is NVIDIA’s (nemotron), not Meta’s (llama).
  • The icon comes from the best match that has one, the price and context from the best match that has them. A file with only a price keeps the maker’s icon.
  • Your price and context come before the published prices Gnista knows, since you know your endpoint. A context window the agent reports itself still wins.
  • No badge shows when the model is the agent maker’s own, such as Claude Code running Claude.

More examples

A model in LM Studio, free, with Gnista’s own Qwen icon:

{ "version": 1, "match": ["qwen2.5-coder-32b"], "price": "free", "context": 32768 }

Your company’s endpoint, with its own icon and price, next to acme.svg:

{
  "version": 1,
  "maker": "Acme",
  "match": ["acme-coder"],
  "icon": "acme.svg",
  "motion": "breathe",
  "price": { "input": 0.5, "output": 1.5 },
  "context": 200000
}

Where it shows

The badge shows for agents that report their model, such as Claude Code, Codex, OpenCode, Antigravity and Droid, and for your own tools that send model (custom agents). Cost and context show for agents whose sessions Gnista reads; Settings ▸ Agents marks which those are.