Repository navigation
v1.2.0
Minor Changes
-
04a48e2: catherd 1.2: scores and model facts from public sources, bars that span several dimensions, and a profile that never breaks because a rung lacks a score. Run
catherd initafter upgrading (it asks for an optional Artificial Analysis key and syncs), then start a new Claude Code session (see MIGRATION.md, "From 1.1 to 1.2").- Public sources. models.dev, OpenRouter, LiteLLM, Arena (LMArena), Vectara's hallucination leaderboard and Epoch AI, keyless, plus Artificial Analysis with your own free key (
initasks after Jev's, so pipedinitnow reads four lines: the Jev key, the Artificial Analysis key, the profile, whether to replace it;ARTIFICIAL_ANALYSIS_API_KEYwins; it is saved incredentials.jsonand workers never see it). The MCP server syncs them in the background at session start, each at most every 12 hours;catherd catalog sync [--force] [--unmatched]and thecatalog_synctool (26 MCP tools) sync on demand. A failed source keeps its last good answer; offline, catherd routes on the scores it ships.CATHERD_NO_SYNC=1turns the automatic syncs off. - Calibration and confidence. Each dimension has an anchor unit; other sources are fitted onto it (at least 5 shared rungs, R² ≥ 0.5). A value's confidence is
verified,measured,calibrated,adjacent(the same model at another effort),secondaryorinferred; the override still wins, then the better level, then the newer date, and a value older than 90 days drops a level. - New dimensions and bars.
agentic,steerandfrontendjoinrepo_code,terminalandhonesty. The default bars span several dimensions per kind and difficulty (aterminallane gates on Terminal-Bench, auilane on WebDev), at the 25th, 50th, 60th and 75th percentiles of the rungs measured or better, each with itsbarsWhyinscores.json. Your override'sbarsnow override per dimension;nullremoves a threshold. - Unscored is a warning. A rung with no value on a dimension the bars use takes its nearest stand-in's (ranked on price, context, release date, vendor, family, effort and its own values; Artificial Analysis's features with a key) as
inferred, andprofile validateanddoctorlist it as a "stand-in to confirm". The error "unscored rung without a treat-like" is gone. A save that fixes one of a profile's errors and adds none now goes through (profile set,profile_set, the dashboard's save), listing the errors still open. - treat-like.
catherd catalog treat-like --suggest <rung>ranks the three nearest stand-ins;--clear <rung>and--resetremove your mappings, naming first the profile rungs left on an inferred stand-in or left unscored. - Why a rung.
routereports each threshold of the lane's bar, the value used, its confidence and source (inferred values marked), the rung's speed and cost facts, and catherd's own run evidence ("12 lanes, 2 climbed, 1 partial"), which never changes routing;catalog_queryandcatalog listshow the same. In the dashboard,rin Profiles syncs and shows each source's age and last error,ishows a rung's values and runs, andtopens the treat-like picker with the three nearest stand-ins first. - Shipped scores.
catalog/scores.jsoncarries the keyless sources' values with their source, date and confidence (never Artificial Analysis's), attributed incatalog/ATTRIBUTION.md; a weekly workflow refreshes them in achore(catalog): refresh scoresPR.
- Public sources. models.dev, OpenRouter, LiteLLM, Arena (LMArena), Vectara's hallucination leaderboard and Epoch AI, keyless, plus Artificial Analysis with your own free key (