button.json spec in its button folder. It is the source of truth for runtime, arguments, HTTP settings, metadata, concurrency, and packaging fields.
.buttons/buttons/<name>/.
Example
Core fields
| Field | Meaning |
|---|---|
schema_version | Button spec version. Newly created buttons use version 2. |
name | Kebab-case button name. |
description | One-line description surfaced by buttons list, summary, and the board. |
runtime | shell, python, node, http, or prompt. |
args | Typed press-time arguments. |
timeout_seconds | Default timeout for this button. |
created_at, updated_at | UTC timestamps. |
Code buttons
Code buttons useruntime: shell, python, or node. The script lives next to button.json as main.sh, main.py, or main.js.
Arguments arrive as environment variables:
HTTP buttons
HTTP buttons useruntime: http.
| Field | Meaning |
|---|---|
url | URL template created with --url. |
method | HTTP method. Defaults to GET. |
headers | Header templates. |
body | Request body template. |
max_response_bytes | Response body cap. Defaults to 10 MB for HTTP buttons. |
allow_private_networks | Allows loopback/RFC1918/link-local targets when true. |
allowed_host | Scheme/host lock derived at create time. Template args cannot redirect to a new host. |
Prompt buttons
Prompt-only buttons useruntime: prompt and do not have a main.* file. Their instruction lives in AGENT.md and is returned in the prompt field when pressed.
Code and HTTP buttons can also carry AGENT.md instructions; in that case the command runs first and the prompt is attached to the result.
Arguments
Args are declared at create time:string, int, bool, and enum.
Output schema
output_schema is optional JSON Schema for the button’s JSON stdout. Drawers use it to type-check refs and auto-connect compatible fields.
${step_id.output.<field>}.
Queues
queue limits concurrent presses.
key scopes that pool per press, so one queue can enforce a per-user or per-account limit.
Packaging fields
Installed buttons can include package metadata:| Field | Meaning |
|---|---|
tags | Groups used by buttons install tag:<tag>. |
version | Button content version. |
requires | Other buttons to install with this one. |
requires_batteries | Battery keys the button needs. Values are never shipped. |
source | Install source reference. |
content_hash | Hash recorded at install time for drift/update checks. |
Board metadata
pinned: true surfaces a button as a large card at the top of buttons board.