magus v0.4.3 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
2 min read

MGS3035: tool unprobeable

A spell declares a version probe for every tool its ops drive, and the answer is part of every cache key those ops write. This tool is present and runs, but the probe fails:

[MGS3035] go:golangci-lint reports no version in /repo/api: version probe
golangci-lint [--version] in /repo/api: exit status 3: panic: runtime error;
fix the tool or its probe

The part after the directory is the tool's own words, quoted from its output. Without a version, no cache key could tell one build of the tool from its upgrade. A terminal prints that reason dim under the message; an agent's display leaves it in the run log unless run with -v, and -o json carries it as why.

Why it is an error

The ops can still pass. A key recording a placeholder in place of the version would then replay those passes after the tool is upgraded, because nothing in the key moved. magus does not write a key that cannot tell two builds apart, so the run stops here, before any target runs.

An absent tool is not this

A tool that is not there gets a warning, not this error, and its key records UNPROBED:

  • the probe's binary is not on PATH (MGS3003);
  • mise is on PATH but selects no version of the tool for the directory;
  • a tool a package manager runs from its install (pnpm exec tsc) is missing from that install. The warning names the cause: no node_modules, an install that never finished, or an install that does not ship the tool, along with the command that fixes it, such as magus run install console.

UNPROBED is honest there because nothing that drives an absent tool can pass, so no result is ever recorded under it that a later run could wrongly replay. Installing the tool moves the key. The absence is cached like a version, so it costs one probe and one warning per change to the probe's inputs, not one per invocation.

Resolution

  • Run the probe yourself in the directory the message names. The quoted line is usually enough to say what broke.
  • Fix the tool by reinstalling it or repairing the configuration it reads at startup.
  • Fix the probe, when the tool does not understand the argv its spell declares, by correcting the probe in the spell's mgs_getTools.

Graph reads

magus status, magus refs and the other graph reads do not fail over one project's tool, because a read runs no tool and writes no cache entry. The project's symbol index reports unvouched with this message, and the other projects answer as usual.

MGS3035versionprobetoolscacheerrors
Last updated (f01f3de8)
Earlier changes on this page (2)

Full history ↗ · Blame source ↗

Glossary

Project

A directory magus recognizes as a unit of work (it has a magusfile); the unit of caching, scheduling, and dependency tracking. Project in full.

Target

A named operation (build, test, ...) you invoke with magus run <target>; it may compose a spell's tool-native operations and depend on other targets. Target in full.

Op

A single tool-native command a target composes (long form: operation); the middle of the work hierarchy (Spell to Op to Target). Op in full.

Spell

A language/runtime adapter (e.g. go, md) that maps generic targets onto a toolchain's real commands. Spell in full.

Module

A magus stdlib namespace a magusfile imports for host capabilities: filesystem, exec, vcs, and more. Module in full.

Cache

The content-addressed store magus consults before running a target, so unchanged work is skipped. Cache in full.

CI

An ordinary target you compose yourself with ctx.needs; magus does not hardcode its stages. It is the anchor magus affected ci keys off, and ci strips the rw charm. CI in full.

Agent

A model working through an agent host such as Claude Code, Codex, Cursor or OpenCode. magus treats an agent as one more caller of its CLI, MCP tools and console, held to the same checks as a person. Agent in full.

Tool

An action a model can call through its host: a name, a description, a typed input and a result. magus serves its tools over MCP, each a read of the workspace model or a run of the CLI it already has. Tool in full.

Invocation

One magus process's recorded facts (the targets it finished, their outcomes, the lease it acted as, and the session it ran in when a host delivered one), kept in a repo-scoped store every worktree shares. magus session lists them; the store prunes itself by last-fact age. Invocation in full.

Run

One target executing under one magus invocation, such as magus run test web or magus affected ci. A run keeps its captured output behind an output reference. Every magus run is a run whether or not any job asked for it; see Job for how the two relate. Run in full.

Conventions

This page uses none of the site's convention markers. The full set is on the conventions page.