What's new
The short version of each release, written for people who use Polyglot rather than read its source. The full changelog on GitHub has every entry, including internal fixes.
polyglot updates itself in the background when autoUpdate
is on; otherwise npm install -g @usepolyglot/cli (or your package manager’s
equivalent) pulls the latest.
v0.16.0
Section titled “v0.16.0”Models see every rule their tool calls must follow. When tools are described to a model in the prompt (the default for local models), each tool’s parameters are now written out in full: the allowed values of a parameter with a fixed list, what a list holds, the keys of a nested object and which are required, and patterns, formats and limits. Before, a fixed list of values read as plain text and a nested object as just “object”, so a model could be refused for breaking rules it was never shown. This matters most for MCP tools, whose parameters are often richer than Polyglot’s own. See The tool-call protocol.
A model that says what it will do, then stops, is asked to do it. Some local models end a turn on “Let me start by reading the file.” without making the call, which used to end the task there. Polyglot now asks the model to make the call, the way it already did after an empty reply. See When a model stops short.
Replies cut off by the output length limit are handled. A model can reach the server’s output limit in the middle of an answer, in the middle of a tool call, or, with reasoning models, before writing anything visible. A tool call cut off this way is no longer run: its arguments are incomplete, and running it could write half a file. The model is told and makes the call again in smaller pieces. An answer cut off before any call, or an empty reply, gets a request to continue.
Longer replies from Claude. With Claude, a reply may now be up to 16,384 tokens instead of 4,096, so writing a large file in one call no longer runs into the limit. Claude 3 and 3.5 models keep their own lower maximum.
Fixes:
- A tool parameter called
name(ortool, orfunction) is no longer dropped from the call. - A nested object or list in a call whose JSON needed repair is kept as an object or list instead of becoming text.
v0.15.0
Section titled “v0.15.0”Your team’s HQ. The self-hosted dashboard Polyglot can report to is now called HQ, and its
settings are POLYGLOT_HQ_URL, POLYGLOT_HQ_TOKEN and POLYGLOT_HQ_INCLUDE_RAW_CALLS. The old
POLYGLOT_CONTROL_PLANE_* names still work: Polyglot says once which to rename. As before, it asks
before sending anything, and nothing is sent without those settings.
Dependency updates, including security fixes in libraries Polyglot installs.
v0.14.0
Section titled “v0.14.0”A warning when the model server cuts off your prompt. A local server with a small
context window doesn’t refuse a long prompt: it quietly drops the start of it, which for an
agent is its instructions and tool descriptions, and the model carries on without knowing how
to call tools. Ollama does this at its default window, whatever the model supports. Polyglot
now compares the prompt it sent with what the server says it read, and when the server read
clearly less, says so once, with how to raise the window. See
Context window. --probe also reads Ollama’s real
window from its own API now, since its OpenAI-compatible endpoint doesn’t report it.
v0.13.0
Section titled “v0.13.0”Reliability reports. polyglot report generate builds a digest of how tool calls went
over a period, from your local audit log: how many needed repair, which repairs were used, how
many never resolved. Counts only by default; including raw samples of broken calls means
reviewing each one on screen, with secrets already redacted, before it goes in.
polyglot report submit sends a report only after showing it and asking.
Reporting to a team’s control plane. With POLYGLOT_CONTROL_PLANE_URL and
POLYGLOT_CONTROL_PLANE_TOKEN set, Polyglot can report tool calls and repairs to your team’s
self-hosted control plane. It asks once before sending anything, and nothing is asked or sent
without those settings.
Since then (v0.13.1, v0.13.2):
- Many more of the tool-call forms current local models actually write are recognized: native tool calls from OpenAI-compatible servers (gpt-oss on Ollama), Devstral’s and Qwen’s own formats, a tool name used as the tag, a call glued to the end of a sentence, and others. A call with a broken or missing close tag no longer swallows the model’s next turn into its arguments, which had written junk into files.
- An empty reply in the middle of a task gets a nudge instead of ending the turn.
- A call closed with
</tool_result>instead of</tool_call>no longer hides the calls after it. - Security hardening: a crafted glob pattern can no longer hang the CLI, self-update runs the package manager without a shell, and the web tools strip scripts more strictly.
v0.12.0
Section titled “v0.12.0”Opt-in usage telemetry, kept on your machine. With telemetry: true, Polyglot records which
provider, model and server host you use, and whether tool calls needed repair or failed: no
prompts, file contents, tool arguments or model output. You’re asked once in the interactive UI.
It’s written under ~/.polyglot/telemetry and nothing is sent anywhere. /status shows the
setting.
Also (v0.11.1): grep given a single file now searches it, instead of finding nothing; a path
that doesn’t exist says so instead of “No matches”; and a path pointing at a secret-looking file is
refused.
v0.11.0
Section titled “v0.11.0”Replay a saved session. polyglot replay <id|path>
re-runs a session against the current build and shows where it diverges from what was
recorded - which tool calls resolve differently now, which
repairs are no longer needed, whether a since-released fix
would have helped. By default it just re-resolves the recorded model output (deterministic,
no execution); --execute --seed <dir> re-runs the whole agent loop against a snapshot of
your files. --output-format json for scripting; --save turns the session into a
regression test. Handy when a local model breaks on something and you can’t tell whether
it’s the model or Polyglot.
v0.10.0
Section titled “v0.10.0”Remote MCP servers. An mcpServers entry can now give a url
instead of a command. Polyglot connects over the current Streamable HTTP transport
and falls back to legacy HTTP+SSE when a server only speaks that; headers carry auth,
with ${VAR} read from the environment so tokens stay out of settings.json. MCP
servers also connect in parallel now, each with a 10-second timeout, so a slow or
unreachable one no longer holds up startup.
Dependency modernization. zod 4, openai 7, glob 13, ink 7 / react 19,
and chalk dropped entirely - no behaviour change, and a few moderate pnpm audit
advisories cleared along the way.
v0.9.0
Section titled “v0.9.0”Secret & PII scanning. Every tool result - shell output, file reads, web fetches,
MCP tools - is now scanned for secret-looking values (API keys,
tokens, private keys) before it reaches the model, and flagged in the transcript and
the audit log. On by default in warn mode; set
redaction.mode: "redact" to strip them,
redaction.pii: true to add email/SSN/card detection. This is content-based and
complements the existing path-based prompting for secret-named files.
Hooks. A hooks block in settings.json runs your own shell
commands at three points: preToolUse (block a tool call), postToolUse (block a
result), and userPromptSubmit (block a prompt or add context to it). Exit 2 blocks;
optional stdout JSON gives structured control. Hooks in a project’s settings file are
off unless the global config sets hooks.allowProjectHooks: true.
v0.8.0
Section titled “v0.8.0”File mentions. Type @ in the input for a fuzzy-search list of the project’s
files; on send, each @<path> is replaced with the
file’s contents inline, so the model has it without a read_file call. The list
respects .gitignore; secret files are never inlined. Works in -p mode too.
Agent definitions. Drop a .polyglot/agents/<name>.md -
frontmatter for the description, an optional tool allowlist, an optional model; the
body is the system prompt - and run it with @name <task> at the start of a message.
It runs as a one-shot sub-agent with only its allowed tools and streams its result.
The model can also delegate to one on its own through an agent_<name> tool.
/agents lists them.
Skills. Put a focused instruction bundle at
.polyglot/skills/<name>/SKILL.md and switch it on for the
session with @name - its guidance is added to the system prompt until /skill off.
Bundled files sit alongside SKILL.md and the model reads them on demand. Same
SKILL.md layout as Claude Code, so skills are portable. /skills lists them.
v0.7.0
Section titled “v0.7.0”Model failover. Configure a routing.failover list
and, when the active model errors out or stops producing valid tool calls mid-turn,
the turn continues on the next model instead of stopping. The switch is sticky for the
session and shown in the transcript; /model puts you back. Point a local model at a
hosted one (or the reverse) and you keep working through an outage on either side.
Dedicated models for compaction and planning. routing.summaryModel runs
/compact on a cheaper model; routing.planModel runs plan-mode turns on a model of
your choice.
Cheaper sub-agent model. Set subAgentModel
and task sub-agents run on it instead of inheriting the parent’s model - delegated
grunt work doesn’t need your best model. Sub-agent token cost now shows up in /cost
as its own line.
Share a session. polyglot share <id> exports a
transcript to Markdown or a standalone HTML file, with secret-looking values scrubbed
by default, for pasting into a PR or a bug report. --resume now also accepts a path
to a .jsonl session file, so a session can be handed between people.
Per-model reliability. A running tally of how each model is doing at tool calls
this session - calls made, repairs needed, parse failures, give-ups - shown in
/status, the new /reliability command, and next to each model in the /model
picker (“92% clean this session”). The status bar flags trouble once there is any.
Prompt caching (Anthropic). The system prompt is marked cacheable, so from the
second turn of a session it’s served from cache at roughly a tenth of the input-token
price. /cost reflects the discount automatically - nothing to configure.
v0.6.0
Section titled “v0.6.0”First-run setup. Running polyglot with no config now launches an interactive
polyglot init wizard instead of exiting with an
error.
Project instructions. Polyglot reads
AGENTS.md / POLYGLOT.md from your repo (and
~/.polyglot/ for global rules) and prepends them to the system prompt - standing
context like build commands and conventions. AGENTS.md is the cross-tool standard,
so a repo set up for another agent already works.
v0.5.0
Section titled “v0.5.0”Repairs are visible. When Polyglot fixes a malformed tool call from a weak model,
the card shows a ↺ repaired marker; Ctrl+R / /raw show the model’s verbatim
output; /reliability keeps a per-model tally. A parser fix can no longer quietly
mask a model getting worse.
Older releases: see the full changelog.