Install
$ agentstack add skill-butterbase-ai-butterbase-skills-journey-functions ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Journey: Functions
Stage 3e of the guided journey. Implement and deploy each function in the plan.
When to use
- Dispatched by
journeywhencurrent_stage: functions. - Directly via
/butterbase-skills:journey-functions. - Skipped (annotated
(n/a)) if the plan lists no functions.
Preflight
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.
Inputs
docs/butterbase/02-plan.md— the Functions section.docs/butterbase/00-state.md— forapp_id.
Procedure
- Refresh docs. Call
butterbase_docswithtopic: "functions". For trigger types and ctx shape, also WebFetchhttps://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:
- Email / Slack / etc. → invoke
butterbase-skills:integrations. The function should callmanage_integrationsexecute_actionrather than installing a third-party SDK. - Payments → invoke
butterbase-skills:payments. The function should use Stripe Connect viamanage_billingunless the plan has explicitly chosen a regional gateway.
@butterbase/sdk works server-side too
Inside 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 }) {
const other = createClient({
apiUrl: ctx.env.OTHER_APP_API_URL,
apiKey: ctx.env.OTHER_APP_SERVICE_KEY,
});
const { data } = await other.db.from('events').select('*').gte('created_at', ...);
// ...
return new Response('ok');
}
For server-side patterns, butterbase_docs topic: "sdk".
Build each function
For each function in the plan, in order:
- Print:
"About to build function: (trigger=). Proceed?". Wait foryes. - Invoke
butterbase-skills:function-devvia the Skill tool with the function spec (name, trigger, behaviour, dependencies) andapp_id. The wrapped skill scaffolds the handler, writes tests where appropriate, and callsdeploy_function. Reminder it must enforce: handler signature(request, { db, env, user })and must returnnew Response(...). - Smoke: call
invoke_functionfor HTTP/cron functions and confirm a 2xx + expected body. For WebSocket, defer the smoke to frontend integration. - Append one line per function to
docs/butterbase/04-build-log.md:
functions deploy_function ok
- After all functions are done, tick
- [x] functionsin00-state.md, setcurrent_stage:to the next unchecked stage. - Return to
journeyorchestrator (or ask"Continue to the next stage? (yes/no)").
Outputs
- Deployed functions in the Butterbase app.
- One line per function in
04-build-log.md.
Anti-patterns
- ❌ Letting a handler return a plain object — must be
new Response(...). - ❌ Skipping the smoke invocation. Cron functions in particular are easy to deploy and forget.
- ❌ Forgetting per-function env vars — use
manage_function action: update_env.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: butterbase-ai
- Source: butterbase-ai/butterbase-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.