The workspace
Open Foundry from the sidebar. The left panel has two tabs:- Functions. Every function in your workspace, with their last test status (Passing, Failing, or Never run). Click New Function to start a new one.
- Integrations. Every integration available to Foundry. The New Integration button takes you to Settings.
- Chat. The conversation Foundry uses to generate and refine code.
- Test. Run the function with sample inputs.
- Integrations. Connect or disconnect integrations for this function.
- Configure. Edit the name, description, and AI tool prompt, or delete the function.
Build a function
Create the function
In Foundry’s Functions tab, click New Function. A blank function opens in the workspace.
Connect integrations
Open the function’s Integrations tab and connect the integration the function should call. You can add more than one, which is useful when a function needs to read from one tool and write to another. The first integration is the primary one and supplies the function’s default scope and OAuth connected account.If you don’t have the integration you need, an admin can create one in Settings → Integrations.
Describe what it should do
In the Chat tab, write what you want the function to do in plain language. Be specific:Foundry generates code, type-checks it, and runs a dry-run against the API.
List all active users and return their name, email, and role
Create a project with the given name, description, and team
Look up a contact by email and return their company and last activity date
Test with real inputs
Open the Test tab, fill in the inputs, pick a runtime environment (development, staging, or production), and click Run Test. Foundry shows the result, every HTTP request the function made, and any log output.
Refine in chat
If something isn’t right, ask in plain language from the Chat tab:
Add pagination so it fetches every page.
If the API returns a 429, wait and retry up to 3 times.
Only return users where status is active.
Foundry shows generation status (
Idle, In progress, Success, or Error) in the function workspace, so if a generation stalls or fails, you can see why.Want prompts you can copy? See Foundry examples for worked recipes, or Tips & troubleshooting for ways to get better code out of Foundry.
Advanced: the ActionContext SDK
This section is for users who want to read or hand-edit the generated TypeScript code. You don’t need any of this to build, test, or publish a function. Every function exports arun function that receives an ActionContext. The context gives you authenticated HTTP clients (one per integration), the Ravenna operations namespace, and runtime info.
Context properties
| Property | What it is |
|---|---|
ctx.integrations | A map of integration clients keyed by slug. Each has .fetch (auth-injected) and .baseUrl. |
ctx.ravenna | The Ravenna operations namespace. See the list below. |
ctx.log() | Writes to the function’s log output. |
ctx.workspaceId / ctx.organizationId | IDs for the current execution context. |
ctx.env | 'development', 'staging', or 'production'. |
ctx.workflowExecutionId | Set when the function is running as a workflow step. |
ctx.fetch, ctx.baseUrl, and ctx.auth still exist for backwards compatibility but are deprecated. They point at the primary integration. New code should use ctx.integrations.<slug> so it keeps working when more integrations are added to the function.Ravenna operations
Available onctx.ravenna:
Tickets: createTicket, updateTicket, addTicketComment, setTicketStatus, setTicketPriority, setTicketAssignee, addTicketFollowers, addTicketTags, moveTicket
Slack: sendSlackMessage, sendSlackDm, createSlackChannel
Users: getUser
Advanced: how generation and testing work
Foundry validates generated code in two phases, automatically:- TypeScript compilation catches syntax errors, type mismatches, and bad imports. Foundry auto-fixes failures up to 3 times.
- Dry-run execution runs the code in a sandbox without making real API calls, to catch issues like malformed URLs. Foundry auto-fixes failures up to 2 times.
development, staging, or production) that the function sees via ctx.env. The function runs in an isolated sandbox with the credentials resolved for each of its integrations, limited to 30 seconds per execution.
When you publish, Foundry runs a final validation, then generates an AI tool prompt that helps agents decide when to call the function. You can regenerate that prompt from the function’s Configure tab.
Learn how to use published functions in workflows and with AI agents.