Pane
NPM · @PANEUI/MCP · SCANNED AUG 3
Hand a human a rich interactive UI by URL and get structured data back, from any MCP client.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security87
- No malware found by supply-chain analysis.Pass
- Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency71
- Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
- Cryptographically verified build provenance (signed, bound to aerolalit/paneui). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 48 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability72
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 6458 tokens (~239/item across 27 items; 26 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · @paneui/mcp
claude mcp add aerolalit-pane -- npx -y @paneui/mcp
codex mcp add aerolalit-pane -- npx -y @paneui/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"aerolalit-pane": {
"type": "local",
"command": [
"npx",
"-y",
"@paneui/mcp"
],
"enabled": true
}
}
} openclaw mcp add aerolalit-pane --command npx --arg -y --arg @paneui/mcp
mcp_servers:
aerolalit-pane:
command: "npx"
args: ["-y", "@paneui/mcp"] {
"mcpServers": {
"aerolalit-pane": {
"command": "npx",
"args": [
"-y",
"@paneui/mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Aug 26 +54
- Install scripts: unverified → pass ▲ security
- Provenance: unverified → pass ▲ security
- Known CVEs: unverified → partial ▲ security
- Malware scan: unverified → pass ▲ security
- The attested source repository moved: aerolalit/paneui security
- Schema quality: 100 → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- License: unverified → pass ▲ functional
- Dependency health: unverified → partial ▲ functional
- Maintenance: unverified → pass ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Stability: unverified → 0.23 ▲ functional
- Schema quality: unverified → good ▲ functional
- Licence: MIT functional
- 31 Jul 26 −7
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +8
- Malware scan: pass → unverified ▼ security
- Schema quality: unverified → 100 ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- 28 Jul 26 −26
- Schema quality: 100 → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- 27 Jul 26 44
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Analysed npm/@paneui/[email protected]
Provenance verified
Ecosystem: npm · Outcome: verified
Reason: verified
- Source repo:
- aerolalit/paneui
- Certificate issuer:
- https://token.actions.githubusercontent.com
- Certificate SAN:
- https://github.com/aerolalit/paneui/.github/workflows/release.yml@refs/tags/v0.0.26
- Rekor log index:
- 1809262898
- Predicate type:
- https://slsa.dev/provenance/v1
- Subject digest:
- sha512:ae965e3371fc074d588e96ea33ac4b001fcf444718342ce9fb5c278985cd6d7727fefd2285a4a5508e8b3ebce83f8fc61190f7f9bb59ae791057e0bce
- Discovery method:
- attestation_endpoint
Dependencies 96 packages
96 packages in the resolved dependency tree · 95 deprecated · 29 stale.
The dependency tree was only partially resolved, so these counts may be incomplete.
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
agent Manage Agent Identity ~199
Agent identity + binding. ONE tool with an `action` enum: whoami (the resolved relay URL, active profile, whether a key is configured — no network, no secrets) | claim (bind this agent to a human via a one-shot claim code from their Settings UI; one-way) | logout (clear the locally-saved key/profile; does NOT revoke it on the relay — use the `key` tool's revoke for that).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Agent identity. whoami: show the resolved relay URL, active profile, and whether a key is configured (no network, no secrets). claim: bind this agent to a human via a one-shot claim code the human ge… |
| code | string | — | The one-shot claim code (required for claim). |
No output schema declared.
No examples provided.
attachments Manage Attachments ~450
Binary attachments (images, PDFs, audio, video) referenced from event payloads / input_data via `format: pane-attachment-id`. ONE tool with an `action` enum: upload | download | show | list | delete | mint_token | revoke_token | list_tokens. upload reads an ABSOLUTE file_path; download writes to an ABSOLUTE out_path (or returns base64). Scope an upload to agent (default, reusable), pane, or template. mint_token returns a /b/<token> capability URL (ONCE) a browser can GET without your API key.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Binary attachment operations. upload: read a local file (file_path) and upload it; scope agent|pane|template. download: fetch bytes by attachment_id to out_path (absolute) or return base64. show: met… |
| attachment_id | string | — | Attachment id. Required for download/show/delete/mint_token/revoke_token/list_tokens. |
| cursor | string | — | list pagination cursor. |
| file_path | string | — | upload: ABSOLUTE path to the local file to upload. |
| filename | string | — | upload: display filename (defaults to the file's basename). |
| limit | integer | — | list page size (1..100). |
| mime | string | — | upload: advisory Content-Type (the relay sniffs the bytes regardless). |
| once | boolean | — | mint_token: token self-deletes on first GET. |
| out_path | string | — | download: ABSOLUTE path to write the bytes to. If omitted, the bytes are returned base64-encoded in the result. |
| pane_id | string | — | Required when scope=pane. |
| scope | string | — | upload scope (default agent). |
| template_id | string | — | Required when scope=template. |
| token_id | string | — | revoke_token: the token id to revoke. |
| ttl_seconds | integer | — | mint_token: per-token TTL (clamped by scope default). |
No output schema declared.
No examples provided.
create_pane Create Pane ~962
Hand the human a rich interactive UI by URL and (optionally) get structured data back. Build the UI as inline HTML (pass `name` + `html`) OR reuse a saved template (pass `template_id`). The relay hosts it and returns a URL. ALWAYS give the returned url to the human — paste it into the conversation and ask them to open it. Reach for this whenever a text reply is the wrong shape: forms, approvals, pickers, surveys, dashboards, diff/doc review, wizards. If the page captures input it emits events back to you (poll them with get_events) or mutates record collections (the record tools). BEFORE authoring: call get_skill for the events-vs-records decision + schema grammar, and the `taste` tool (action: get) for the human's house style — both shape the HTML you write. Returns { pane_id, url, urls, title, expires_at }.
| Name | Type | Req | Description |
|---|---|---|---|
| callback | object | — | Optional webhook callback config so the relay POSTs new events to your endpoint. Shape per the relay's callback schema (e.g. { url, secret? }). Most MCP agents poll with get_events instead. |
| context_key | string | — | Optional natural key (e.g. 'pr-42'). Repeated create_pane calls with the same (template, key) return the SAME pane — makes retries idempotent. |
| event_schema | object | — | Inline form only. Declares which events the page (and you) may emit and validates each payload. Shape: { events: { '<type>': { emittedBy: ['page'|'agent'...], payload: <JSON Schema> } } }. OMIT for a… |
| html | string | — | The pane's UI as a complete inline HTML document. To send data back to you, the page calls window.pane.emit(eventType, payload) — every emitted eventType MUST be declared in event_schema with 'page'… |
| icon_attachment_id | string | — | Optional per-pane icon as a ready raster-image attachment id (png/jpeg/webp/gif). Upload it first via the `attachments` tool (scope: pane or agent). |
| icon_emoji | string | — | Optional single-emoji icon override for this pane. |
| input_data | object | — | Optional seed data for this pane instance, readable in the page as window.pane.inputData (e.g. the diff to review, the options to pick from). |
| input_schema | object | — | Inline form only. Optional JSON Schema validating input_data. Needed if input_data references uploaded attachment ids the page must download. |
| metadata | object | — | Optional opaque JSON you can attach to the pane for your own bookkeeping (never shown to the human, queryable via run_query). |
| name | string | — | Short human-readable label for the auto-created template (e.g. 'Deploy approval'). REQUIRED when you pass `html` (inline form); omit when reusing an existing template via `template_id` (it inherits t… |
| participants | integer | — | Optional number of distinct human participant URLs to mint (default 1). Each gets its own URL in the returned `urls` array. |
| preamble | string | — | Optional one/two-line context shown above the UI — 'who is asking, and why'. |
| record_schema | object | — | Inline form only. JSON Schema 2020-12 doc with an `x-pane-collections` extension declaring this pane's mutable record collections (todos, comments…). OMIT for an event-only pane. |
| tags | array | — | Optional per-pane filter tags (merged with the template's tags). ≤20 tags, ≤50 chars each; 'favorite'/'favorites' are reserved. |
| template_id | string | — | Reuse an existing named template (id or slug) instead of inline HTML. The template's pinned version supplies the HTML + event/input/record schemas. Mutually exclusive with `html`/`name`/`event_schema… |
| template_version | integer | — | With `template_id`: pin this pane to a specific template version. Defaults to the template head's latest version. |
| title | string | — | Optional browser tab title for the human (≤80 chars). Defaults to `name`. |
| ttl_seconds | integer | — | Optional pane lifetime in seconds. The relay clamps to its max; the returned expires_at is authoritative. |
No output schema declared.
No examples provided.
delete_pane Delete Pane ~80
Close/delete a pane (idempotent — an already-closed pane still succeeds). The human's URL stops working. To merely edit a pane keep it alive with update_pane; to recover a soft-deleted pane use the trash tool (action: restore).
| Name | Type | Req | Description |
|---|---|---|---|
| pane_id | string | yes | The pane id to close/delete (idempotent). |
No output schema declared.
No examples provided.
delete_record Delete Record ~102
Soft-delete a row from a pane's record collection. The page sees the deletion live (the row becomes a tombstone in list_records). Pass if_match for an optimistic-locked delete. Returns { deleted: true }.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | The record collection name. |
| if_match | integer | — | Optional optimistic-lock version. |
| pane_id | string | yes | The pane id. |
| record_key | string | yes | The key of the record to delete. |
No output schema declared.
No examples provided.
delete_record_collection Delete Record Collection ~153
Drop a WHOLE per-pane record collection at once: every row plus the collection row itself. Use this to reset or remove a collection (todo list, comment thread, board) rather than deleting rows one by one with delete_record. Owner-only and destructive, so it requires confirm:true. Collection names are immutable, so to rename a collection drop the old one and write under the new name. Returns { deleted: true, collection }.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | The record collection to drop in its entirety. |
| confirm | boolean | yes | Required (true) to drop the whole collection. This removes every row plus the collection row itself and cannot be undone. |
| pane_id | string | yes | The pane id. |
No output schema declared.
No examples provided.
feedback Manage Feedback ~174
Send or list feedback to the relay operator. ONE tool with an `action` enum: create (a bug|feature|note with a message, optional pane_id) | list (the agent's own submissions, newest first, paginated by before).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Feedback to the relay operator. create: submit a bug|feature|note with a message (optional pane_id). list: the agent's own submissions, newest first. |
| before | string | — | list cursor from a prior page's next_before. |
| limit | integer | — | list page size (default 50, max 100). |
| message | string | — | Message body (required for create). |
| pane_id | string | — | Optional pane this feedback relates to (create). |
| type | string | — | Feedback category (required for create). |
No output schema declared.
No examples provided.
get_events Get Events ~227
Poll a pane's append-only event log for what the human did (form submissions, approvals, picks). This is how you receive the round-trip result — there is no push/streaming in MCP. Poll loop: call with no `since` first; process the returned events; remember next_cursor; call again passing it as `since` to get only newer events. To WAIT for a human who hasn't acted yet, pass wait_seconds (~25) so the relay holds the request open until an event arrives or it times out, then call again with the same cursor. Returns { events, next_cursor }.
| Name | Type | Req | Description |
|---|---|---|---|
| pane_id | string | yes | The pane id to read events from. |
| since | string | — | Opaque cursor from a previous get_events call's next_cursor. Omit on the first call to read from the beginning. |
| wait_seconds | integer | — | Optional long-poll: how long the relay holds the request open waiting for a new event (0–30s). Use ~25 when waiting for a human to act, then call again with the same cursor. |
No output schema declared.
No examples provided.
get_pane_state Get Pane State ~75
Fetch a pane's current metadata (status, title, template version, timestamps, expires_at) WITHOUT its event log. Use it to check whether a pane is still open or has expired. To read what the human did, use get_events.
| Name | Type | Req | Description |
|---|---|---|---|
| pane_id | string | yes | The pane id returned by create_pane. |
No output schema declared.
No examples provided.
get_record Get Record ~87
Fetch a single record row by its key from a pane collection (scans the collection — fine for a one-off lookup, not a hot loop). Returns { record } or an isError record_not_found.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | The record collection name. |
| pane_id | string | yes | The pane id. |
| record_key | string | yes | The key of the record to fetch. |
No output schema declared.
No examples provided.
get_skill Get Skill Guide ~116
Fetch the relay's auto-updating SKILL.md (the full Pane usage guide) — UNAUTHENTICATED, needs no API key. Call this to self-teach the Pane workflow (events vs records, schema grammars, the poll loop) before driving the other tools. Pass version_only:true to get just the relay's skill version string (to check if a cached copy is stale).
| Name | Type | Req | Description |
|---|---|---|---|
| version_only | boolean | — | If true, return only the relay's current skill version string instead of the full SKILL.md markdown. |
No output schema declared.
No examples provided.
key Manage API Key ~142
Inspect or revoke the calling agent's API key. ONE tool with an `action` enum: list (key info — agent_id, key_prefix, timestamps) | revoke (self-destruct the agent's OWN key; it stops working immediately and is irreversible — pass confirm:true). The relay scopes keys to the caller, so both act only on your own key.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The calling agent's API key. list: key info (agent_id, key_prefix, timestamps). revoke: self-destruct the agent's OWN key — it stops working immediately and is irreversible (requires confirm:true). |
| confirm | boolean | — | Required (true) for revoke. |
No output schema declared.
No examples provided.
list_panes List Panes ~158
Enumerate YOUR agent's panes (newest first). Use it to find a pane_id you lost, audit what's open, or get a cursor for pagination. No secrets in the response (participant tokens are unrecoverable — mint a fresh URL with the participant tool). Filter by status (open|closed|all) or template_id. Returns { items, next_cursor }.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | — | Opaque cursor from a previous page's next_cursor. |
| limit | integer | — | Page size (default 50, max 200). |
| status | string | — | Filter by effective status. Default: open. |
| template_id | string | — | Filter to panes instantiated from a specific named template (head id, not version id). |
No output schema declared.
No examples provided.
list_records List Records ~221
List rows in a pane's mutable record collection (todo list, shopping list, kanban board, comment thread). Records are the right primitive when the page shows several mutable items and the CURRENT state matters more than the history. This also doubles as the POLL/watch for records (no streaming in MCP): pass the prior next_since to fetch only newer/changed rows. include_tombstones:true surfaces deletions. Returns { records, next_since, has_more }.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | The record collection name declared in the pane's record schema. |
| include_tombstones | boolean | — | Include soft-deleted rows (deleted_at set) so you can observe deletions. Default false. |
| limit | integer | — | Optional page size (max 200). |
| pane_id | string | yes | The pane id. |
| since | integer | — | Optional cursor (next_since from a prior call). Also the POLL handle: to watch a collection (no streaming in MCP), call repeatedly passing the previous next_since to fetch only newer/changed rows. |
No output schema declared.
No examples provided.
participant Manage Participants ~160
Manage a pane's participant URLs (recovery + leak-containment). ONE tool with an `action` enum: list | new | revoke. Use `new` when you lost the original URL (the plaintext token is returned ONCE — save it). Token URLs are stored hashed and cannot be recovered.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Manage a pane's participant URLs. list: every participant (active + revoked) — use it to find a participant_id. new: mint a FRESH human URL on an existing pane (the plaintext token is returned ONCE —… |
| pane_id | string | yes | The pane id. |
| participant_id | string | — | The participant id to revoke (required for revoke). |
No output schema declared.
No examples provided.
run_query Run SQL Query ~311
Run read-only SQL over YOUR scoped data (panes, records, events) — the relay scopes every row to panes you own. Use it to summarise activity, find panes/records by content, or build a report. Tables + columns and JSON projection operators are documented on the `sql` parameter. Default output is { columns, rows, truncated, scope, elapsed_ms } (format:json); csv/tsv/table render the rows as text. Capped at 10,000 rows; 10s timeout.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | — | Output format. Default json (columns+rows+meta). csv/tsv/table render the rows as text. |
| pane_id | string | — | Scope the query to a single pane (resolves a view_conflict when two of your panes share a collection name with different schemas). |
| sql | string | yes | Read-only SQL (SELECT/WITH/SHOW/DESCRIBE/EXPLAIN/PRAGMA) over your scoped data. Tables: panes(id,title,template_id,template_version,status,created_at,expires_at,deleted_at,metadata,input_data), recor… |
No output schema declared.
No examples provided.
send_to_pane Send to Pane ~188
Push an event INTO an open pane — update the live UI the human is looking at (progress, a new message, a status change, fresh data). The event type must be declared in the pane's event_schema with 'agent' in its emittedBy. For mutable collections (todos, line items, comment threads) prefer the record tools instead. Returns { event, deduped }.
| Name | Type | Req | Description |
|---|---|---|---|
| data | — | yes | Event payload — any JSON value valid against the type's payload schema. Use {} or null for a no-payload event. |
| idempotency_key | string | — | Optional dedup key — a repeat send with the same key is a no-op. |
| pane_id | string | yes | The pane id to push the event into. |
| type | string | yes | Event type. Must be declared in the pane's event_schema with 'agent' in its emittedBy list. |
No output schema declared.
No examples provided.
share Manage Pane Sharing ~230
Identity sharing on a pane (layered on top of participant tokens). ONE tool with an `action` enum: list (access_mode + grants) | invite (a human by email, role participant|viewer) | set_access (the /p access mode: invite_only|link|public) | revoke (one grant by id). Token (/s/<token>) links are independent of access_mode and keep working.
| Name | Type | Req | Description |
|---|---|---|---|
| access_mode | string | — | Access mode for set_access. |
| action | string | yes | Identity sharing on a pane. list: access_mode + all grants. invite: invite a human by email (role participant|viewer). set_access: set the /p access mode (invite_only|link|public). revoke: remove one… |
| string | — | Invitee email (required for invite). | |
| grant_id | string | — | Grant id to revoke (required for revoke). |
| pane_id | string | yes | The pane id. |
| role | string | — | Grant role for invite (default participant). |
No output schema declared.
No examples provided.
taste Manage UI Taste Notes ~165
Read / write / clear the agent's freeform UI taste notes (a small markdown document of presentation preferences learned from human feedback — 'denser layout', 'no rounded corners'). ONE tool with an `action` enum: get | set | clear. Call `get` BEFORE generating a pane so prior feedback shapes the output; `set` does a whole-document replace (not append). Keep entries about UI/presentation only.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | The agent's freeform UI taste notes (markdown) — presentation preferences learned from human feedback. get: read them before generating a pane. set: whole-document replace (taste, non-empty). clear:… |
| taste | string | — | The full markdown notes (required for set; whole-document replace, not append). |
No output schema declared.
No examples provided.
template Manage Templates ~616
Manage reusable, versioned UI templates (author once, instance many times via create_pane's template_id). ONE tool with an `action` enum: create | version | update | search | list | show | get_version | delete | publish | unpublish | search_public | set_icon. Required fields per action are documented on the `action` parameter. A template is HTML + an event schema (+ optional input/record/template-record schemas); a pane is one use of one version of it.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Which template operation to run. create: a new named template (needs name+html). version: append a new immutable version to an existing template (id+html). update: patch head metadata (name/slug/desc… |
| clear | boolean | — | set_icon: clear both the emoji and image icon. |
| confirm | boolean | — | Required (true) for the destructive `delete` action. |
| description | string | — | Prose description (create/update). |
| event_schema | object | — | Event schema (create/version). Omit for a view-only template. |
| html | string | — | HTML template body / source (required for create + version). |
| icon_attachment_id | string | — | set_icon: a ready template-scoped raster-image attachment id. |
| icon_emoji | string | — | set_icon: a single-emoji icon. |
| id | string | — | Template id or slug. Required for version/update/show/get_version/delete/publish/unpublish/set_icon. |
| input_schema | object | — | Per-pane input_data JSON Schema (create/version). |
| limit | integer | — | search_public page size (1..50). |
| name | string | — | Template display name (required for create). |
| offset | integer | — | search_public offset. |
| query | string | — | Free-text search (for search / search_public). |
| record_schema | object | — | Per-pane record collections schema (create/version). |
| scopes | array | — | verb:noun permission scopes for publish (e.g. ['read:agent']). Empty array clears them. |
| slug | string | — | Stable agent-chosen handle (create/update). |
| tags | array | — | Search keywords (create/update). |
| template_record_schema | object | — | Template-level (shared) record collections schema (create/version). Set this before using the template_records tool. |
| template_type | string | — | Source kind. Default html-inline; html-ref treats html as a URL. |
| version | integer | — | Version number (required for get_version). |
No output schema declared.
No examples provided.
template_records Manage Template Records ~288
CRUD for TEMPLATE-level record collections — owner-curated content anchored to a template head and visible to every pane derived from any of its versions (vs per-pane records, which are the discrete record tools). ONE tool with an `action` enum: list | get | upsert | update | delete | delete_collection. The template version must declare the collection via template_record_schema (set it with the `template` tool first).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Operation on a TEMPLATE-level (owner-curated, shared across every pane of the template) record collection. Same grammar as the per-pane record tools but scoped to a template head. The template versio… |
| collection | string | yes | The template-level collection name. |
| confirm | boolean | — | Required (true) for delete_collection (drops the whole collection). |
| data | — | — | Record body. Required for upsert/update. |
| if_match | integer | — | Optimistic-lock version for update/delete. |
| include_tombstones | boolean | — | Include soft-deleted rows in list. |
| limit | integer | — | List page size. |
| record_key | string | — | Record key. Required for get/update/delete; optional for upsert. |
| since | integer | — | List cursor (and poll handle). |
| template_id | string | yes | Template id or slug. |
No output schema declared.
No examples provided.
trash Manage Trash ~162
Manage soft-deleted panes + templates. ONE tool with an `action` enum: list | restore (pane id) | restore_template (template id|slug) | purge (pane id) | purge_template (template id|slug). purge bypasses the retention window and is permanent. Soft-deleted rows live in trash until the sweeper reclaims them.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Soft-delete trash. list: trashed panes + templates. restore/purge: un-trash or hard-delete a pane (id). restore_template/purge_template: same for a template (id|slug). purge bypasses the retention wi… |
| id | string | — | Pane id (restore/purge) or template id|slug (restore_template/purge_template). |
No output schema declared.
No examples provided.
update_pane Update Pane ~348
Edit instance-level fields on a LIVE pane in place (PATCH) without minting a new one — the pane keeps its id, URL, event log, and template pin. Settable: ttl_seconds OR expires_at (mutually exclusive), title, preamble, input_data (replaced wholesale + revalidated), metadata, tags, icon_emoji / icon_attachment_id (or clear_* to drop the override). Pass at least one field. Returns the full new pane state + an updated_fields array. To swap the HTML/schemas, use upgrade_pane instead.
| Name | Type | Req | Description |
|---|---|---|---|
| clear_icon_attachment_id | boolean | — | Clear the attachment icon override (fall back to the template's icon). |
| clear_icon_emoji | boolean | — | Clear the emoji override (fall back to the template's icon). |
| expires_at | string | — | Set expires_at to a specific future ISO-8601 timestamp. Mutually exclusive with ttl_seconds. |
| icon_attachment_id | string | — | Set the per-pane icon to a ready raster-image attachment id. |
| icon_emoji | string | — | Set the per-pane emoji icon. |
| input_data | object | — | Replace the pane's input_data wholesale (revalidated against the pinned template version's input_schema). |
| metadata | object | — | Replace the pane's metadata wholesale. |
| pane_id | string | yes | The pane id to edit. |
| preamble | string | — | New preamble (context band above the UI). |
| tags | array | — | Replace the per-pane tags. |
| title | string | — | New tab title. |
| ttl_seconds | integer | — | Reset the pane's lifetime to now + this many seconds. Mutually exclusive with expires_at. |
No output schema declared.
No examples provided.
update_record Update Record ~139
Update an existing row in a pane's record collection (replaces its data). Pass if_match with the row's current version for an optimistic-locked update — on a version mismatch the relay returns the current row so you can retry. Returns { record }.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | The record collection name. |
| data | — | yes | The new record body (replaces the row's data). |
| if_match | integer | — | Optional optimistic-lock version. On mismatch the update is rejected with the current row in details.current. |
| pane_id | string | yes | The pane id. |
| record_key | string | yes | The key of the record to update. |
No output schema declared.
No examples provided.
upgrade_pane Upgrade Pane ~490
Re-pin a LIVE pane to swap its HTML (design) + event/input/record schemas in place — same URL, no new pane. Two ways: (1) pass `html` to EDIT AN INLINE PANE'S HTML in one call — the relay appends a fresh version with that HTML and re-pins (schemas you omit are inherited from the current version, so to change only the HTML pass only `html`); inline panes only. (2) pass `template_version` to re-pin to a version you already appended with the `template` tool (action: version) — for named/reusable templates. By default a strict schema-compat gate refuses an upgrade that would narrow the schema (returns schema_incompatible_upgrade + details.breaks); pass force:true to apply anyway. Returns { pane_id, template_version, upgraded, breaks, compat }.
| Name | Type | Req | Description |
|---|---|---|---|
| event_schema | — | — | New event schema for the `html` version. Omit to inherit. |
| force | boolean | — | Override the strict schema-compat gate (compat=force). Without it, an upgrade that would narrow the schema is refused with schema_incompatible_upgrade + details.breaks. |
| html | string | — | INLINE EDIT: the new HTML. The relay appends a fresh template version with this HTML and re-pins the pane to it in one call — editing an INLINE pane's HTML in place (same id/URL), no separate version… |
| input_schema | object | — | New input schema for the `html` version. Omit to inherit. |
| pane_id | string | yes | The pane id to re-pin. |
| record_schema | — | — | New record schema for the `html` version. Omit to inherit. |
| template_record_schema | — | — | New template-level record schema for the `html` version. Omit to inherit. |
| template_type | string | — | Type for the `html` version. Default: html-inline. |
| template_version | integer | — | Target version of the SAME template. Defaults to the template head's latest version. Mutually exclusive with `html`. |
No output schema declared.
No examples provided.
upsert_record Upsert Record ~171
Create a row in a pane's record collection, or return the existing row if record_key is already present (deduped:true). Use to add a todo, a line item, a comment, etc. The collection must be declared in the pane's record schema with 'agent' allowed to write. If you're still designing the pane, call get_skill first for the records-vs-events decision and the x-pane-collections schema grammar. Returns { record, deduped }.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | yes | The record collection name. |
| data | — | yes | The record body — any JSON value valid against the collection schema. |
| pane_id | string | yes | The pane id. |
| record_key | string | — | Optional stable key. Reusing an existing key returns the existing row (deduped:true). |
No output schema declared.
No examples provided.