
Overview
Each custom tool has four tabs:- Code — edit source files, view previously deployed versions, and inspect build logs.
- Test — run any version of the tool against test inputs from the browser.
- Config — manage the tool’s display metadata, compute settings, and input schema.
- Settings — configure the GitHub integration and admin options.
Versioning
Each tool is versioned with consecutive integers. Click any previously deployed version to load it in the code editor. Editing files and clicking Deploy builds a new version. Each version carries its own input schema, which you can edit from the Config tab. This means older versions remain runnable with the inputs they were deployed with, even if you change the schema later. If you save a new version without touching the Dockerfile or requirements files, the image is not rebuilt — only the source code is updated, so iteration is fast.Sharing and visibility
Use Manage Visibility in the top right of the tool page to share a tool with members of your organization.GitHub integration
You can connect a tool to a GitHub repository so that every push to a chosen branch creates a new tool version. Under the Settings tab you can:- Link or unlink a GitHub repository and branch.
- Toggle automatic publishing — on means new versions go live immediately; off means an admin manually publishes each version.
Build and runtime
Build. Images are built in AWS CodeBuild. You may base your image on any public Docker image. Your source code is not available during the build stage — it is mounted into the container at runtime — so your Dockerfile should install dependencies only and should notCOPY application code.
Runtime. Your tool runs inside a Linux Docker container. CUDA 12.4 is recommended for GPU tools; reach out if you need help resolving dependency issues. The runtime container has no internet access.
Available GPUs
SetgpuType in your config.json to one of the following. Use "None" for CPU-only tools.
gpuType | GPU |
|---|---|
None | CPU only |
T4 | NVIDIA T4 |
L4 | NVIDIA L4 |
L40S | NVIDIA L40S |
A10 | NVIDIA A10 |
A100 | NVIDIA A100 |
Tool ID
Every tool has a tool ID, a fixed unique identifier used throughout the platform — including when invoking the tool through the API, batch, pipelines, or MCP. The tool ID is chosen when you create the tool from the UI and is immutable after creation.Configuration (config.json)
A tool’s non-code settings live in a config.json file at the root of your repository. The same fields are editable in the Config tab of the UI. The schema is published at app.tamarind.bio/tamarind-tool.schema.json.
Top-level fields
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | yes | Human-readable tool name shown in the UI. Max 50 characters. |
description | string | no | One-liner shown on the tool card. |
functions | string[] | no | Long-description bullets — one string per bullet. |
gpuType | enum | no | GPU type for the container. "None" for CPU-only. See Available GPUs. |
cpu | integer | no | Number of CPU cores. Between 1 and 8. |
memory | string | no | Memory allocation, e.g. "12Gi" or "32Gi". |
envVars | object<string,string> | no | Environment variables passed to the container at runtime. Keys must be UPPER_SNAKE_CASE. |
inputs | Input[] | yes | User-facing input fields. Mirrors the Inputs section of the Config tab. |
Inputs
Each entry ininputs describes one user-facing field. Every input supports these common fields:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Programmatic name. Must match ^[A-Za-z_][A-Za-z0-9_]*$. Used as the key in API calls. |
type | string | yes | One of the input types below. |
displayName | string | no | Label shown in the UI. Defaults to name if omitted. |
descr | string | no | Help text shown under the field. |
required | boolean | no | Whether the user must provide a value. Defaults to false. |
type field determines which additional fields are allowed:
file — arbitrary file upload
file — arbitrary file upload
Accepts a file upload. You must specify the allowed extensions.
| Field | Type | Required | Description |
|---|---|---|---|
extension | string[] | yes | Allowed file extensions, lowercase, no dot. Example: ["csv", "tsv"]. |
pdb — protein structure
pdb — protein structure
A
.pdb file upload. Tamarind renders a structure preview in the UI automatically.sdf — small molecule
sdf — small molecule
An
.sdf file upload for small-molecule inputs.sequence — protein sequence
sequence — protein sequence
A protein sequence string. Rendered as a sequence input in the UI.
| Field | Type | Required | Description |
|---|---|---|---|
default | string | no | Default sequence value. |
smiles — SMILES string
smiles — SMILES string
A SMILES string for a small molecule.
| Field | Type | Required | Description |
|---|---|---|---|
default | string | no | Default SMILES value. |
text — free text
text — free text
A single-line text input.
| Field | Type | Required | Description |
|---|---|---|---|
default | string | no | Default text value. |
number — numeric input
number — numeric input
A numeric field with optional bounds.
| Field | Type | Required | Description |
|---|---|---|---|
default | number | no | Default numeric value. |
lowerBound | number | no | Minimum allowed value. |
upperBound | number | no | Maximum allowed value. |
boolean — checkbox
boolean — checkbox
A true/false toggle.
| Field | Type | Required | Description |
|---|---|---|---|
default | boolean | null | no | Default checked state. null means unset. |
dropdown — select from options
dropdown — select from options
A dropdown with a fixed list of string options.
| Field | Type | Required | Description |
|---|---|---|---|
options | string[] | yes | Available options. At least one required. |
default | string | no | Default selected option. |
Example config.json
Security
- Images are built in isolated AWS CodeBuild jobs. Source code is only mounted at runtime, never baked into the image.
- The runtime container has no internet access, so tools cannot exfiltrate inputs or reach external services.
- Tools are private to your organization by default. Use Manage Visibility to control who can see and run them.
Running a custom tool via the API
Custom tools are submitted through the same/submit-job endpoint as built-in tools. Pass your tool ID as type, and put your configured input values under settings:
settings must match the name fields defined in your tool’s inputs schema. See the API reference for polling job status and retrieving results.