Skip to main content

Manifest reference

defineApp() returns a twl-tool.app.v1 manifest. The TypeScript input has this top-level shape.

FieldTypeRequiredPurpose
keystringyesStable lowercase app slug
namestringyesUser-facing app name
versionstringyesInstallable app version
descriptionstring | nullnoCatalog and installation copy
permissionsstring[]noRequested platform permissions
catalogobjectnoCategory, runtime, tags, and featured state
uiobjectnoIcon, color, default surface, and surfaces
settingsobjectnoFriendly, installation-scoped workflow controls
extensionobjectnoContextual browser-extension actions
sourceobjectnoProvenance for a cloned Space Template
spacesRecord<string, SpaceDefinition>noExplicit Space hierarchy and placement
resourcesAppResourcesyesDurable app resources

Generated fields​

The SDK adds:

{
"format": "twl-tool.app.v1"
}

It also deduplicates permissions, creates the default root Space when needed, and selects the first surface when ui.defaultSurface is omitted.

Catalog values​

Categories:

chrome-tools | browser-agents | automation | data | forms | other

Runtime values:

chrome-extension | browser-agent | server

For the server's current JSON schema and node catalog, request GET /api/v1/apps-layer/platform-schema.

Chat preset fields​

A chat surface reuses the host AI chat and requires preset.workflow. Its optional preset fields include space, outputDocumentFolder, allowedTools, display-control flags, app instructions, and contextSources.

contextSources is an array of app-scoped @ mention providers. A Data Workspace row source has this shape:

{
key: string,
label: string,
type: 'dataWorkspaceRows',
table: ResourceReference<'dataWorkspaceTables'>,
workflowContextKey: string,
labelField: string,
descriptionFields?: string[],
filter?: {
field: string,
equals: string | number | boolean,
},
}

See Scoped AI chat for a complete example and workflow binding.

Workflow settings​

Workflow settings are discovered automatically from every installed workflow and its Actions catalog metadata. Optional settings.workflows entries customize labels, descriptions, grouping, and stable field keys for particular bindings; omitted safe inputs remain visible. Each field binds to an existing Actions catalog property and does not define a second form schema.

settings: {
workflows: [{
key: 'write-post',
label: 'Write a Social Post',
workflow: ref('workflowDefinitions', 'writePost'),
fields: [{
key: 'emoji-policy',
stepKey: 'generate_post',
property: 'emoji',
section: 'Writing preferences',
}],
}],
}

See Workflow settings for validation, persistence, and upgrade behavior.