Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.

Build with Stackyapper

Start with the task you want to repeat. Your agent can help connect a service, package a useful read, or create an interactive view over permitted data. Maintained apps and private connectors use your workspace's existing access rules.

Choose a starting point

  • Connect a service: open Apps → Add app → Browse apps. If your service is missing, choose Import app for an existing definition or MCP endpoint, or Build with your agent to prepare an API definition. Workspace owners and admins manage private connectors. See Custom connectors.
  • Repeat a read or calculation: publish a workspace skill with a reusable read tool. An owner or admin publishes it; each caller needs Code Mode access. See App skills.
  • Explore results in a view: ask your agent to build an interactive artifact. Hosting requires an approved Business workspace. Each viewer needs access to the underlying reads.
These pieces can work together. A saved tool can reuse an existing connection; an interactive view can present a permitted read. Authors do not lend their accounts or permissions to other users.

Start with a reusable tool

The review-time starter below estimates the minutes needed to review a given number of items. It calls no provider and stores no data, so you can inspect the package before adapting it.
A reusable read-tool package has three files:
review-time/ SKILL.md tool.json tools/main.js
Create SKILL.md with the instructions your agent will read:
--- 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.
Create 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:
if (!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 };
The starter returns the estimate and rejects negative or fractional item counts.
  1. Ask your agent to read the built-in skill-authoring skill and the starter.
  2. Have it validate and save a workspace draft with stackyapper_save_skill. A successful save validates the package without running it. Inspect the returned draft and files before publication.
  3. After approval, publish with stackyapper_publish_skill.
  4. Run it explicitly with 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.
Reading a skill does not execute its tool. Drafts remain private to admins; published tools follow the skill's audience and each caller's current access.

Add connected reads

Ask the agent to discover the exact permitted tools, inspect their schemas, and select a connection before changing the starter. The 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.
Saved tools support reads and calculations. Provider writes, direct HTTP, runtime dependency installation, persistent app state and scheduling are not part of this package contract. Keep credentials in connection setup.

Version 1 limits

The manifest accepts up to 16 named parameters of type 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.

Revise and reuse

Save changes as a draft and inspect them before publishing. Publication changes the current revision: agents must read that revision before running the tool again. Retiring the package stops future runs.
Use Export in Skills to retain a source copy. Portal Import opens a personal skill, and personal skills cannot contain reusable tool definitions. To move a tool package, have an authorized agent inspect its files and save a new workspace draft in the destination. Select connections there and publish separately. Source files do not transfer credentials, grants or approval.

Continue into an interactive app

Use the artifact authoring flow when you need filters, charts or a form over permitted reads. A private connector's Tools & access page can prepare a starter for a selected read.
Persistent customer-app storage is a separate private pilot. Saving a connector, skill or artifact does not enable that pilot or create a background agent.