CLI-Only Commands

These commands are exclusive to the terminal CLI interface. They are not available in the Web UI, Telegram bot, or Discord bot -- they rely on the local terminal process and have no server-side equivalent. If you try to use them from a non-CLI channel, they will be silently ignored or return an error.

Why CLI-only?
These commands interact directly with the CLI process itself -- reading local files from your machine, controlling the terminal display, printing version metadata, or terminating the process. They don't translate to a request/response API and therefore only make sense in an interactive terminal session.

Command Reference

CommandArgumentsDescription
/versionnonePrint the current CLI-JAW version string
/quitnoneGracefully exit the CLI-JAW process
/qnoneAlias for /quit
/file<path> [caption]Attach a local file to the conversation (hidden from display)
/idepop | on | offControl the IDE diff view panel

/version

Prints the installed CLI-JAW version, build hash, and runtime information to the terminal. Useful for bug reports and verifying that an update succeeded.

Syntax

/version

Arguments

None. This command takes no arguments or flags.

Output

cli-jaw v2.14.0 (build a3f8c1d)
node: v22.11.0 | platform: darwin-arm64
config: ~/.cli-jaw/config.yaml

Example Usage

# Check your version before reporting an issue
/version

# Pipe to clipboard (in your shell, not inside a jaw session)
jaw --version | pbcopy
~해줘 tip
"버전 확인해줘" -- The assistant will run /version and report the result. You can also say "지금 어떤 버전 쓰고 있어?" for the same effect.

/quit, /q

Gracefully shuts down the CLI-JAW process. This saves the current conversation to the session log, flushes any pending memory writes, and exits the Node.js process with code 0. /q is a short alias that behaves identically.

Syntax

/quit
/q

Arguments

None. This command takes no arguments or flags.

Behavior

Example Usage

# End the session
/quit

# Same thing, shorter
/q
~해줘 tip
"종료해줘" or "나갈게" -- The assistant recognizes natural-language exit intents and runs /quit on your behalf. You can also simply press Ctrl+C twice for an immediate kill, but that skips the graceful flush.

/file

Attaches a local file to the current conversation context. The file is read from disk and injected into the message history as a hidden attachment -- it does not render visually in the terminal output, but the AI model receives its full content. This is useful for feeding documents, images, or data files into the conversation without cluttering the display.

Syntax

/file <path> [caption]

Arguments

ArgumentRequiredDescription
<path>YesAbsolute or relative path to the file. Supports ~ expansion. Glob patterns are not supported -- attach one file per command.
[caption]NoOptional description appended as context. If omitted, only the file content is sent.

Supported File Types

CategoryExtensions
Text / Code.txt, .md, .py, .js, .ts, .json, .yaml, .toml, .csv, .html, .css, and other plain-text formats
Images.png, .jpg, .jpeg, .gif, .webp, .svg
Documents.pdf, .docx, .xlsx, .pptx, .hwpx
Audio.mp3, .wav, .m4a, .ogg

Behavior

Example Usage

# Attach a source file for review
/file src/auth/middleware.ts Review this middleware for security issues

# Attach a screenshot for analysis
/file ~/Desktop/screenshot.png What error is shown here?

# Attach a CSV for data analysis
/file ./sales-q4.csv

# Attach a PDF document
/file ~/Documents/contract.pdf 이 계약서 요약해줘
~해줘 tip
"이 파일 봐줘 -- ~/report.pdf" -- The assistant will run /file ~/report.pdf and then analyze the content. You can also say "src/index.ts 파일 첨부해서 리뷰해줘" and the assistant will attach and review it in one step.

/ide

Controls the IDE diff view panel. When enabled, code changes proposed by the assistant are displayed in a side-by-side or unified diff format similar to VS Code's diff editor, rather than inline in the chat. This makes it easier to review multi-file changes before accepting them.

Syntax

/ide <mode>

Arguments

ArgumentDescription
popOpen the diff view in a new terminal window (pop-out). Requires a supported terminal emulator (iTerm2, Wezterm, or tmux).
onEnable inline diff view in the current terminal. Diffs appear in a split pane below the chat.
offDisable the diff view. Code changes return to inline display within the chat output.

Modes Explained

Terminal Requirements

ModeRequirement
popiTerm2, Wezterm, or tmux. Falls back to on if no supported emulator is detected.
onAny terminal with at least 80 columns and 40 rows recommended.
offNo requirements.

Example Usage

# Open diff view in a separate window
/ide pop

# Enable inline diff view
/ide on

# Turn off diff view
/ide off

# Typical workflow: enable diff, ask for changes, review
/ide on
"이 함수 리팩터링해줘 -- async/await으로 바꿔줘"
# Review the diff in the panel, then accept or reject
~해줘 tip
"IDE 모드 켜줘" -- Activates /ide on. You can also say "diff 뷰 팝업으로 열어줘" to trigger /ide pop, or "IDE 모드 꺼줘" for /ide off.

Platform Availability

The table below clarifies where each command works and where it does not:

CommandCLIWeb UITelegramDiscordElectron
/versionYesNoNoNoYes*
/quit, /qYesNoNoNoNo
/fileYesNoNoNoYes*
/ideYesNoNoNoYes*

* Electron desktop app includes an embedded terminal that supports CLI-only commands. The Web UI served via browser does not.

Troubleshooting

/file says "file not found"

Check that the path is correct relative to the directory where you launched jaw. Use an absolute path if unsure:

# Instead of relative path
/file ./data/report.csv

# Use absolute path
/file /Users/jun/projects/data/report.csv

/ide pop does nothing

The pop mode requires iTerm2, Wezterm, or tmux. If you are using a different terminal emulator (Terminal.app, Alacritty, Hyper), the command silently falls back to on mode. Check your terminal:

echo $TERM_PROGRAM
# Should output: iTerm.app, WezTerm, or tmux

/quit hangs

If /quit does not exit within 5 seconds, there may be a pending network request or file write. Press Ctrl+C to force-kill the process. Check ~/.cli-jaw/sessions/ to verify the session was saved.