Function: claude-code-ide--build-claude-command
claude-code-ide--build-claude-command is a natively compiled function
defined in claude-code-ide.el.
Signature
(claude-code-ide--build-claude-command &optional CONTINUE RESUME SESSION-ID)
Documentation
Build the Claude command with optional flags.
If CONTINUE is non-nil, add the -c flag.
If RESUME is non-nil, add the -r flag.
If SESSION-ID is provided, it's included in the MCP server URL path.
If claude-code-ide-cli-debug is non-nil, add the -d flag.
If claude-code-ide-system-prompt is non-nil, add the
--append-system-prompt flag.
Additional flags from claude-code-ide-cli-extra-flags are also included.
Source Code
;; Defined in /nix/store/yjvbhwl7p6zrbw9xlnni7y4hra8sa3pl-emacs-packages-deps/share/emacs/site-lisp/claude-code-ide.el
(defun claude-code-ide--build-claude-command (&optional continue resume session-id)
"Build the Claude command with optional flags.
If CONTINUE is non-nil, add the -c flag.
If RESUME is non-nil, add the -r flag.
If SESSION-ID is provided, it's included in the MCP server URL path.
If `claude-code-ide-cli-debug' is non-nil, add the -d flag.
If `claude-code-ide-system-prompt' is non-nil, add the
--append-system-prompt flag.
Additional flags from `claude-code-ide-cli-extra-flags' are also included."
(let ((claude-cmd claude-code-ide-cli-path))
;; Add debug flag if enabled
(when claude-code-ide-cli-debug
(setq claude-cmd (concat claude-cmd " -d")))
;; Add resume flag if requested
(when resume
(setq claude-cmd (concat claude-cmd " -r")))
;; Add continue flag if requested
(when continue
(setq claude-cmd (concat claude-cmd " -c")))
;; Add append-system-prompt flag with Emacs context
(let ((emacs-prompt "IMPORTANT: Connected to Emacs via claude-code-ide.el integration. Emacs uses mixed coordinates: Lines: 1-based (line 1 = first line), Columns: 0-based (column 0 = first column). Example: First character in file is at line 1, column 0. Available: xref (LSP), tree-sitter, imenu, project.el, flycheck/flymake diagnostics. Context-aware with automatic project/file/selection tracking.")
(combined-prompt nil))
;; Always include the Emacs-specific prompt
(setq combined-prompt emacs-prompt)
;; Append user's custom prompt if set
(when claude-code-ide-system-prompt
(setq combined-prompt (concat combined-prompt "\n\n" claude-code-ide-system-prompt)))
;; Add the combined prompt to the command
(setq claude-cmd (concat claude-cmd " --append-system-prompt "
(shell-quote-argument combined-prompt))))
;; Add any extra flags
(when (and claude-code-ide-cli-extra-flags
(not (string-empty-p claude-code-ide-cli-extra-flags)))
(setq claude-cmd (concat claude-cmd " " claude-code-ide-cli-extra-flags)))
;; Add MCP tools config if enabled
(when (claude-code-ide-mcp-server-ensure-server)
(when-let* ((config (claude-code-ide-mcp-server-get-config session-id)))
(let ((json-str (json-encode config)))
(claude-code-ide-debug "MCP tools config JSON: %s" json-str)
;; For vterm, we need to escape for sh -c context
;; First escape backslashes, then quotes
(setq json-str (replace-regexp-in-string "\\\\" "\\\\\\\\" json-str))
(setq json-str (replace-regexp-in-string "\"" "\\\\\"" json-str))
(setq claude-cmd (concat claude-cmd " --mcp-config \"" json-str "\""))
;; Add allowedTools flag if configured
(let ((allowed-tools
(cond
;; Auto mode: get all emacs-tools names
((eq claude-code-ide-mcp-allowed-tools 'auto)
(mapconcat 'identity (claude-code-ide-mcp-server-get-tool-names "mcp__emacs-tools__") " "))
;; List of specific tools
((listp claude-code-ide-mcp-allowed-tools)
(mapconcat 'identity claude-code-ide-mcp-allowed-tools " "))
;; String pattern or nil
(t claude-code-ide-mcp-allowed-tools))))
(when allowed-tools
(setq claude-cmd (concat claude-cmd " --allowedTools " allowed-tools)))))))
claude-cmd))