Skip to main content
Telara
Blog

Open Source

TAP primitives can now build on one another

Luis Alcaraz · October 19, 2026

The biggest addition to TAP since our launch is composition. A saved primitive can now call other saved primitives, with each dependency pinned to an exact version and execution digest. We've also added a browser interface, expanded language support and made installation much smaller.

TAP already let agents save repeated work as small programs they could run again with new inputs. Now an agent that built a good evidence collector can use it inside a bigger procedure and skip writing it again.

For example, a customer review could use one block to find the account across CRM, support and billing, and another to collect its recent incidents. An investigation could reuse the same account lookup. Each person supplies the account and date range, and the agent works with the records the blocks return.

How a dependency is declared

The parent lists its children under uses. Each entry pins the child to a version and an execution digest and records the highest effect the child declares. The runner checks all of that before anything runs.

Each child keeps its own manifest, tool bindings, approvals and run record. The parent hands it inputs and gets an output back. The host supplies the tool connections and credentials, and the runner checks each child against its own declared access.

The whole tree shares one deadline and one request budget. The runner refuses a tree with a missing pin, a cycle or too many levels, and it refuses a parent that understates what a child can do. When you move a child to a newer version, tap diff shows the change so someone can review it.

A small example

The release-check example has a parent and two children. One child reads public GitHub release and check-run data. The other reads a local task file and returns the open tasks. The parent runs both and puts the results together with its reasons.

It's small on purpose, so you can read every file in a few minutes. The GitHub child declares its network access and the task child declares its file access, and you can see exactly where each permission lives. For a real release gate you would add your own list of required checks.

Browser steps

Primitives can now drive a browser through one interface that the runner provides. A package can open a page, read it, click or type, wait for something to load and close the tab.

The runner maps those calls onto whatever browser the client lends it. Today that means Claude in Chrome, the Codex browser during a Codex turn, or a Playwright backend you configure. The browser keeps its own sign-in. Navigating and acting both ask for approval.

Seven languages

The language examples now cover Bash, Python, JavaScript, TypeScript, Go, C++ and Rust. Compiled packages run as WebAssembly. The runner handles Preview 1 modules plus Preview 2 and Preview 3 components.

For Preview 3 it downloads a pinned official wasmtime build the first time a package needs it and runs it in a separate process. Tool calls, commands, file access and fetches still go through TAP's broker. The compiled package guide has the details.

Smaller additions

You can check a signed package against a publisher key you trust. The signature covers the execution digest, so editing the manifest or entrypoint breaks it. You'll still want to read the code before you run it.

tap kit export writes a Docker Sandbox Kit config for the runner, with a network policy built from the fetch origins your packages and their children declare. It writes the files and leaves building the image to you.

The npm install is much smaller. It pulls only the runner for your platform, about 13 MB where it used to be 66 MB. tap cache shows what's stored and tap cache prune clears out old interpreters and compiled files.

Try it

npm install -g @telaralabs/tap
tap setup
tap discover

tap discover looks through your local agent history for work you keep repeating and suggests primitives. The history stays on your machine. The authoring guide is the best place to start.

Composition works in Claude Code and Codex CLI. The README lists every other client and how far along each one is.

We build TAP at Telara. The runtime is MIT licensed and works without a Telara account.