Repository navigation
v1.1.0 — skills, deferred tools, search_tools
Contract changes are additive: a request that does not use the new fields behaves exactly as
before.
Added
- Skills (RFC 0001, SPEC §6.8).
skills[]in
the request, in theSKILL.mdshape:{ name, description, body, tools }. The engine appends
an index (name and description, sorted by name) tosystemand offers a built-in tool
load_skill. It returns the skill's instructions and makes the skill's tools available from
the next step. - Deferred tools.
tools[].defer_loading: truekeeps a tool out of the model's context
until a skill or a search activates it. A call to a tool that is not loaded yet gets
tool_not_loaded: it is not executed, does not count towardmax_tool_callsand is not
treated as a repeat. search_tools. A built-in tool offered when a deferred tool belongs to no skill. It runs
BM25 over tool names, descriptions and argument names, works the same on every provider and
is reproducible from the request. Matches activate from the next step; matches that belong to
a skill point the model toload_skill.- The prompt cache survives activation. On Anthropic models with tool search, activated
tools arrive astool_referenceblocks inside the conversation, so the cached prefix never
changes. On other providers the next step's tools array grows: one prefix cache miss per
activation. - Still stateless. What is loaded is derived from the history on every run, from
tool
messages the engine marksbuiltin: true(harness obligation H20). Trimming never drops a
turn that carries an activation in effect. - Built-in calls appear in
tool_calls[]withbuiltin: true. New journal events:
skill_loaded,skill_unknown,skills_restored,tool_search,
builtin_history_invalid. examples/sqlite-harness: a complete harness on SQLite with no
dependencies, end to end, with a chat in the terminal (npm run example:sqlite).
Changed
- Vercel AI SDK 6 (
ai6.0,@ai-sdk/anthropic3.0,@ai-sdk/openai-compatible2.0).
Usage is read from the SDK's unified split of uncached, cache read and cache write tokens;
billing still records the uncached input (SPEC §8.1). Ontool_choice: nonesteps Anthropic
now keeps the tools array and receivestool_choice: { type: "none" }. - README: a banner, badges, a comparison with neighbouring tools, and a quickstart with the
published image.
Docker: ghcr.io/paveler/theloop:1.1.0 (also 1.1, 1, latest).