This document is the exhaustive command reference for Vibe Remote.
It covers:
- in-chat commands users send to the bot from Slack, Discord, Telegram, WeChat, and Lark
- command aliases and parser normalization rules
- platform differences
- permission requirements
- host-side CLI commands exposed by the
vibeexecutable
For installation, setup, and operations background, also see:
Vibe Remote exposes two command families:
- In-chat commands
- Sent from an IM platform to the bot.
- Examples:
/start,/resume,/setcwd ~/repo,/setup.
- Host CLI commands
- Run on the machine where Vibe Remote is installed.
- Examples:
vibe,vibe status,vibe task add ....
The two families solve different problems:
- in-chat commands control conversations, working directories, session resume, DM binding, and backend auth repair
- host CLI commands control the local service process, diagnostics, upgrades, scheduled tasks, and async hooks
These commands are registered by the controller today:
| Command | Purpose |
|---|---|
/start |
Show the welcome panel / control entry |
/new |
Start a fresh session |
/clear |
Alias of /new |
/cwd |
Show current working directory |
/setcwd <path> |
Set working directory |
/set_cwd <path> |
Internal-style alias that also works |
/resume |
Resume a recent session |
/setup |
Repair backend login/auth |
/settings |
Open settings UI |
/stop |
Interrupt the active backend execution |
/bind <code> |
Bind a DM user to this Vibe Remote instance |
bind <code> |
Plain-text DM alias for unbound users only |
Authorization is centralized in core/auth.py.
/start/new/clear/cwd/resume/stop
/setcwd <path>/set_cwd <path>/settings/setup
Notes:
/setupbutton callbacks such asReset OAuthare also admin-protected.- If a workspace has at least one admin configured, non-admins cannot run admin-only commands.
/bind <code>is allowed for unbound DM users.- Plain
bind <code>is also allowed for unbound DM users on platforms where plain-text bind is enabled as a workaround.
- Native Slack slash commands are currently exposed only for
/startand/stop. - Other commands are typically sent as normal bot-directed messages, for example:
@Vibe Remote /resume@Vibe Remote /setcwd ~/work/repo
- In DM, plain
bind <code>is accepted for unbound users.
- Commands are parsed from normal messages that start with
/. /resumeopens a Discord-native resume picker flow when the platform interaction context is available.
- Commands are parsed from normal messages that start with
/. /resumeand/settingsprefer inline button flows in the current chat.
- Commands are parsed from normal messages that start with
/. /resumeand/settingsprefer native cards/modals when available.
- Commands are parsed from normal text messages that start with
/. /resumeuses a text-first flow instead of modals./resume 1,/resume more,/resume latest ..., and manual resume syntax are especially relevant on WeChat.
The shared parser in modules/im/base.py applies these rules:
/setcwd /tmp/workis normalized to internal actionset_cwd/set_cwd /tmp/workalso works becauseset_cwdis a registered command namebind abc123is accepted only when plain bind is allowed for that DM user
Backend aliases used by /resume and /setup:
| Alias | Backend |
|---|---|
oc |
opencode |
open-code |
opencode |
cc |
claude |
claude-code |
claude |
cx |
codex |
Show the welcome message and the main control entry for the current channel or DM scope.
/start
- shows the current platform
- shows the currently resolved backend for the scope
- shows the current channel when relevant
- lists the main text commands
- opens an interactive menu on platforms that support buttons
@Vibe Remote /start
- This is the safest discovery command when a user is unsure what is currently configured.
- On some platforms the response appears in-channel rather than inside the thread.
Reset the current session state so the next user message starts a fresh conversation.
/new
- clears active session state for the current scope
- does not delete your repository
- does not change routing or working directory
/new
Alias of /new.
/clear
- dispatches to the same handler as
/new
- Prefer
/newin user-facing docs and examples. - Keep
/clearin mind for compatibility or old habits.
Show the working directory currently associated with the channel or DM scope.
/cwd
- prints the absolute working directory
- reports whether the directory exists
- reminds the user that this is where the backend executes commands
/cwd
- Before asking the agent to edit code, confirm that the current scope points at the correct repository.
Set the working directory for the current channel or DM scope.
/setcwd <path>
Also accepted:
/set_cwd <path>
- expands
~ - converts the path to an absolute path
- creates the directory if it does not exist yet
- saves the custom working directory to the current settings scope
/setcwd ~/projects/myapp
/setcwd /srv/repos/api
/set_cwd ../another-repo
- admin-only
- The scope is the current channel for channel chats.
- The scope is the current user for DMs.
Resume a recent native agent session from the current working directory.
/resume
/resume 1
/resume more
/resume latest
/resume latest oc
/resume latest cc
/resume latest cx
/resume <backend> <session_id>
ocopencodeopen-codeccclaudeclaude-codecxcodex
/resumeopens the resume picker when invoked from an interaction-capable context.- If no modal trigger is available, the bot sends guidance telling the user to open the picker from the menu.
/resumeopens a native resume picker flow when the interaction context exists.
/resumeopens an inline-button picker in the current chat.
/resumeprefers a native card/modal flow.
/resumeis text-driven./resume 1restores item 1 from the current shown list./resume morepaginates./resume latest [backend]restores the newest session./resume <backend> <session_id>restores a session manually.
/resume
Then, on WeChat text flow:
/resume 1
/resume latest cc
/resume codex 123e4567-thread-id
- Resume only looks at sessions under the current working directory.
- If the working directory changed since the last list snapshot, selection-by-number expires.
Repair backend login or provider auth through the IM flow.
/setup
/setup claude
/setup codex
/setup opencode
/setup cc
/setup cx
/setup oc
/setup code <value>
/setup code <backend> <value>
- resolves the backend for the current scope, unless an explicit backend is given
- starts a backend-specific auth recovery flow
- sends browser links, device codes, or follow-up prompts into chat
- waits for completion and verifies login status
- starts the Claude login flow
- sends the browser authorization URL into chat
- if Claude later asks for a pasted code, the user submits:
/setup code <value>
- starts device auth
- sends a browser URL plus one-time code into chat
- the bot waits for completion and verifies
codex login status
- infers the provider from current OpenCode routing/model when possible
openaiuses headless device-style auth- other common providers such as
opencodeoranthropicuse key-entry flows - when OpenCode asks for a key, the user submits:
/setup code <value>
- admin-only
/setup code <backend> <value>is useful when multiple setup flows are open and the backend must be explicit.- Only the user who started the setup flow can submit its follow-up code or key.
Open the settings UI for the current scope.
/settings
- opens or routes to the settings menu for the current platform
- allows changing settings such as routing and other scope-level controls through UI flows
- admin-only
- This command is registered even though the exact UI differs by platform.
- Prefer it when users want a guided configuration flow instead of raw commands.
Interrupt the active backend execution for the current scope.
/stop
- builds a stop request for the currently resolved backend
- asks the backend adapter to interrupt the active task
- if there is no active session, returns an informational response
/stop
- In threaded platforms, a plain
stopor/stopin-thread may also be recognized by the message path. - This command does not change routing or clear historical state by itself.
Bind a DM user to this Vibe Remote instance using a bind code generated from the UI or admin workflow.
/bind <code>
bind <code>
- validates the bind code
- records the DM user as bound
- stores the DM chat ID
- may grant admin on the initial bootstrap bind, depending on the bind-code workflow
- DM-only
- allowed even before the user is bound
/bind vr-a3x9k2
bind vr-a3x9k2
- Plain
bind <code>is the compatibility path for platforms or contexts where leading/is awkward. - If the user is already bound, the command returns an already-bound response instead of rebinding.
These are important user-facing controls, but they are not text commands:
AgentName: your message- Example:
Plan: Design a new caching layer - This is the subagent prefix flow, not a command.
- Example:
/startmenu buttons- Examples:
Settings,Resume Session,Change Work Dir - These are button callbacks or modal flows, not slash commands.
- Examples:
The vibe executable controls the local service and async automation features.
| Command | Purpose |
|---|---|
vibe |
Start or restart the service and Web UI |
vibe stop |
Stop the service and UI; also terminates OpenCode server |
vibe restart |
Stop then start again |
vibe status |
Print runtime status JSON |
vibe doctor |
Run diagnostics |
vibe version |
Show installed version |
vibe check-update |
Check for new version |
vibe upgrade |
Upgrade to latest version |
vibe task ... |
Manage scheduled tasks |
vibe hook send ... |
Queue one async hook without persisting a task |
vibe- starts or restarts the main service
- opens the Web UI
- preserves the running OpenCode server when possible
vibe stop- stops the main service
- stops the UI server
- terminates the OpenCode server too
vibe restart- stops the main service
- stops the UI server
- terminates the OpenCode server too
- starts the service again after a brief wait
Optional async scheduling:
vibe restart --delay-seconds 60- prints a confirmation immediately
- exits without waiting
- runs the restart in the background after the specified delay
Recommended usage:
- prefer
vibe restart --delay-seconds 60when an agent triggers the restart from an active conversation - use plain
vibe restartwhen the user explicitly wants the restart to happen immediately
vibe status- prints runtime status JSON
vibe doctor- validates config
- checks platform credentials
- checks backend CLI availability
- checks runtime environment
vibe version- prints the installed package version
vibe check-update- checks PyPI for a newer version
vibe upgrade- upgrades Vibe Remote using the selected upgrade plan
- usually recommends
vibe restart --delay-seconds 60after success
vibe task manages persisted scheduled tasks.
| Subcommand | Purpose |
|---|---|
vibe task add |
Create a task |
vibe task update |
Update a task |
vibe task list |
List tasks |
vibe task ls |
Hidden alias of list |
vibe task show <task_id> |
Show one task |
vibe task pause <task_id> |
Pause a task |
vibe task resume <task_id> |
Resume a task |
vibe task run <task_id> |
Run immediately |
vibe task remove <task_id> |
Delete a task |
vibe task rm <task_id> |
Hidden alias of remove |
vibe task add --session-key <key> (--cron <expr> | --at <timestamp>) (--prompt <text> | --prompt-file <file>) [options]Important options:
--name--session-keyrequired--post-to {thread,channel}--deliver-key--cron--at--prompt--prompt-file--timezone
vibe task update <task_id> [options]Important options:
--name--clear-name--session-key--post-to {thread,channel}--deliver-key--reset-delivery--cron--at--prompt--prompt-file--timezone
vibe task list [--all] [--brief]vibe task show <task_id>vibe task pause <task_id>vibe task resume <task_id>vibe task run <task_id>vibe task remove <task_id>Queue one asynchronous turn without creating a stored task definition.
vibe hook send --session-key <key> (--prompt <text> | --prompt-file <file>) [options]Important options:
--session-keyrequired--post-to {thread,channel}--deliver-key--prompt--prompt-file
Use the right command family for the job:
- Want to control a conversation from chat:
- use
/start,/resume,/setcwd,/setup,/stop
- use
- Want to bootstrap or recover DM access:
- use
/bind <code>in DM
- use
- Want to control the local daemon or troubleshoot installation:
- use
vibe,vibe status,vibe doctor,vibe upgrade
- use
- Want asynchronous automation:
- use
vibe task ...orvibe hook send ...
- use
@Vibe Remote /start
@Vibe Remote /cwd
@Vibe Remote /setcwd ~/projects/backend
@Vibe Remote /setup
@Vibe Remote /setup codex
@Vibe Remote /setup code 123456
@Vibe Remote /stop
vibe
vibe status
vibe doctor
vibe task list --brief
vibe hook send --session-key 'slack::channel::C123' --prompt 'Share the latest build summary.'