Install any skill in seconds. Free to start, no credit card required.
Get Started Free →butterbase-ai/journey-functions
Use as the functions build stage of the Butterbase journey. Implements the Functions section of 02-plan.md by delegating to function-dev for each function. Calls deploy_function per function; smokes each with invoke_function. Skipped if the plan has no functions.
Passed 13 of 18 test cases with the skill, and 5 of 18 without it.
and 8 more in the full report
11 fixed5 passed either way5 still failing1 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 11 test cases the skill fixed. Same model, same prompt, with and without the skill.
The state file docs/butterbase/00-state.md shows app_id: null, but docs/butterbase/03-preflight.md was created 1 hour ago. We are ready to run function deployment. What is the immediate step?
| Checked | Without skill | With skill |
|---|---|---|
| Triggers butterbase-skills:journey-preflight due to the null app_id | Missed | Passed |
The instructions your model reads when the skill loads.
Stage 3e of the guided journey. Implement and deploy each function in the plan.
journey when current_stage: functions./butterbase-skills:journey-functions.(n/a)) if the plan lists no functions.If docs/butterbase/03-preflight.md is missing, older than 24 hours, or 00-state.md has app_id: null, invoke butterbase-skills:journey-preflight first. Wait for it to return successfully before proceeding.
docs/butterbase/02-plan.md — the Functions section.docs/butterbase/00-state.md — for app_id.butterbase_docs with topic: "functions". For trigger types and ctx shape, also WebFetch https://docs.butterbase.ai/functions. Skip if cache is fresh.0.5. Check built-in integrations first. Before writing function code that calls an external SaaS for email / messaging / calendar / CRM / payments:
butterbase-skills:integrations. The function should call manage_integrations execute_action rather than installing a third-party SDK.butterbase-skills:payments. The function should use Stripe Connect via manage_billing unless the plan has explicitly chosen a regional gateway.@butterbase/sdk works server-side tooInside a function, prefer ctx.db / ctx.storage / ctx.user for the common cases — those are pre-wired and authenticated against the calling user. But for cross-app calls, scripts, or scheduled jobs that operate on multiple apps, instantiate @butterbase/sdk with a service key (bb_sk_) and use the same client surface as the frontend.
Example for a cron function that aggregates from another app:
import { createClient } from '@butterbase/sdk';
export async function handler(_request: Request, ctx: { env: Record<string,string> }) {
const other = createClient({
apiUrl: ctx.env.OTHER_APP_API_URL,
apiKey: ctx.env.OTHER_APP_SERVICE_KEY,
});
test cases passed, vs 5 / 18 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.