creator docs · cli · generated
CLI command reference
This page is generated from the CLI's own --help output — the same text
npx vibes-diy <command> --help prints in your terminal — so it can't
diverge from the shipped CLI. For the task-oriented tour (what to reach for
and when), read the CLI handbook first.
vibes-diy
textvibes-diy CLI <subcommand>
> vibes-diy cli
where <subcommand> can be one of:
- app - Operate a deployed vibe: scheduled-task health, recovery, its ctx.log diagnostics, its visitor-facing chips, its look, its gallery screenshot, and whether signed-out visitors can write
- app-chats - List or read the runtime in-app chats stored by a deployed vibe (the app's own chat/image messages, NOT the codegen build transcript).
- chats - (removed) Use 'codegen-log' or 'app-chats' instead.
- claim-handle - Claim the handle your published apps carry (vibes.diy/<handle>/<app>) and make it your default. Run with no name to see suggestions — nothing is claimed until you name it.
- codegen-log - Inspect a vibe's codegen build transcript (the builder↔LLM conversation that generated its source). List chats, or show one chat's prompts / reconstructed model output.
- db - Read and write Fireproof documents
- secrets - Manage per-vibe secrets readable by backend.js via ctx.secrets (owner-only; values are write-only)
- recommend - Manage a vibe's recommended-apps chips (owner-only; the picks shown on its vibe card)
- retention - Audition lifecycle mail: preview one retention step in a real inbox, and reset its claim to preview it again
- developer - Delegate code push/edit/publish/codegen on a vibe to another account (owner-only; you keep revoke, unpublish/delete, and ownership)
- edit - Send a follow-up prompt to an existing vibe, write files to disk, and push live.
- generate - Generate a vibe from a text prompt and write it to disk. The server builds and releases it; on a terminal the chat stays open for follow-ups.
- list - List your vibes (ownerHandle/appSlug). Use --json for NDJSON output.
- login - Authenticate this device with vibes.diy cloud.
- mcp - Start an MCP server for AI agent data access (stdio transport)
- pull - Download source files of a deployed vibe to disk.
- push - Upload files from the current directory to a vibe.
- remix - Copy a vibe you can see into your account — files, chat history AND its look (theme, style, layout, icon, title). `--to handle/slug` names the destination; `--published` lands you on the live URL (clone) instead of in the editor; `--settings-only` carries just the settings into an app you already own.
- publish - Make a vibe live: promote its latest dev draft (or --fsId) to a new production release, and clear any unpublish tombstone. Use after editing in dev mode, or to bring an unpublished vibe back.
- unpublish - Take a deployed vibe down (reversible). De-indexes the slug and blocks its public URL/remix/version listing; code, data, and grants are kept. Bring it back with `publish`.
- versions - List every version of a vibe (fsId, mode, releaseSeq). Owner sees drafts; pull any with `pull --fsId`.
- assets - The files a vibe carries — uploads rather than source (upload one with `put-asset`)
- put-asset - Stream a file to the asset endpoint and print the resulting CID + URL.
- skills - List available skills or show a skill's content.
- themes - List available themes or show a theme's design markdown.
- variety - List the layout archetypes and flourishes `generate --variety` can pin.
- system - Emit the base system prompt to stdout.
- user-settings - Ensure/refresh user settings for the logged-in device.
For more help, try running `vibes-diy CLI <subcommand> --help`
## CLI Quickstart
### Deploy workflow
1. Run `npx vibes-diy system` to get the coding rules
2. Write `App.jsx` following the rules above
3. Run `npx vibes-diy push` to deploy — prints a live HTTPS URL
4. Edit and push again to iterate
### Other Commands
- `npx vibes-diy push --access gated` — deploy so anyone can view but only members write (`open` is the default, `private` is members-only)
- `npx vibes-diy push --access private` — deploy for you and the members you invite, and nobody else
- `npx vibes-diy push --app-slug other-name` — deploy to a different app slug instead of the directory name
- `npx vibes-diy unpublish <vibe>` — take a deployed vibe down (reversible; code and data are kept)
- `npx vibes-diy publish <vibe>` — make it live again, or promote a `--mode dev` draft to production
- `npx vibes-diy login` — authenticate this device (run once before first push)
- `npx vibes-diy mcp --help` — start an MCP server for AI agent data access (Claude Desktop / Cowork)
- `npx vibes-diy help` — show all available commands
vibes-diy app
textvibes-diy CLI app <subcommand>
> Operate a deployed vibe: scheduled-task health, recovery, its ctx.log diagnostics, its visitor-facing chips, its look, its gallery screenshot, and whether signed-out visitors can write
where <subcommand> can be one of:
- status - Show a vibe's scheduled-task health: last tick, next tick, failures. Re-arms a dead timer if it finds one.
- rearm - Re-arm a vibe's scheduled task from its live release (a no-op when the schedule is already running).
- schedule - Control a vibe's scheduled task (turning it back on is `app rearm`, which reads the live release)
- logs - Show what a vibe reported with ctx.log — its own diagnostics over a recent window, oldest line first. --tail follows.
- chips - Set the suggestion chips visitors see on a vibe's edit card (up to 3). --clear shows none. This is a publish: it changes what strangers see, not your own card. Publishing the vibe again re-derives the chips from your chat and overwrites what you set here — so set them after you publish.
- screenshot - Re-capture the gallery screenshot of one or more named vibes, through the platform's own capture path.
- look - Read or change an existing vibe's look: its colour theme, and its layout archetype and flourishes
- anon-write - Read or set whether signed-out visitors' writes reach the server (owner, or a developer they delegated). `on` admits them wherever access.js allows it; `off` keeps them on the visitor's device. No argument reads. Default is off.
For more help, try running `vibes-diy CLI app <subcommand> --help`
vibes-diy app status
textvibes-diy CLI app status
> Show a vibe's scheduled-task health: last tick, next tick, failures. Re-arms a dead timer if it finds one.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy app rearm
textvibes-diy CLI app rearm
> Re-arm a vibe's scheduled task from its live release (a no-op when the schedule is already running).
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy app schedule
textvibes-diy CLI app schedule <subcommand>
> Control a vibe's scheduled task (turning it back on is `app rearm`, which reads the live release)
where <subcommand> can be one of:
- off - Stop a vibe's scheduled task now (a pause — the live release is untouched, so a deploy re-arms it).
For more help, try running `vibes-diy CLI app schedule <subcommand> --help`
vibes-diy app schedule off
textvibes-diy CLI app schedule off
> Stop a vibe's scheduled task now (a pause — the live release is untouched, so a deploy re-arms it).
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy app logs
textvibes-diy CLI app logs
> Show what a vibe reported with ctx.log — its own diagnostics over a recent window, oldest line first. --tail follows.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--since <str> - How far back to read: a duration (30m, 2h, 1d, 1w) or an ISO timestamp. Default 1h. [default: 1h]
--level <str> - Only this level: debug, info, warn or error [default: ]
--limit <number> - Maximum events per read (max 500) [default: 100]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--tail - Keep following new events until interrupted (Ctrl-C) [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy app chips
textvibes-diy CLI app chips
> Set the suggestion chips visitors see on a vibe's edit card (up to 3). --clear shows none. This is a publish: it changes what strangers see, not your own card. Publishing the vibe again re-derives the chips from your chat and overwrites what you set here — so set them after you publish.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--fs-id <str> - Stamp this published version instead of the live release [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--clear - Show visitors no chips at all [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
[...chip] - The chip labels, in order. More than 3 are trimmed to the first 3. A gold chip is JSON: '{"label":"Let a friend in","gold":true,"kind":"access"}'.
vibes-diy app screenshot
textvibes-diy CLI app screenshot
> Re-capture the gallery screenshot of one or more named vibes, through the platform's own capture path.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
[...more-vibes] - Additional handle/app-slug targets, each re-captured separately
vibes-diy app look
textvibes-diy CLI app look <subcommand>
> Read or change an existing vibe's look: its colour theme, and its layout archetype and flourishes
where <subcommand> can be one of:
- get - Show the vibe's theme, style and the layout archetype and flourishes it carries, with where they came from.
- set - Change the vibe's theme and/or its layout archetype and flourishes. A theme is served immediately; a variety only arms the next build. Spends nothing unless --relayout is passed.
For more help, try running `vibes-diy CLI app look <subcommand> --help`
vibes-diy app look get
textvibes-diy CLI app look get
> Show the vibe's theme, style and the layout archetype and flourishes it carries, with where they came from.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy app look set
textvibes-diy CLI app look set
> Change the vibe's theme and/or its layout archetype and flourishes. A theme is served immediately; a variety only arms the next build. Spends nothing unless --relayout is passed.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--theme <str> - Colour theme slug (see `vibes-diy themes`). Served right away; an unknown slug is refused with the list. [default: ]
--variety <str> - Layout archetype and flourishes as "archetype:a,b,c" (see `vibes-diy variety`), or "none" to remove both. Takes effect on the next build. [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--relayout - Dispatch a build now that re-lays the app out onto its stored archetype and flourishes. This is the only thing here that spends credits. Allowed on its own, with no --variety: it re-lays out onto whatever is already stored. [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy app anon-write
textvibes-diy CLI app anon-write
> Read or set whether signed-out visitors' writes reach the server (owner, or a developer they delegated). `on` admits them wherever access.js allows it; `off` keeps them on the visitor's device. No argument reads. Default is off.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/guestbook) [optional]
[on|off] - on = admit anonymous writes, off = revoke. Omit to read. [optional]
vibes-diy app-chats
textvibes-diy CLI app-chats
> List or read the runtime in-app chats stored by a deployed vibe (the app's own chat/image messages, NOT the codegen build transcript).
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug [optional]
[chatId] - Chat ID to read (omit to list all runtime chats) [optional]
vibes-diy chats
textvibes-diy CLI chats
> (removed) Use 'codegen-log' or 'app-chats' instead.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - ignored [default: ]
--handle <str> - ignored [default: ]
--turn <str> - ignored [optional]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--response, -r - ignored [optional]
--raw - ignored [optional]
--files - ignored [optional]
--jsonl - ignored [optional]
--user - ignored [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - ignored [optional]
[chatId] - ignored [optional]
vibes-diy claim-handle
textvibes-diy CLI claim-handle
> Claim the handle your published apps carry (vibes.diy/<handle>/<app>) and make it your default. Run with no name to see suggestions — nothing is claimed until you name it.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[name] - The handle to claim. Omit to list suggestions instead of claiming. [optional]
vibes-diy codegen-log
textvibes-diy CLI codegen-log
> Inspect a vibe's codegen build transcript (the builder↔LLM conversation that generated its source). List chats, or show one chat's prompts / reconstructed model output.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--turn <str> - With --response: select a specific turn by promptId (default: newest) [optional]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--response, -r - Show the model's reply, block-faithfully reconstructed from stored block events, instead of the user prompt [optional]
--raw - With --response: byte-faithful raw model text captured upstream of the parser (preserves consumed labels & blank lines; new generations only) [optional]
--files - With --response: the resolved path→content map (via the generate/edit resolver) [optional]
--jsonl - With --response: the raw block events, one JSON object per line [optional]
--user - With --response: also print the user prompt(s) so the full transcript reads top-down [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug [optional]
[chatId] - Chat ID to show prompt history for (omit to list all codegen chats) [optional]
vibes-diy db
textvibes-diy CLI db <subcommand>
> Read and write Fireproof documents
where <subcommand> can be one of:
- list - List database names for an app
- get - Get a document by ID
- put - Put (create or update) a document. Pass JSON on argv or '-' to read from stdin. --file attaches local files as _files entries.
- del - Delete a document by ID
- query - Query documents by field value with optional key/prefix/range/limit filters
- subscribe - Tail real-time doc-changed events for a database (Ctrl+C to exit). Reconnects mid-stream; events that fire during the gap are not backfilled.
- seed - Add or remove the sample data a vibe's live version ships in its seed.json (owner only)
For more help, try running `vibes-diy CLI db <subcommand> --help`
vibes-diy db list
textvibes-diy CLI db list
> List database names for an app
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
--db <str> - Database name [default: default]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--admin - Request platform-admin elevation for a read of ANOTHER owner's vibe (bypasses per-user channel filtering). Not needed for your own vibes; honored only for allowlisted platform admins [optional]
--help, -h - show help [optional]
vibes-diy db get
textvibes-diy CLI db get
> Get a document by ID
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
--db <str> - Database name [default: default]
--id <str> - Document ID — same as positional, kept for symmetry with `db put --id` [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--admin - Request platform-admin elevation for a read of ANOTHER owner's vibe (bypasses per-user channel filtering). Not needed for your own vibes; honored only for allowlisted platform admins [optional]
--help, -h - show help [optional]
ARGUMENTS:
[docId] - Document ID (or pass --id) [optional]
vibes-diy db put
textvibes-diy CLI db put
> Put (create or update) a document. Pass JSON on argv or '-' to read from stdin. --file attaches local files as _files entries.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
--db <str> - Database name [default: default]
--id <str> - Document ID (_id); falls back to the body _id, else generated [default: ]
--file <str> - Attach a file (or every file a glob matches) as _files.<basename> on the doc; repeatable. Unchanged files are kept, not re-uploaded. Works for any member who can write the vibe [default: ]
--files <str> - Same as --file [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--admin - Write with admin override: bypasses the legacy db ACL. The vibe's access function still runs and can still refuse — --admin is only a hint it may honor, and a refused write stays refused (unlike `db del --admin`, which forces the delete). Works for the vibe owner or a platform admin [optional]
--help, -h - show help [optional]
ARGUMENTS:
<json> - JSON document to store, or '-' to read from stdin
vibes-diy db del
textvibes-diy CLI db del
> Delete a document by ID
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
--db <str> - Database name [default: default]
--id <str> - Document ID — same as positional, kept for symmetry with `db put --id` [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--admin - Delete with admin override: bypasses the legacy db ACL, and — deletes only — proceeds even when the vibe's access function refuses. Every forced delete is audited. Note the asymmetry: `db put --admin` is NOT forced past the access function. Works for the vibe owner or a platform admin [optional]
--help, -h - show help [optional]
ARGUMENTS:
[docId] - Document ID (or pass --id) [optional]
vibes-diy db query
textvibes-diy CLI db query
> Query documents by field value with optional key/prefix/range/limit filters
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
--db <str> - Database name [default: default]
--key <str> - Exact key match (JSON value) [default: ]
--prefix <str> - Prefix match (JSON value) [default: ]
--range <str> - Range filter as JSON two-element array [start, end] [default: ]
--limit <number> - Maximum number of results (0 = no limit) [default: 0]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--descending - Return results in descending order [optional]
--admin - Request platform-admin elevation for a read of ANOTHER owner's vibe (bypasses per-user channel filtering). Not needed for your own vibes; honored only for allowlisted platform admins [optional]
--help, -h - show help [optional]
ARGUMENTS:
<field> - Field name to index on
vibes-diy db subscribe
textvibes-diy CLI db subscribe
> Tail real-time doc-changed events for a database (Ctrl+C to exit). Reconnects mid-stream; events that fire during the gap are not backfilled.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
--db <str> - Database name [default: default]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy db seed
textvibes-diy CLI db seed <subcommand>
> Add or remove the sample data a vibe's live version ships in its seed.json (owner only)
where <subcommand> can be one of:
- add - Add the live version's seed.json sample records to the vibe's databases. Records already there, including ones you edited, stay as they are.
- remove - Remove the live version's seed.json sample records and keep them out until you add sample data again. Records you added yourself stay.
For more help, try running `vibes-diy CLI db seed <subcommand> --help`
vibes-diy db seed add
textvibes-diy CLI db seed add
> Add the live version's seed.json sample records to the vibe's databases. Records already there, including ones you edited, stay as they are.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy db seed remove
textvibes-diy CLI db seed remove
> Remove the live version's seed.json sample records and keep them out until you add sample data again. Records you added yourself stay.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy secrets
textvibes-diy CLI secrets <subcommand>
> Manage per-vibe secrets readable by backend.js via ctx.secrets (owner-only; values are write-only)
where <subcommand> can be one of:
- set - Set or rotate a secret. Value from the arg; when omitted, a hidden prompt on a terminal, else stdin.
- ls - List secret keys (metadata only — values never come back)
- rm - Remove a secret
For more help, try running `vibes-diy CLI secrets <subcommand> --help`
vibes-diy secrets set
textvibes-diy CLI secrets set
> Set or rotate a secret. Value from the arg; when omitted, a hidden prompt on a terminal, else stdin.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<KEY> - a string
[value] - a string [optional]
vibes-diy secrets ls
textvibes-diy CLI secrets ls
> List secret keys (metadata only — values never come back)
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy secrets rm
textvibes-diy CLI secrets rm
> Remove a secret
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<KEY> - a string
vibes-diy recommend
textvibes-diy CLI recommend <subcommand>
> Manage a vibe's recommended-apps chips (owner-only; the picks shown on its vibe card)
where <subcommand> can be one of:
- add - Recommend another vibe (prepended to the strip). TARGET is handle/app-slug.
- ls - List the vibe's curated recommended entries (id + handle/app-slug)
- rm - Remove a curated entry by its ID (from 'recommend ls')
- mask - Hide one of YOUR OWN vibes from this vibe's auto recommendations. TARGET is handle/app-slug.
- unmask - Undo a mask — let an auto-recommended own vibe reappear. TARGET is handle/app-slug.
For more help, try running `vibes-diy CLI recommend <subcommand> --help`
vibes-diy recommend add
textvibes-diy CLI recommend add
> Recommend another vibe (prepended to the strip). TARGET is handle/app-slug.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<TARGET> - a string
vibes-diy recommend ls
textvibes-diy CLI recommend ls
> List the vibe's curated recommended entries (id + handle/app-slug)
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy recommend rm
textvibes-diy CLI recommend rm
> Remove a curated entry by its ID (from 'recommend ls')
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<ID> - a string
vibes-diy recommend mask
textvibes-diy CLI recommend mask
> Hide one of YOUR OWN vibes from this vibe's auto recommendations. TARGET is handle/app-slug.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<TARGET> - a string
vibes-diy recommend unmask
textvibes-diy CLI recommend unmask
> Undo a mask — let an auto-recommended own vibe reappear. TARGET is handle/app-slug.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<TARGET> - a string
vibes-diy retention
textvibes-diy CLI retention <subcommand>
> Audition lifecycle mail: preview one retention step in a real inbox, and reset its claim to preview it again
where <subcommand> can be one of:
- preview - Send yourself (or a @vibes.diy teammate) one lifecycle-mail step, through the real send path. Admin-gated.
- reset - Clear a retention step's already-sent claim so it can be previewed again (admin-gated, same recipient rule).
For more help, try running `vibes-diy CLI retention <subcommand> --help`
vibes-diy retention preview
textvibes-diy CLI retention preview
> Send yourself (or a @vibes.diy teammate) one lifecycle-mail step, through the real send path. Admin-gated.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--step <str> - Retention step id (e.g. day3-first-app) [default: ]
--user <str> - Target Clerk userId — defaults to your own account [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy retention reset
textvibes-diy CLI retention reset
> Clear a retention step's already-sent claim so it can be previewed again (admin-gated, same recipient rule).
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--user <str> - Target Clerk userId [default: ]
--step <str> - Retention step id — omit to clear every claim on the account [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy developer
textvibes-diy CLI developer <subcommand>
> Delegate code push/edit/publish/codegen on a vibe to another account (owner-only; you keep revoke, unpublish/delete, and ownership)
where <subcommand> can be one of:
- add - Grant a developer the right to edit this vibe's code (they can read all its data and secrets)
- rm - Revoke a developer grant
- ls - List developer grants on this vibe
For more help, try running `vibes-diy CLI developer <subcommand> --help`
vibes-diy developer add
textvibes-diy CLI developer add
> Grant a developer the right to edit this vibe's code (they can read all its data and secrets)
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<HANDLE> - a string
vibes-diy developer rm
textvibes-diy CLI developer rm
> Revoke a developer grant
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
<HANDLE> - a string
vibes-diy developer ls
textvibes-diy CLI developer ls
> List developer grants on this vibe
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged). Addresses the vibe too when --vibe is absent [default: ]
--user-slug <str> - [deprecated] use --handle or --vibe instead [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy edit
textvibes-diy CLI edit
> Send a follow-up prompt to an existing vibe, write files to disk, and push live.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Publish under this bound handle for this call only (leaves your default handle unchanged) [default: ]
--user-slug <str> - a string [default: ]
--dir <str> - Directory to write resolved files and push from (defaults to cwd) [default: ]
--focus <str> - Path to focus first in slot rendering (e.g. Card.jsx for multi-file edits) [optional]
--model <str> - Ephemeral model override for this run (e.g. qwen/qwen3-coder-480b-a35b-instruct); not persisted [optional]
--builder-model <str> - Pin ONLY the builds the agent dispatches to this codegen model (e.g. anthropic/claude-sonnet-4.6), leaving the agent itself on the account default. --model pins the agent turn AND every build it starts; give both to pin each separately. An unknown or non-codegen id is refused by the server on the send. Not persisted. [optional]
--api-key <str> - Per-call BYOK provider key for this run (overrides any stored key, bills your own key); defaults to env VIBES_LLM_API_KEY. Not persisted. [optional]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--instant-join - [Deprecated: no-op. Auto-accept editor is now always enabled by default.] [optional]
--verbose, -v - Stream AI response to stderr as it arrives [optional]
--dry-run - Inspect the prompt the server would dispatch; do not write files or push [optional]
--direct - Send the edit straight to the builder, skipping the conversation [optional]
--transcript - With --dry-run, render the payload as a human-readable transcript instead of JSON [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug [optional]
[prompt] - Follow-up prompt describing what to change [optional]
vibes-diy generate
textvibes-diy CLI generate
> Generate a vibe from a text prompt and write it to disk. The server builds and releases it; on a terminal the chat stays open for follow-ups.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--app-slug, -a <str> - App slug (server generates one if omitted) [default: ]
--handle <str> - Publish under this bound handle for this call only (leaves your default handle unchanged) [default: ]
--user-slug <str> - a string [default: ]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--focus <str> - Path to focus first in slot rendering (e.g. Card.jsx for multi-file edits) [optional]
--variety <str> - Pin this build's layout archetype and three flourishes instead of letting the server draw them, as <archetype>:<flourish>,<flourish>,<flourish>. Run `vibes-diy variety` for the names. A look that ships a design brief draws from a NARROWER pool — its excluded ids are listed in that look's dialect under prompts/pkg/themes/looks/<look>/variety.ts — and a pin naming one of them is refused rather than quietly ignored. For holding one axis still across a comparison; an ordinary build should omit it. [optional]
--record <str> - Write this run's raw transcript into this directory as <chatId>.wire.json: every wire event with its arrival time, and the messages you typed. A raw transcript for replaying what happened by hand; the eval runner's judged record is a separate tool. [optional]
--style <str> - Pin this build's colour instead of letting the server draw it, as a palette slug (e.g. atelier, carbon, house). Only a LOOK draws a colour — its structure and ornament say nothing about hue — so this applies where a look is minted, and a slug outside that look's colourway set is refused with the eligible list rather than quietly ignored. For holding one axis still across a comparison; an ordinary build should omit it. [optional]
--model <str> - Ephemeral model override for this run (e.g. qwen/qwen3-coder-480b-a35b-instruct); not persisted [optional]
--builder-model <str> - Pin ONLY the builds the agent dispatches to this codegen model (e.g. anthropic/claude-sonnet-4.6), leaving the agent itself on the account default. --model pins the agent turn AND every build it starts; give both to pin each separately. An unknown or non-codegen id is refused by the server at the open. Not persisted. [optional]
--api-key <str> - Per-call BYOK provider key for this run (overrides any stored key, bills your own key); defaults to env VIBES_LLM_API_KEY. Not persisted. [optional]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--instant-join - [Deprecated: no-op. Auto-accept editor is now always enabled by default.] [optional]
--no-access-fn - Publish even though the app has no access.js. Without it such a build stays private with a note — nothing would govern what visitors do with its documents. [optional]
--private - Publish this app private: reachable only by you and people you approve, whether or not it existed before. Without it a generated app is published like a website publish — open, or gated when the app is privacy-sensitive — and an app with no access.js stays private with a note. [optional]
--lightning - Build this new app with our fastest builder first (the Lightning build). This is already the default; the flag says it out loud. Follow-ups use the ordinary builder. [optional]
--fast-pass - Same as --lightning. [optional]
--careful - Build this new app the careful way: the agent plans the whole app, then builds it on our most capable model. Wins over --lightning. [optional]
--verbose, -v - Stream AI response to stderr as it arrives [optional]
--help, -h - show help [optional]
ARGUMENTS:
<prompt> - Describe the app you want to create
vibes-diy list
textvibes-diy CLI list
> List your vibes (ownerHandle/appSlug). Use --json for NDJSON output.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy login
textvibes-diy CLI login
> Authenticate this device with vibes.diy cloud.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--timeout <str> - Seconds to wait for browser auth callback [default: 120]
--common-name, -cn <str> - Common name for the device certificate (defaults to random ID) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--force - Re-register even if a certificate already exists [optional]
--help, -h - show help [optional]
vibes-diy mcp
textvibes-diy CLI mcp
> Start an MCP server for AI agent data access (stdio transport)
OPTIONS:
--app-slug <str> - App slug; defaults to env VIBES_APP_SLUG or basename(cwd) [default: <current directory name>]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
FLAGS:
--help, -h - show help [optional]
## MCP Server Setup
Tools: vibes_list_apps, vibes_list_databases, vibes_get, vibes_put, vibes_delete, vibes_query, vibes_generate, vibes_add_seed_data, vibes_remove_seed_data
`vibes_generate` builds a brand-new vibe from a text prompt and deploys it live —
it takes minutes and spends your AI credits. The new app is separate from the
`--app-slug` this server was started with; the data tools keep pointing at that
one.
`vibes_add_seed_data` adds the live version's sample data (its `seed.json`) to the
app's databases, keeping your edits; `vibes_remove_seed_data` takes it out again.
Requires: npx vibes-diy login (one time)
### Claude Desktop / Cowork
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
```json
{
"mcpServers": {
"my-vibe": {
"command": "npx",
"args": ["vibes-diy", "mcp", "--app-slug", "APP", "--handle", "USER"]
}
}
}
```
### Claude Code
Add to .mcp.json in your project root:
```json
{
"mcpServers": {
"my-vibe": {
"command": "npx",
"args": ["vibes-diy", "mcp"]
}
}
}
```
### Test interactively
npx @modelcontextprotocol/inspector npx vibes-diy mcp --app-slug APP
vibes-diy pull
textvibes-diy CLI pull
> Download source files of a deployed vibe to disk.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--user-slug <str> - a string [default: ]
--dir <str> - Directory to write files into (defaults to ./<appSlug>/) [default: ]
--fsId <str> - Pull a specific version by fsId (use instead of --version / --published / --draft) [default: ]
--version <str> - Pull a specific version by the label the version menu shows, e.g. v3 (or 3) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--published - Pull the published (production) version instead of your latest dev draft [optional]
--draft - Pull the owner's latest dev draft (unreleased). Already the default for your own vibes; on a platform-admin pull of someone else's vibe this is the explicit, separately audited opt-in to their unreleased work (a bare pull serves the published release) [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy push
textvibes-diy CLI push
> Upload files from the current directory to a vibe.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--mode <str> - Deploy mode: production or dev [default: production]
--app-slug, -a <str> - App slug (defaults to directory name) [default: ]
--handle <str> - Publish under this bound handle for this call only (leaves your default handle unchanged) [default: ]
--user-slug <str> - a string [default: ]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--access <str> - Deployment posture: open (anyone can reach it; your access.js governs its documents), gated (anyone can view, members write), private (members only). Defaults to open. [default: ]
--from <str> - Carry the settings (theme, style, layout, icon, title) of this vibe of yours — handle/app-slug — into the pushed app. The source must be a vibe you own; that is checked before anything is minted. [default: ]
--api-key <str> - Provider API key for a wizard turn triggered by this push (BYOK): bills your own key instead of your Vibes credits. Not persisted. [optional]
--message, -m <str> - Context for the seeded chat: describe what the app is / the request behind it. Becomes the opening message of the vibe's chat instead of a generic 'Initial push' note. [default: ]
--idle-timeout <number> - Idle timeout in ms (resets on any incoming message). Defaults to api-impl's 30s; bump higher for very large pushes that exceed post-storage DB-write windows. [optional]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--private - Alias for --access private. [optional]
--no-access-fn - For probes and testing: publish to a public posture with NO access.js, so nothing governs what visitors do with your app's documents. Without it, a public push with no access.js is refused. Not for an app you intend people to use — write access.js yourself, or push --access private. [optional]
--help, -h - show help [optional]
vibes-diy remix
textvibes-diy CLI remix
> Copy a vibe you can see into your account — files, chat history AND its look (theme, style, layout, icon, title). `--to handle/slug` names the destination; `--published` lands you on the live URL (clone) instead of in the editor; `--settings-only` carries just the settings into an app you already own.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--to <str> - Destination as handle/app-slug. Both are pins: a handle you don't own, or a slug already taken, is refused. [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--published - Land on the copy's live URL (clone) instead of in the editor. Either way the copy is published and private. [optional]
--settings-only - Carry only the settings (look, title, icon…) into --to, which must already exist and be yours. [optional]
--help, -h - show help [optional]
ARGUMENTS:
<vibe> - The vibe to copy, as handle/app-slug
vibes-diy publish
textvibes-diy CLI publish
> Make a vibe live: promote its latest dev draft (or --fsId) to a new production release, and clear any unpublish tombstone. Use after editing in dev mode, or to bring an unpublished vibe back.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--fsId <str> - Publish a specific version (fsId from `vibes-diy versions`) instead of the latest dev draft. [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy unpublish
textvibes-diy CLI unpublish
> Take a deployed vibe down (reversible). De-indexes the slug and blocks its public URL/remix/version listing; code, data, and grants are kept. Bring it back with `publish`.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy versions
textvibes-diy CLI versions
> List every version of a vibe (fsId, mode, releaseSeq). Owner sees drafts; pull any with `pull --fsId`.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy assets
textvibes-diy CLI assets <subcommand>
> The files a vibe carries — uploads rather than source (upload one with `put-asset`)
where <subcommand> can be one of:
- ls - List the files a vibe carries: path, mime, size, and the safety verdict on each one.
For more help, try running `vibes-diy CLI assets <subcommand> --help`
vibes-diy assets ls
textvibes-diy CLI assets ls
> List the files a vibe carries: path, mime, size, and the safety verdict on each one.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--published - List what the published (production) version carries instead of your latest dev draft [optional]
--help, -h - show help [optional]
ARGUMENTS:
[vibe] - App slug or handle/app-slug (e.g. jchris/hat-smeller) [optional]
vibes-diy put-asset
textvibes-diy CLI put-asset
> Stream a file to the asset endpoint and print the resulting CID + URL.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--app-slug, -a <str> - App slug (defaults to the file's basename without extension) [default: ]
--handle <str> - Act as this bound handle for this call only (leaves your default handle unchanged) [default: ]
--user-slug <str> - a string [default: ]
--vibe <str> - Vibe identifier as handle/app-slug [default: ]
--mime-type <str> - Content-Type for the upload (inferred from extension if omitted) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--verify-fetch - After upload, GET the asset back via /assets/cid and compare size [optional]
--help, -h - show help [optional]
ARGUMENTS:
<file> - Path to the file to upload
vibes-diy skills
textvibes-diy CLI skills
> List available skills or show a skill's content.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--name, -n <str> - Skill name to show content for (omit to list all) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy themes
textvibes-diy CLI themes
> List available themes or show a theme's design markdown.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--slug, -s <str> - Theme slug to show content for (omit to list all) [default: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy variety
textvibes-diy CLI variety
> List the layout archetypes and flourishes `generate --variety` can pin.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy system
textvibes-diy CLI system
> Emit the base system prompt to stdout.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]
vibes-diy user-settings
textvibes-diy CLI user-settings
> Ensure/refresh user settings for the logged-in device.
OPTIONS:
--api-url, -u <str> - set the api url [default: https://vibes.diy/api?.stable-entry.=cli]
--set-default-handle <str> - Set the account's default (active) handle to one of its bound handles [optional]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--help, -h - show help [optional]