13 KiB
Command details
Example: send /models, then /model 2 to switch to the second model in the list; send /reasoninglist, then /reasoning 2 to switch to the current model's second reasoning effort; send /presetlist, then /preset 2 to select the second Agent Preset for this bot. Other examples: /help, /new, /status, /version, /model deepseek-official/deepseek-v4-pro max, /reasoning --default, /preset marketing-jeep, /preset --default, /steer inspect only the configuration file, /stop, /compact, /workspace /Users/alice/projects/my-app, /sessionlist 2, /sessionlist /Users/alice/projects/my-app, /session session-id, /history, or /history 5
If the Slack desktop app has no native Slash Command registered with the same name, it intercepts messages that begin directly with /. Send the command with one leading space instead, for example /presetlist, /preset 2, /history, or /history 10; the plugin command layer trims surrounding whitespace, so it executes exactly like the unspaced form.
Feishu / command panel: On startup the Feishu bot registers its common commands (menu, new, help, status, compact, sessionlist, workspacelist, watch, unwatch, watchlist, archived) as native Slash Commands through the app_slash_commands OpenAPI, so typing / in a Feishu direct-message input box pops the command panel and tapping a command triggers it. The command list is owned and pushed by dsh-im; it does not depend on the dsh/Harness backend. Apps created through the built-in QR flow request application:app_slash_command:read and application:app_slash_command:write by default; existing apps can add them incrementally through Complete permissions or /repair, followed by any publishing steps Feishu requires. The Feishu client also caches the list for a few minutes. This is best-effort and never blocks message delivery.
/helptakes no arguments and never creates a Session. It returns the complete command list supported by the current bot./statustakes no arguments, never prompts the model, and does not change the Session binding. It confirms that the current bot can reach DeepSeek Harness./versiontakes no arguments and never contacts Harness, creates a Session, or prompts the model. It returns the version of the running dsh-im plugin./newonly removes the current chat's saved dsh-im Session binding; it never deletes, empties, or archives the old Session. The next ordinary message creates and binds a new Session in the current workspace. If a task is running or waiting for a question or approval, finish the interaction or use/stopbefore/new./modelstakes no arguments and never creates a Session. It assigns a number to every currently configured Harness model and also shows its stable, copyableprovider/model-id. If one provider fails, models from the remaining providers are still shown.- Bare
/modelshows the current Session model and reasoning effort. With arguments, it accepts a number from/modelsor an exact full model ID, followed optionally by an exact reasoning effort ID published in that target model's metadata, for example/model 2 max. When the effort is omitted, Harness resolves the target model's current default. If the chat has no Session yet, a valid switch creates and binds a blank Session without prompting the model. /reasoninglistand/reasoningsare equivalent. They list the efforts from the current model's metadata and mark the current and default values./reasoningshows the current value;/reasoning <number or effort ID>accepts a listed number or an exact metadata ID;/reasoning --defaultlets Harness resolve the current model's default again. Every/reasoning...command requires an existing Session and never creates one or prompts the model.- The model or reasoning effort cannot be changed while a task is running or waiting for an approval or question answer. Wait for it to finish or use
/stopfirst. A change takes effect on the next model request and keeps Harness's default-saving semantics: Harness attempts to save the accepted model and effort as the default selection for future Sessions, while other existing Sessions remain unchanged. A Session containing images cannot switch to a model that does not accept image input. /presetlistand/presetsare equivalent. They take no arguments and never create a Session. Each reads the Host's currently available Agent Presets, showing their names, stable IDs, the Host default, and this bot's selection. A selected Preset that has been deleted or become broken is retained and marked unavailable instead of being cleared automatically. Only safe names and IDs are shown; paths, errors, and other Host internals are never exposed.- Bare
/presetshows this bot's setting for future new Sessions; it does not inspect or change the current Session. With an argument, it accepts a number from the most recent/presetlistin this chat or an exact ID; use/preset id:<ID>for a numeric ID. A numbered selection resolves the ID from that displayed list and then validates it against the latest Host catalog, asking for a fresh list if it has changed. /preset --defaultclears this bot's explicit override so future Sessions resolve the Host default when they are created. Explicitly selecting an ID that currently matches the Host default pins that ID instead. Following the Host default remains available even while the catalog cannot be read.- An Agent Preset change is bot-wide: it affects future new Sessions in every chat for this bot, but never modifies, stops, unbinds, or rebuilds an existing Session and never runs
/newautomatically. If this chat already has a Session, ordinary messages keep using it; the first ordinary message after/newcreates a Session with the new setting. Presets can still be queried or changed while a task is running or awaiting interaction because the command does not touch that Session. /stopand/steercontrol only a running task started by this chat. Even when multiple chats bind the same Session, they do not intentionally control another chat's task./stopdoes not delete the Session or its history, preserves queued work that has not started, and is safe to repeat./steeraccepts text only, including multiple lines. It neither creates another Session nor starts a second task. Send an ordinary message when no task is running; while an approval or question is pending, answer it first or use/stop./batch,/send, and/cancelare available only in a direct chat with the bot. After/batch, subsequent text-only messages are held temporarily, up to 10 messages. The tenth is collected and prompts you to submit; later messages are rejected and the batch is never submitted automatically./sendprocesses the collected messages in their original order as one input, while/canceldiscards them. Images, files, and other commands are not collected. An unsubmitted batch is lost if the bot restarts. Ordinary chat behavior is unchanged when batch input is not active.- Feishu
/repairis available only in a direct chat and follows the current bot's channel access policy just like every other command; the plugin defines no separate administrator role. It incrementally adds the currently missingcard.action.trigger,im:message:readonly,im:resource,application:app_slash_command:read, andapplication:app_slash_command:write, while the confirmation page shows only items the app is currently missing. The authorization page must be opened by an account that can access the target app in Feishu Open Platform. Bare/repairstarts repair; if an older attempt is still awaiting authorization, it invalidates that one-time link before generating a new one. Use/repair qrfor the current link's QR code,/repair statusto inspect the attempt,/repair verifyto refresh verification, and/repair cancelto cancel it; none of these four supplemental commands starts another authorization. Once Feishu has accepted the update and the bot is waiting for the test-button callback, a second repair is not started concurrently. /compactacts only on the Harness Session already bound to the current chat and is never sent to the model. The bot reports the applicable status when the chat has no Session yet, the Session is generating a reply, or there is no compactable history.- The path must be an existing absolute directory. The bot returns an actionable error and the correct usage when validation fails.
/workspacelisttakes no arguments. It combines the Harness global registry with the current bot's path. When that current path still exists and is safe to display, it appears first and is marked as current./workspace Nswitches using the freshly resolved list order at execution time; absolute paths remain supported./sessionlistand/sessionsare equivalent. A numeric argument uses the same freshly resolved order as/workspacelistat command execution time. An absolute path can also select a workspace directly, and the result echoes the resolved path./sessionlist --limit Nand/sessions --limit Nlimit only that command's response. They do not change any global or bot setting, and omitting--limitstill lists every session.- Both session-list aliases include every session registered to the selected workspace. Archived sessions are marked as archived; blank and subagent sessions are included when they belong to that workspace; sessions without a title are shown as
No title yet. Any listed ID can be passed directly to/session Session ID. /sessionaccepts exactly one Session ID obtained from/sessionlist. It neither creates a session nor immediately prompts the model; later messages in the current chat continue the bound session. Regular archived sessions can be bound without being unarchived, while subagent sessions cannot be bound./historyworks identically in direct chats on all nine channels. It only reads the Session already bound to this chat: it never creates a Session, prompts the model, or interrupts running tasks or pending interactions. It returns the latest 3 messages by default./history Naccepts a positive integer, caps values above 5 at 5, and returns fewer when fewer are available. Zero, negative, fractional, nonnumeric, and multiple arguments show usage; commands with images or files are rejected. While collecting batch input, use/sendor/cancelfirst.- A user message or a final assistant reply counts as one history item, not one turn or day. The latest N items are displayed oldest first. Tool events, reasoning, injected content, and unfinished assistant output are omitted; old attachments are not downloaded or resent. Long text is marked as truncated, with at most 3 text segments per reply and no automatic pagination. After binding a Session, send
/historymanually; binding never replays history automatically. Message text may still contain sensitive information from the original conversation, so expose the bot only to trusted users. /sessionlocates the session's unique workspace automatically. Binding inside the current workspace replaces only this chat's mapping. A cross-workspace binding switches the bot workspace, clears the old session mappings for all of that bot's chats, and then binds this chat, so it affects the bot's other chats. A reply already being generated may still finish.- Workspace switches and session bindings only clear or replace dsh-im chat mappings. They never delete, empty, or archive old Session contents; an old Session can still be listed and bound again.
- Any user admitted by the current channel access policy can run these commands; there is no separate administrator role. Telegram Compatible mode follows the original DM and group mention/reply rules, while Safe mode admits only allowlisted private users. WhatsApp Only me accepts self-chat only, Selected contacts accepts self-chat plus allowlisted direct messages, and Open responses accepts every direct message, group messages from the linked account, and mentions or replies from other group members.
- Agent Preset names and IDs come from the same Harness Host, and any command-authorized user can change the Preset used by all future new Sessions across this bot's chats. Expose
/presetlistand/presetonly to trusted users. - The list comes from the Harness Host's global registry and can include local absolute paths for other bots, other channels, or non-IM projects. Restrict the bot's visibility to trusted users.
- Session results also come from the global Harness Host. Session IDs and titles can belong to other bots, other channels, or non-IM projects, and may contain sensitive metadata. Enable these commands only when every user in the bot's visibility scope is trusted.
- Any user who can run
/sessioncan continue the selected session and use later messages to write to it or invoke its available tools. Expose the bot and session list only to trusted users. - A successful switch clears only the current bot's old Harness session mappings and does not affect other bots.
- The new workspace applies to subsequent messages; a reply that has already started generating is allowed to finish.