Pricing modes are renamed to what a maker would say: per_call (was flat), per_result (was per_unit; the count is `results`, `units` still read) and percent (was cost_plus). The old names still validate and are stored canonically, so no published tool changes. max_price_usd is no longer required. The hold is derived from what bounds the run: the caller's ceiling for percent (fees + part <= ceiling), the results_from input for per_result. The settled price never passes the hold. Every price surface (dashboard, treg hub ls, public page, catalog_get, search rows) now leads with what recent successful runs actually cost, provider fees and the seller part together, as one number or a low-high range. price_ranges reads a run's output only for the maker's own runs of a per_result tool, since catalog search calls it for every listed tool. Dashboard: the overview cards no longer overflow (the observed cost and the maker's price are separate cards, long values wrap), and the Price tab is display-only with a copyable prompt for the maker's agent. A form could set only a per-call price and silently flattened a variable one. Adds the engineering-team-size recipe (a script ladder over three catalog tools) with its matrix test. Docs: hub.md, hub-pricing-decisions.md (round 3), USAGE, CHANGELOG, llms.txt, skill.md and the plugin skill copies. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
3.2 KiB
Changelog
Notable changes to treg. Dates are release dates; anything under Unreleased is on main but not
yet published to PyPI or Homebrew.
The format follows Keep a Changelog, and treg uses semantic versioning.
Unreleased
Added
-
The tool hub — publish a tool made of other tools. A team can publish its own tool and let other people's agents call it. A hub tool is one folder of four files:
recipe.json(the contract), either a JSON steps recipe or arun.jsscript,check.json(sample inputs, run once for real at publish), andREADME.md. A fifth file,data.csv, travels with the tool and a script reads it asctx.data, so a spreadsheet becomes a callable tool with no database.Every step goes out through treg under its own hold: a catalog step runs as the caller, a step on one of the maker's own tools runs as the maker and is never metered. A caller therefore never sees the maker's keys, and
usesin the manifest names every host a tool may reach. A script runs in a separate process with no network of its own;ctx.callis its only road out.Three ways to price it, one
pricingblock per version, in the maker's words:per_call(a fixed price per successful run),per_result(a price times the integerresultsthe run returns, bounded by aresults_frominput), andpercent(a percent of the run's provider fees). The provider fees are billed to the caller on top. A variable price holds the most the maker can earn on that run (derived from the caller's ceiling or the results input, no declared cap needed) and settles the real amount, refunding the difference. Callers never see the mode: every surface leads with what recent successful runs cost, fees and price together, as one number or a low–high range. The price settles to the maker asearnedcredit, spendable at once.Two switches the maker controls, neither bumping the version:
listedputs the newest live version into catalog search, andpublic_logshows a run log on the tool's share page. A hub tool is out of search until its maker lists it. The run log shows outcomes only — time, result, duration, steps, units and the price paid — and never who called, the inputs, or the output.New commands:
treg hub init | run | publish | ls | earnings | price | list | unlist | log | retire. New MCP verbs:hub_create,hub_update,hub_mine. Every hub tool gets a share page at/hub/<id>, with an agent twin at/hub/<id>.md.The whole feature sits behind
TREG_HUB_ENABLEDand is off by default. While it is off every/hub/...route answers404, the agent-facing files carry no hub text, and catalog search returns no hub row.
Changed
- The agent plugins (Claude Code, Codex, Cursor, DeepSeek Harness, MiniMax) now always carry the
hub section. A plugin is a static file installed against any registry, including a self-hosted
one that may have the hub switched on, so it ships the knowledge and lets the agent find out at
run time. The section tells an agent to read a
404as "this registry does not offer the hub" rather than retrying.