1234review-time/ SKILL.md tool.json tools/main.js
SKILL.md with the instructions your agent will read:12345678910111213--- name: review-time description: Estimate the time to review a stated number of items using an explicit minutes-per-item assumption. --- Use this tool for a review-time estimate when the user supplies the number of items and estimated minutes per item. Ask for a missing assumption rather than inventing one. State that the result is an estimate, not measured work time. Read the current published revision and discover the advertised tool ending in `_run_app_tool`. Run this package explicitly with that tool, passing `items` and `minutes_per_item`. This tool calls no provider and stores no data. Reading this skill does not run it.
tool.json to declare its inputs and JavaScript entrypoint:{ "version": 1, "source": "tools/main.js", "parameters": { "items": { "type": "number", "required": true, "description": "Number of items to review." }, "minutes_per_item": { "type": "number", "required": true, "description": "Estimated minutes for each item." } } }
tools/main.js is an async function body with access to input and the
read-only tools bridge. It returns the result; it is not a standalone server.
Create tools/main.js with this function body:1234567891011if (!Number.isSafeInteger(input.items) || input.items < 0) { throw new Error('items must be a nonnegative safe integer'); } if (input.minutes_per_item < 0) { throw new Error('minutes_per_item must be nonnegative'); } const minutes = input.items * input.minutes_per_item; if (!Number.isFinite(minutes)) { throw new Error('estimate exceeds the supported numeric range'); } return { items: input.items, minutes_per_item: input.minutes_per_item, minutes };
stackyapper_save_skill. A successful save validates the package without
running it. Inspect the returned draft and files before publication.stackyapper_publish_skill.stackyapper_run_app_tool, using its ID, exact
current published revision, and arguments such as
{"items":12,"minutes_per_item":5}. The expected estimate is 60 minutes.tools.search,
tools.schemas, tools.connections and tools.call methods are described in
the Code Mode agent guide.
Use real continuation when paging, and report incomplete results.string, number or
boolean. Unknown arguments, missing required arguments and mismatched types
are rejected. Strings are limited to 1,024 UTF-8 bytes; numbers must be finite.
The JavaScript source is limited to 12,000 UTF-8 bytes. The complete skill
package follows the skill limits.