Every panel in Agentable is described as validated data. Agents can open, fill, compose, and request changes — always under human control.
Each tier increases in capability while remaining fully governed by the same validation and provenance system.
Pre-defined panels with fixed structure and immutable content. Ideal for documentation, onboarding flows, and branded headers.
Dynamic panels powered by defineSchemaPanel + DataAdapter. Supports structured data entry with live validation.
Agent-composed panels created at runtime via compose_panel. Ephemeral until pinned by a human.
Full React components registered through the CanvasEngine SPI. Maximum flexibility with complete access to the host DOM.
A generic settings panel defined using defineSchemaPanel.
import { defineSchemaPanel } from '@agentable/panels'
export const settingsPanel = defineSchemaPanel({
id: 'user-settings',
title: 'Account Settings',
schema: {
type: 'object',
properties: {
displayName: { type: 'string', minLength: 2 },
emailNotifications: { type: 'boolean', default: true },
theme: { type: 'string', enum: ['light', 'dark', 'system'] }
},
required: ['displayName']
},
adapter: new DataAdapter({
source: 'user-profile',
onMutate: (patch) => requestHumanApproval(patch)
})
})
All panels flow through the same internal representation and validation pipeline.
Every panel is normalized into an Internal Representation node containing type, schema reference, provenance metadata, and mutation history.
Any mutate action from an agent triggers a review request. Humans approve or reject changes before they are applied to the canvas.
Agent-origin panels display a clear badge showing the originating agent, timestamp, and confidence score.
| Capability | Tier 1 | Tier 2 | Tier 3 | Tier 4 |
|---|---|---|---|---|
| Static content | ||||
| Schema-driven fields | — | |||
| Runtime composition | — | — | ||
| Full React components | — | — | — | |
| Agent compose_panel | — | — |