Module: ClaudeSDK

Defined in:
lib/claude_sdk.rb,
lib/claude_sdk/types.rb,
lib/claude_sdk/errors.rb,
lib/claude_sdk/version.rb,
lib/claude_sdk/internal/client.rb,
lib/claude_sdk/internal/transport.rb,
lib/claude_sdk/internal/transport/subprocess_cli.rb

Defined Under Namespace

Modules: ContentBlock, Internal, McpServerConfig, Messages, PermissionMode Classes: CLIConnectionError, CLIJSONDecodeError, CLINotFoundError, ClaudeCodeOptions, Error, ProcessError

Constant Summary collapse

VERSION =
"0.1.6"

Class Method Summary collapse

Class Method Details

.query(prompt, options: nil) {|Message| ... } ⇒ Enumerator

Query Claude Code

Examples:

Simple usage

ClaudeSDK.query("Hello") do |message|
  puts message
end

With options

options = ClaudeSDK::ClaudeCodeOptions.new(
  system_prompt: "You are helpful",
  cwd: "/home/user"
)
ClaudeSDK.query("Hello", options: options) do |message|
  puts message
end

Without block (returns Enumerator)

messages = ClaudeSDK.query("Hello")
messages.each { |msg| puts msg }

Parameters:

  • prompt (String)

    The prompt to send to Claude

  • options (ClaudeCodeOptions, nil) (defaults to: nil)

    Optional configuration

Yields:

  • (Message)

    Messages from the conversation

Returns:

  • (Enumerator)

    if no block given



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/claude_sdk.rb', line 36

def query(prompt, options: nil, &block)
  options ||= ClaudeCodeOptions.new

  ENV["CLAUDE_CODE_ENTRYPOINT"] = "sdk-rb"

  client = Internal::InternalClient.new

  if block_given?
    Async do
      client.process_query(prompt: prompt, options: options, &block)
    end.wait
  else
    Enumerator.new do |yielder|
      Async do
        client.process_query(prompt: prompt, options: options) do |message|
          yielder << message
        end
      end
    end

  end
end