model-selector
model-selector
Which model, at which deliberation level, finishes a piece of work for the least money, or soonest where the user has made time their standing choice — answered from what this machine has measured rather than from reputation. The answer is advice. No form of it means start nothing: where no valid profile stands, the catalogue is empty or nothing is reachable, it names the seat the caller already has and says why.
Run uv run "$HERE/scripts/invoke.py" — $HERE is the directory that holds this SKILL.md — with everything the user typed after /model-selector, verbatim and however many lines, on stdin. Exit 0: do what it prints. On any other exit, if you introduced a known construction error and can correct it while preserving the user's request and authority, account for effects already produced, submit the corrected invocation through the same shim, and continue from the failed boundary; a refusal before the operation starts consumes no operation. Otherwise show what it printed to the user verbatim and stop. Never repair input the user supplied, or automatically retry exact help, an unmet dependency, an unrelated failure, or a failure whose origin or valid correction is unknown.
Arguments
<work> describes the job in the user's own words. Where it is absent the job is the task at hand, and you write the description yourself: a sentence or two saying what is to be built, decided, found or written.
--kind=<kind> names the class of work, which is what an estimate is keyed on. Where it is absent you classify the work into exactly one of eight: mechanical, a fully specified change needing no judgement; implement, building to a written spec with judgement inside a fenced scope; design, deciding what to build at all; debug, finding a cause in a system that misbehaves; review, judging somebody else's work against a standard; analyze, reading a lot and reporting a little; prose, writing or editing text a person will read; converse, a short exchange with a person. There is no ninth kind, and a finer description of the job belongs in <work>, which is kept and reported and never splits the comparison.
--scope=limited admits the caller's own provider. --scope=callable, the default, adds every model this Harness can reach through a Bridge and the profile has a channel for. Under --harness=process there is no Harness to reach through, so callable is every point this machine can start and every point takes the same test — the caller's own provider included: a Bridge plans a command for the point, the profile has a channel for it, and that command's binary is on the PATH. --scope=all admits the whole catalogue, reachable or not. Scope says what may be called, never what is preferred.
--json says a machine is reading the answer rather than a person. A Skill that routes delegated work reads the same answer by running scripts/selection.py itself, this body being for people.
--data=<path> puts the profile, the catalogue and the measurement store somewhere other than ~/.kntnt/model-selector/. Every command takes it and every command means the same directory by it.
On evidence, <kind> narrows the account to that one kind, spelled as above.