Skip to content

Execute (text-only) actions

Open in ChatGPT Open in Claude

An execute-only action runs work and hands data back to the agent. There is no UI: when the agent invokes the action, it awaits your execute(params) function, takes whatever you return, and uses that data in its next chat message.

Reach for an execute-only action when the result is information the agent should reason over or relay in text: creating a record, calling an API, looking up a value. If you instead need to render an interactive component in the chat stream, see Execute and Render actions.

PropertyTypeDefaultRequiredDescription
execute(params: any) => Promise<any>N/AYesHandler for your async task; must return a Promise with data.
render<see Render Options below>N/ANoOptional UI: either a built-in component key or a custom render function to inject interactive UI.
awaitUserInputbooleanfalseNoWhen true, the agent will pause and wait for user interaction before continuing.
timeoutnumber5000NoMilliseconds to abort the execute call (default 5000).
sequenceDiagram
  participant U as User
  participant A as Agent
  participant H as execute(params)
  participant API as Your API
  U->>A: Natural-language request
  A->>A: Extract params from intent
  A->>H: Call action handler
  H->>API: fetch / POST / query
  API-->>H: Response data
  H-->>A: Return result object
  A->>U: Chat message using returned data

This create_task action POSTs the agent-supplied params to an API and returns the created record. Return every field the agent might need later in the conversation: here, including a link means the agent can answer a follow-up like “What’s the link?” without another call.

foldspace("when", "ready", () => {
foldspace.agent({ /* …common setup… */ })
.addActionHandlers({
create_task: {
execute: async (params) => {
const {title, body} = params;
const response = await fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
body: JSON.stringify({
title,
body,
userId: 'playground',
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
});
const data = await response.json()
// Return all relevant fields so the agent can reference them later
return {
id: data.id,
title: data.title,
body: data.body,
userId: data.userId,
// Include a link property—if the user asks "What's the link?", the agent can supply this
link: `https://jsonplaceholder.typicode.com/posts/${data.id}`
};
}
}
});
});