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
Connect integrations
Describe what it should do
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
Refine in chat
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.
Publish
Idle, In progress, Success, or Error) in the function workspace, so if a generation stalls or fails, you can see why.Dry Run mode
Dry Run lets you exercise a function end-to-end without changing external state. Use it to safely test functions that send email, create tickets, post messages, or update records. Turn on the Dry Run toggle in the function workspace header, then click Run Test from the Test tab as usual. When you publish a function, Foundry analyzes the code and picks one of two strategies. The active strategy shows up in the toggle’s tooltip:- Dry Run is available once a function has been published or had its dry-run code generated. New, never-published functions show the toggle disabled.
- The code editor switches to read-only while Dry Run is on, and a banner tells you which strategy is active. Turn Dry Run off before editing.
- Each mocked write is logged in the test output so you can see exactly what the function would have done.
- If you change the function and the dry-run variant looks stale, click the Sparkles button next to the toggle to regenerate it. Only workspace admins can regenerate dry-run code.
dryRunis also exposed on thePOST /foundry/actions/run-testAPI via theuseDryRunVariantflag.
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
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
Users: getUser
Slack is not a ctx.ravenna operation. To post to Slack from an action, select the Slack integration and call the Slack Web API directly with ctx.integrations.native_slack.fetch. Your workspace’s bot token is attached automatically, so you pass Slack arguments only (such as channel and text), never a workspace or team id.
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.