ClaudeWrapper.Query (ClaudeWrapper v0.4.0)

Copy Markdown View Source

Query command — the primary interface for executing prompts.

Wraps claude -p <prompt> with the full set of CLI flags.

Usage

config = ClaudeWrapper.Config.new(working_dir: "/path/to/project")

# Build a query
query = ClaudeWrapper.Query.new("Fix the failing test")
  |> ClaudeWrapper.Query.model("sonnet")
  |> ClaudeWrapper.Query.max_turns(5)
  |> ClaudeWrapper.Query.permission_mode(:bypass_permissions)

# Execute (one-shot, returns full result)
{:ok, result} = ClaudeWrapper.Query.execute(query, config)

# Or stream events
ClaudeWrapper.Query.stream(query, config)
|> Stream.each(&IO.inspect/1)
|> Stream.run()

Summary

Functions

Add a directory for tool access.

Set agent name.

Provide custom agents as JSON.

Add an allowed tool.

Append to the system prompt.

Set beta feature headers.

Enable brief mode.

Continue the most recent session.

Bypass all permission checks. Use in isolated worktrees.

Set debug log file.

Set debug filter.

Add a disallowed tool.

Set effort level.

Execute the query synchronously, returning a parsed %Result{}.

Set a fallback model.

Add a file resource.

Fork to a new session.

Include partial messages in streaming output.

Set input format.

Set JSON schema for structured output.

Set maximum budget in USD.

Set maximum turns.

Add an MCP config file path.

Set the model (e.g. "sonnet", "opus", "haiku").

Create a new query with the given prompt.

Disable session persistence.

Set output format.

Set permission mode.

Add a plugin directory.

Resume a specific session by ID.

Use a specific session ID.

Set settings source list.

Set settings JSON.

Execute the query and return a lazy stream of %StreamEvent{}.

Only use servers from --mcp-config.

Set the system prompt (overrides default).

Create tmux session.

Build the shell command string (for debugging).

Add a tool.

Create a git worktree for execution.

Types

effort()

@type effort() :: :low | :medium | :high | :max

input_format()

@type input_format() :: :text | :stream_json

output_format()

@type output_format() :: :text | :json | :stream_json

permission_mode()

@type permission_mode() ::
  :default | :accept_edits | :bypass_permissions | :dont_ask | :plan | :auto

t()

@type t() :: %ClaudeWrapper.Query{
  add_dir: [String.t()],
  agent: String.t() | nil,
  agents_json: String.t() | nil,
  allowed_tools: [String.t()],
  append_system_prompt: String.t() | nil,
  betas: String.t() | nil,
  brief: boolean(),
  continue_session: boolean(),
  dangerously_skip_permissions: boolean(),
  debug_file: String.t() | nil,
  debug_filter: String.t() | nil,
  disallowed_tools: [String.t()],
  effort: effort() | nil,
  fallback_model: String.t() | nil,
  files: [String.t()],
  fork_session: boolean(),
  include_partial_messages: boolean(),
  input_format: input_format() | nil,
  json_schema: String.t() | nil,
  max_budget_usd: float() | nil,
  max_turns: pos_integer() | nil,
  mcp_config: [String.t()],
  model: String.t() | nil,
  no_session_persistence: boolean(),
  output_format: output_format() | nil,
  permission_mode: permission_mode() | nil,
  plugin_dirs: [String.t()],
  prompt: String.t(),
  resume: String.t() | nil,
  session_id: String.t() | nil,
  setting_sources: String.t() | nil,
  settings: String.t() | nil,
  strict_mcp_config: boolean(),
  system_prompt: String.t() | nil,
  tmux: boolean(),
  tools: [String.t()],
  worktree: boolean()
}

Functions

add_dir(q, dir)

@spec add_dir(t(), String.t()) :: t()

Add a directory for tool access.

agent(q, name)

@spec agent(t(), String.t()) :: t()

Set agent name.

agents_json(q, json)

@spec agents_json(t(), String.t()) :: t()

Provide custom agents as JSON.

allowed_tool(q, tool)

@spec allowed_tool(t(), String.t()) :: t()

Add an allowed tool.

append_system_prompt(q, prompt)

@spec append_system_prompt(t(), String.t()) :: t()

Append to the system prompt.

betas(q, betas)

@spec betas(t(), String.t()) :: t()

Set beta feature headers.

brief(q)

@spec brief(t()) :: t()

Enable brief mode.

continue_session(q)

@spec continue_session(t()) :: t()

Continue the most recent session.

dangerously_skip_permissions(q)

@spec dangerously_skip_permissions(t()) :: t()

Bypass all permission checks. Use in isolated worktrees.

debug_file(q, path)

@spec debug_file(t(), String.t()) :: t()

Set debug log file.

debug_filter(q, filter)

@spec debug_filter(t(), String.t()) :: t()

Set debug filter.

disallowed_tool(q, tool)

@spec disallowed_tool(t(), String.t()) :: t()

Add a disallowed tool.

effort(q, level)

@spec effort(t(), effort()) :: t()

Set effort level.

execute(query, config)

@spec execute(t(), ClaudeWrapper.Config.t()) ::
  {:ok, ClaudeWrapper.Result.t()} | {:error, term()}

Execute the query synchronously, returning a parsed %Result{}.

Automatically sets --output-format json for parsing.

fallback_model(q, model)

@spec fallback_model(t(), String.t()) :: t()

Set a fallback model.

file(q, path)

@spec file(t(), String.t()) :: t()

Add a file resource.

fork_session(q)

@spec fork_session(t()) :: t()

Fork to a new session.

include_partial_messages(q)

@spec include_partial_messages(t()) :: t()

Include partial messages in streaming output.

input_format(q, fmt)

@spec input_format(t(), input_format()) :: t()

Set input format.

json_schema(q, schema)

@spec json_schema(t(), String.t()) :: t()

Set JSON schema for structured output.

max_budget_usd(q, budget)

@spec max_budget_usd(t(), float()) :: t()

Set maximum budget in USD.

max_turns(q, n)

@spec max_turns(t(), pos_integer()) :: t()

Set maximum turns.

mcp_config(q, path)

@spec mcp_config(t(), String.t()) :: t()

Add an MCP config file path.

model(q, model)

@spec model(t(), String.t()) :: t()

Set the model (e.g. "sonnet", "opus", "haiku").

new(prompt)

@spec new(String.t()) :: t()

Create a new query with the given prompt.

no_session_persistence(q)

@spec no_session_persistence(t()) :: t()

Disable session persistence.

output_format(q, fmt)

@spec output_format(t(), output_format()) :: t()

Set output format.

permission_mode(q, mode)

@spec permission_mode(t(), permission_mode()) :: t()

Set permission mode.

plugin_dir(q, dir)

@spec plugin_dir(t(), String.t()) :: t()

Add a plugin directory.

resume(q, id)

@spec resume(t(), String.t()) :: t()

Resume a specific session by ID.

session_id(q, id)

@spec session_id(t(), String.t()) :: t()

Use a specific session ID.

setting_sources(q, sources)

@spec setting_sources(t(), String.t()) :: t()

Set settings source list.

settings(q, json)

@spec settings(t(), String.t()) :: t()

Set settings JSON.

stream(query, config)

@spec stream(t(), ClaudeWrapper.Config.t()) :: Enumerable.t()

Execute the query and return a lazy stream of %StreamEvent{}.

Uses a Port with :line mode to read NDJSON output line-by-line. The port is opened when the stream is consumed and closed when the stream terminates.

strict_mcp_config(q)

@spec strict_mcp_config(t()) :: t()

Only use servers from --mcp-config.

system_prompt(q, prompt)

@spec system_prompt(t(), String.t()) :: t()

Set the system prompt (overrides default).

tmux(q)

@spec tmux(t()) :: t()

Create tmux session.

to_command_string(query, config)

@spec to_command_string(t(), ClaudeWrapper.Config.t()) :: String.t()

Build the shell command string (for debugging).

tool(q, tool)

@spec tool(t(), String.t()) :: t()

Add a tool.

worktree(q)

@spec worktree(t()) :: t()

Create a git worktree for execution.