Turn visible project context, a proven thread, skill, or workflow into a runnable Agent-Native app with simple buttons, visible agent steps, preview, and deployment handoff. Use when a user invokes `/turn-into-app` or asks to make a workflow into an app, including from Claude or ChatGPT on the web, including when the source is a spreadsheet link or upload.
The canonical home for this skill is turn-into-app in BuilderIO/skills
Classify the runtime before choosing a build path. The presence of a Dispatch or Builder connector does not make a coding host an online host:
start-workspace-app-creation, create_workspace_app, or any Builder
handoff for this path. The local implementation steps below are required.npm, pnpm, npx, agent-native create, or add-app; do not edit files,
create artifacts, or start a local dev server. After writing the bounded
source brief, call the connected Dispatch action
start-workspace-app-creation. Pass the brief and repeatable workflow in
prompt, plus the inferred appId, description, template, selected
resourceIds, and relevant source attachments when available. Pass supported
attachments as message context; do not paste binary data into prompt, and do
not assume an attachment becomes a file in the generated workspace. Reference
resources by ID rather than pasting whole knowledge files into the prompt. Then
report what Dispatch actually
returned — the branch, the path, and the status it gave. This host cannot run
or inspect the app, and the returned path can 404 until the branch merges and
deploys, so the handoff ends at a pending or unverified status unless a status
or verification action is available to call. This is the Builder handoff for
browser hosts only.create_workspace_app MCP tool. That tool is a local workspace scaffolder,
not the Builder handoff. Connect the Agent-Native Dispatch MCP connector
only; Dispatch uses the authenticated Builder Projects API to reuse or
provision the workspace project before starting the Builder Cloud Agent.For a local coding host this is an end-to-end local build skill, not a request for an app proposal. For a non-coding browser host, the end-to-end result is a verified Builder handoff and the resulting workspace app, not code written in the browser host.
/turn-into-app /some-skill means “turn /some-skill into an app.”Once the source brief identifies a repeatable workflow, the run proceeds without asking. This applies to both hosts: a local build and a browser handoff are equally non-interactive.
Do not ask the user for visual, product, copy, layout, template, integration, or implementation choices that can be resolved from the source. Take the source's recommended option; otherwise choose the most direct conventional default and record the assumption for later review.
One source-integrity exception: for a spreadsheet, if candidate workflows or the input/output mapping remain materially ambiguous after the bounded review, ask one compact confirmation question first. Show the recommended interpretation and let the user confirm, correct, or multi-select the candidates. Do not let that become a generic app-builder questionnaire.
Otherwise stop only for a genuine hard blocker: missing authorization, a destructive external action, an ambiguous target workspace, or no identifiable workflow at all.
Supported source paths today are visible Claude or ChatGPT Project context, the current Codex or host thread, a named skill, or a local workflow/transcript supplied as a path or attachment. An exported ChatGPT or Claude transcript can use the same local-file path today.
Claude and ChatGPT Project context is supported only when the host supplies it to the model in the current context. The MCP connector does not read hidden project chats, private URLs, account settings, or credentials. Do not claim private web access, invent an importer, add fake OAuth, or scrape a logged-in page. If the needed context is not visible, ask for an export, transcript, or attachment and treat that artifact as imported source material.
Read the attachment handoff reference when calling
start-workspace-app-creation with source files. It defines the supported upload
and public URL shapes, encoding rules, and handoff behavior.
Spreadsheet attachments are valid source artifacts. Read the spreadsheet source guide before working one — it carries the inference rules, the candidate review, and the failure states. The boundaries that matter before you open it:
When the source is a fresh Claude or ChatGPT Project, build a short source brief before creating the app. Read the host-provided context in this order:
Post this brief before scaffolding, on the timing step 1 sets. Use these headings: source and provenance, project goal, configuration and constraints, knowledge sources, repeatable workflow, inputs and outputs, judgment and review points, representative runs, integrations and permissions, and unknowns and assumptions. This is the compact contract for the app. It keeps the new app useful without pretending that hidden Project history was imported. See the fresh Project reference for the host setup and brief template.
If the visible Project context has no concrete repeatable job and no primary goal can be inferred, ask for one focused clarification or a representative artifact. Otherwise use the project's primary goal and source conventions; do not ask a questionnaire and do not fall back to a generic “what app do you want to make?” builder.
The generated app must implement the concrete workflow found in the source. It must not become a generic “what app do you want to make?” intake form.
Generated apps must follow the shared Agent-Native surface model:
/workflow, /automations,
/block, or the source's equivalent). Preserve the scaffold's full-page
chat route instead of replacing it with a domain form while leaving the
layout configured as a chat page.AgentSidebar for contextual AI. Every button-triggered
sendToAgentChat handoff should open or focus that sidebar and keep the user
on the current domain page.sendToAgentChat with bounded
context and openSidebar: true. Label deterministic local actions as local,
preview, or analyze instead of AI.DESIGN.md before styling and build to it.
Preserve existing brand tokens; a new unbranded app picks its own
product-fitting palette rather than inheriting a sibling app's accent.AgentSidebar must use the shared AgentKit chat
surface with one controller/transport. Do not add a legacy AssistantChat
renderer or a second stream owner. Keep assistant-ui usage inside the shared
composer integration; if linked dependencies need Vite aliases, resolve one
@agent-native/agentkit context and verify a real AgentKit handoff in the
browser.In a local code-agent runtime, read frontend-design for the visual direction
contract, aesthetic guidelines, and named review passes behind these rules.
Read the full available source, then write the brief out before the first scaffold command. This is the user's one cheap chance to catch a misread — after this point a correction costs a rebuild. A few lines per item; it is a checkpoint, not a document.
State it and keep going. Do not wait for approval; see Non-interactive by default. A brief that appears only in the handoff does not count — by then it cannot change anything.
The brief covers:
For a spreadsheet source, also include the workbook/file or spreadsheet ID, worksheet and range candidates, source snapshot/live semantics, formatting signals and their confidence, selected candidate destinations, and the exact confirmation or clarification still needed. A spreadsheet's inputs and outputs have two layers: the mapped source cells/ranges, and the generated app's user-facing results/actions. Name both so the Builder does not confuse an output cell with an app write or a historical value with an editable input.
Preserve useful judgment from the source, but do not turn a one-off answer, private data, or an unverified result into a product contract. If the source is not available or does not contain a repeatable job, say what is missing rather than claiming the app is complete.
Choose a short slug from the workflow and create a new directory. Never
overwrite an existing app. If the user supplied a directory, use it; otherwise
use apps/<slug> inside an existing Agent-Native workspace, or a new sibling
directory when working outside one.
Say once, before the first command, what this run will need to execute — dependency install, scaffold, typecheck, doctor, and a dev server. A host that asks per command will ask many times; one stated expectation up front is what keeps that from reading as something going wrong.
For a new UI-bearing standalone app, use the current Agent-Native scaffold and
then read the generated AGENTS.md:
npx @agent-native/core@latest create <app-directory> --template chat
cd <app-directory>
pnpm installWhen working inside an existing Agent-Native workspace, create the app from the workspace root instead:
pnpm exec agent-native add-app <slug> --template=chatDo not use create for an existing workspace; it scaffolds a new standalone
workspace rather than adding an app to the current one.
Use a first-party template only when it materially fits the workflow. Keep the new app independent from the source thread's working tree unless the user explicitly asks to extend an existing app.
Read the generated DESIGN.md before building the first screen and fill in the
visual direction as part of the app brief. Do not copy the previous app's
palette just because its tokens are nearby.
A scaffold or install step can fail, time out, or be denied when the host asks the user for permission. All three are the same situation: the app you were told to build does not exist yet. Retry once where a retry could plausibly help, then stop and report the blocker with the exact command, the failure, and what is already on disk.
Never work around it. Do not hand-build the app in another stack, do not edit a pinned dependency version to force an install through, and do not carry on against a half-created directory. An app that is not the real Agent-Native scaffold is a different product, not a smaller version of this one, and a handoff that reports success for it is worse than no app at all.
Do not choose a workaround yourself. Report the blocker and let the user choose. If they request one, name it in the handoff as a pending finding with what changed and why, so the next person does not inherit it silently.
Implement the smallest useful surface around the extracted brief. The app should make the repeated path obvious without hiding the agent's judgment:
actions/ with defineAction. The UI and agent must call the
same action surface.sendToAgentChat({ message, context, submit: true, openSidebar: true })
for intentional button-triggered agent work. Use submit: false when the
user should review or edit the proposed prompt in the AgentSidebar first.
Keep follow-up and revision prompts in that same thread; do not add a second
freeform textbox beside the result.Use the existing shadcn/ui primitives, Tabler icons, shared composer, and optimistic action patterns. Do not add a parallel CRUD API route for an action.
Use the framework's existing setup experience. The app should offer the normal “Connect Builder” and “Add your own keys” paths for AI setup. Do not create a second credential form or hardcode a provider key.
In local-development instructions, add a brief note that a developer can set
an environment variable such as ANTHROPIC_API_KEY or OPENAI_API_KEY before
starting the app; after restart, the setup prompt is no longer shown when the
key is available. Keep real secrets out of source, examples, and generated
content.
Turn-into-app apps should commit an agent-native.json app configuration so a
plain pnpm dev has the right first-run behavior without extra flags:
{
"version": 1,
"onboarding": {
"firstRun": {
"development": "connect",
"production": "connect-and-integrations"
}
}
}Either value keeps the shared Connect Builder / Add your own keys choice
visible; only "off" disables first-run onboarding entirely. Do not replace
this with a local credential form or remove the shared onboarding.
When the onboarding default needs code rather than a static mode map, add an
optional agent-native.config.ts with the same returned shape:
import { defineAgentNativeConfig } from "@agent-native/core/config";
export default defineAgentNativeConfig(({ isDev }) => ({
version: 1,
onboarding: {
firstRun: isDev ? "connect" : "connect-and-integrations",
},
}));The Vite preset loads this file automatically on supported Node versions. The JSON file remains the portable, inspectable fallback. See the Agent-Native app configuration guide for precedence, supported modes, and the boundary between committed config and deployment secrets.
For an account-free local preview, create the ignored local .env file with
AUTH_DISABLED=1 before starting the dev server. This is only for loopback
development; never commit or deploy this setting. AI/provider connections still
use the normal onboarding flow or the documented environment-variable keys.
From the new app directory:
pnpm devFor a fresh local test app, use the ignored .env with AUTH_DISABLED=1 so the
domain UI opens without an account; the committed app config makes shared
onboarding visible. Keep the process running so the user can try the app. Read
the actual server output and report the real local URL. If the app needs installation or a setup step,
complete it when possible and distinguish “not configured” from an unavailable
credential store.
Exercise the actual happy path, not only the source files:
Run the checks the generated app's own AGENTS.md names — typecheck and
agent-native doctor — and fix what they report before building.
Then run the supported build. For a standalone app, use the generated app's documented build and hosting path. For an app inside a workspace, use the workspace deploy command, for example:
npx @agent-native/core@latest build
npx @agent-native/core@latest deploy --preset netlifyUse vercel or another supported preset when that is the configured target.
Attempt deployment when the user requested it or the project already has the
required provider configuration. If external authentication, a production
secret, or a hosting decision is missing, finish local verification and report
the exact remaining handoff without claiming a live deployment.
Label evidence separately: locally running, locally verified, build-ready, deployed, and live-verified are different states.
End with the new app directory, local URL, visual direction, what the buttons do, account-free local-preview status, verification performed, deployment URL if it is real, and one precise pending step when something could not be completed. Keep the handoff short enough to use in a demo or recording.
Do not restate the brief here — step 1 already posted it. Report what changed from it instead: assumptions you added, anything the source turned out not to support, and choices made where the source was silent.
The handoff describes what exists, not what was intended. If the scaffold never completed, if a step was worked around, or if the app is not the real Agent-Native scaffold, that is the headline — not a caveat below one. A handoff cannot report the build as complete and list the framework the app is built on as a future improvement; if both would be true, the build is not complete.
f07726b
Canonical home
since Sep 10, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.