Install any skill in seconds. Free to start, no credit card required.
Get Started Free →butterbase-ai/journey-substrate
Use as the optional substrate-linking stage of the Butterbase journey, after deploy and before submit. Asks whether to connect the deployed app to the owner's substrate (so functions get ctx.substrate). Skipped by default in hackathon mode.
Passed 13 of 18 test cases with the skill, and 4 of 18 without it.
and 8 more in the full report
11 fixed5 passed either way6 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 10 test cases the skill fixed. Same model, same prompt, with and without the skill.
Link app `app_cli_99` to the user's substrate using the Butterbase command-line interface. What is the full CLI command string?
| Checked | Without skill | With skill |
|---|---|---|
| Outputs butterbase apps link-substrate app_cli_99 | Missed | Passed |
The instructions your model reads when the skill loads.
Connect the deployed app to the owner's substrate so functions get ctx.substrate injected at cold start. Skip if the user has no AI-agent / memory use case.
Invoke automatically when the journey orchestrator's cursor reaches substrate. The row is optional in the checklist; skip silently if the user declines.
Refresh docs. Call butterbase_docs with topic: "substrate". If the plan mentions AI memory / agent state / cross-session knowledge, also WebFetch https://docs.butterbase.ai/substrate. Skip if docs/butterbase/03b-docs-cache.md already covers substrate.
Confirm. Ask the user:
"Connect
<app_id>to your substrate? This lets the app's functions read/write your agent memory viactx.substrate. You can disable later. (yes / skip)"
Default: skip.
On skip: mark the row - [x] substrate (skipped — no agent memory needed) in docs/butterbase/00-state.md. Write docs/butterbase/04b-substrate.md with one line: Skipped on <date>. Return.
On yes:
a. If platform_users.substrate_provisioned_at is NULL for the caller, call POST /v1/me/substrate/provision first (or invoke whatever MCP wrapper exists — check butterbase_docs topic substrate).
b. Link the app. Use whichever surface you have:
manage_app with { action: "link_substrate", app_id: "<app_id>" }.butterbase apps link-substrate <app_id>.POST /v1/me/apps/<app_id>/substrate-link with empty body and Authorization: Bearer <bb_sk_*> for the app owner. The route enforces caller == app owner and sets apps.substrate_user_id to the caller's id.
c. Verify: manage_app with { action: "get_config", app_id: "<app_id>" } and assert substrate_user_id is non-null.
d. Smoke: invoke any HTTP function the app already has and check ctx.substrate is defined (if the function logs it). If no function exists yet, skip the smoke and note in the artifact.Write artifact. docs/butterbase/04b-substrate.md:
---
linked_at: <ISO>
app_id: <id>
substrate_user_id: <id>
---
# Substrate Linkage
- App linked at <ISO>
test cases passed, vs 4 / 18 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.