Workbench
A safe scratch computer where your agent can run code, crunch data, and make files.
Sometimes an agent needs to do work, not just call an API — crunch numbers, parse a messy spreadsheet, generate a PDF, or run a quick script. The workbench gives it a safe, temporary computer to do exactly that, with the rest of Stacklink one call away.
What it's good for
Crunch & transform data
Make files
Glue steps together
Read documents
Turn it on
Enable it on the session. Your agent gets one Workbench gateway, STACKLINK_REMOTE_WORKBENCH.
It loads the exact deferred schema it needs before running code, using Bash, managing files, or
working with reusable runs:
const session = await stacklink.create({
tenantId, userId,
workbench: { enable: true, sandboxSize: 'standard' },
});Safe by design
The sandbox is isolated and disposable, and your credentials never enter it. When a script needs to call a provider, the workbench asks Stacklink to make the call — secrets stay on our side, never in the agent's code.
Pick a size
Most jobs run fine on the smallest size. Step up only when a job is data- or compute-heavy.
Scripts, file generation, and light data work.
Bigger datasets and more memory-hungry libraries.
The most demanding jobs — large transforms and parallel work.
Limits at a glance
Every run is bounded, so a runaway job can't run forever or flood your agent with output.
A long job doesn't have to block the agent — start it in the background and collect the result later with execution control.
What a script can reach from inside
The workbench isn't a sealed box. From inside a script, the agent can reach back into Stacklink and the web:
Provider tools
AI helper
Web search
Document extraction
Packages
Files & artifacts
Results come back as files
Anything the agent produces — a report, an export, a chart — is saved as an artifact with a download link, instead of being dumped into the conversation. Large tool responses are handled the same way: the agent gets a short preview plus a link, not a wall of text.
What it costs
The workbench is billed as premium usage — mostly by how long it runs, with a small step-up for bigger sizes. Set a budget to cap spend, and see Billing & usage for the numbers.
1,000 free premium ops every month
Plenty of workbench runtime to build and test your agent — plus 20,000 standard ops a month, free and hard-capped so there are never surprise bills.
For developers
STACKLINK_REMOTE_WORKBENCH accepts a small wrapper:
{
operation: 'run' | 'workspace' | 'files' | 'artifacts' | 'runs',
input: {},
contractVersion?: string,
}Load one exact schema first with STACKLINK_GET_TOOL_SCHEMAS using
stacklink.workbench.run, stacklink.workbench.workspace, stacklink.workbench.files,
stacklink.workbench.artifacts, or stacklink.workbench.runs. The run schema supports Python,
JavaScript, TypeScript, and Bash through the same durable execution lifecycle. Provider discovery
and execution remain in their canonical Stacklink provider tools; session-bound helper clients are
available inside the runtime.
Successful code and Bash runs are reusable by default. Before execution, Stacklink captures the
exact workspace/package/tier manifest. After completion, it creates one immutable version and
returns its state under execution.reusableRun. Use reusableRun: { mode: 'off' } for a scratch
run that should not become a version. To create the next version of an existing run, pass its exact
seriesId; Stacklink never guesses series membership from similar code or names.
Replay compares only stable observable behavior: terminal status and exit code, ordered output digests, stdout/stderr digests, structured-result digest, byte count, and artifact digest. Execution IDs, timestamps, cursors, duration, usage, and cost are deliberately excluded. A version can be published only after a replay matches, and publish or rollback requires the caller's expected currently published version so concurrent changes fail clearly instead of overwriting each other.
Per-tenant budgets cap maxCostMicros, maxDurationMs, maxLlmTokens, and maxArtifactBytes over a
daily, weekly, monthly, or all-time period.