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-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.
- 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)
- 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, write it to disk, and push it live.
- 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.
- publish - Make a vibe live: promote its latest 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`.
- 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.
- 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 --instant-join` — deploy and auto-accept sharing so anyone with the link can use it
- `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-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 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.
- 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.
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) [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 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) [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]
--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.
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) [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: ]
FLAGS:
--json, -j - selects json output format [optional]
--text, -t - select text output format [default: true]
--admin - Write with admin override (bypasses the vibe's access function). 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) [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 db ACL). 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) [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]
--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) [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 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, or stdin when omitted.
- 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, or stdin when omitted.
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) [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) [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) [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) [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) [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) [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) [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) [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 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) [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) [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) [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]
--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]
--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, write it to disk, and push it live.
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]
--model <str> - Ephemeral model override for this run (e.g. qwen/qwen3-coder-480b-a35b-instruct); 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; writes no files, pushes nothing, and creates nothing server-side (no vibe metadata, no chat/app-slug bookkeeping row) [optional]
--transcript - With --dry-run, render the payload as a human-readable transcript instead of JSON [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
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 .claude/settings.json:
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`
```text
vibes-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 (overrides --published / the draft default) [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 draft [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: ]
--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]
--instant-join - [Deprecated: no-op. Auto-accept editor is now always enabled by default. Use --private to opt out.] [optional]
--public - [Deprecated: no-op. Public access is now always enabled by default. Use --private to opt out.] [optional]
--private - Opt out of fast-path defaults: disables public access and auto-accept-editor. Use for private or gated apps. [optional]
--help, -h - show help [optional]
vibes-diy publish
textvibes-diy CLI publish
> Make a vibe live: promote its latest 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 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 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 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]