
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Unofficial Ruby SDK for Claude Code. See the Claude Code SDK documentation for more information.
Add this line to your application's Gemfile:
gem 'claude_code'
And then execute:
bundle install
Or install it yourself as:
gem install claude_code
Prerequisites:
npm install -g @anthropic-ai/claude-code
require 'claude_code'
# Simple query
ClaudeCode.query(prompt: "What is 2 + 2?").each do |message|
puts message
end
First, set your API key:
export ANTHROPIC_API_KEY='your-api-key-here'
Or for Amazon Bedrock:
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_ACCESS_KEY_ID='your-access-key'
export AWS_SECRET_ACCESS_KEY='your-secret-key'
export AWS_REGION='us-west-2'
Or for Google Vertex AI:
export CLAUDE_CODE_USE_VERTEX=1
export GOOGLE_APPLICATION_CREDENTIALS='path/to/service-account.json'
export GOOGLE_CLOUD_PROJECT='your-project-id'
require 'claude_code'
# Simple query
ClaudeCode.query(prompt: "Hello Claude").each do |message|
if message.is_a?(ClaudeCode::AssistantMessage)
message.content.each do |block|
if block.is_a?(ClaudeCode::TextBlock)
puts block.text
end
end
end
end
# With options
options = ClaudeCode::ClaudeCodeOptions.new(
system_prompt: "You are a helpful assistant",
max_turns: 1
)
ClaudeCode.query(prompt: "Tell me a joke", options: options).each do |message|
puts message
end
# Continue the most recent conversation
ClaudeCode.continue_conversation("What did we just discuss?").each do |message|
# Process messages...
end
# Resume a specific conversation by session ID
session_id = "550e8400-e29b-41d4-a716-446655440000"
ClaudeCode.resume_conversation(session_id, "Continue our discussion").each do |message|
# Process messages...
end
# Continue with options
options = ClaudeCode::ClaudeCodeOptions.new(max_turns: 2)
ClaudeCode.continue_conversation("Add more details", options: options)
For multi-turn conversations without restarting the CLI, use streaming JSON input:
# Create multiple user messages for a conversation
messages = [
ClaudeCode::JSONLHelpers.create_user_message("Hello! I'm working on a Ruby project."),
ClaudeCode::JSONLHelpers.create_user_message("Can you help me understand modules?"),
ClaudeCode::JSONLHelpers.create_user_message("Show me a practical example.")
]
# Process all messages in a single streaming session
ClaudeCode.stream_json_query(messages) do |message|
case message
when ClaudeCode::AssistantMessage
message.content.each do |block|
puts block.text if block.is_a?(ClaudeCode::TextBlock)
end
when ClaudeCode::ResultMessage
puts "Cost: $#{message.total_cost_usd}"
end
end
# Manual JSONL format (equivalent to CLI)
custom_messages = [
{
'type' => 'user',
'message' => {
'role' => 'user',
'content' => [{'type' => 'text', 'text' => 'Explain this code'}]
}
}
]
ClaudeCode.stream_json_query(custom_messages)
options = ClaudeCode::ClaudeCodeOptions.new(
allowed_tools: ["Read", "Write", "Bash"],
permission_mode: 'acceptEdits' # auto-accept file edits
)
ClaudeCode.query(
prompt: "Create a hello.rb file",
options: options
).each do |message|
# Process tool use and results
end
options = ClaudeCode::ClaudeCodeOptions.new(
cwd: "/path/to/project"
)
ClaudeCode.query(prompt:, options: nil, cli_path: nil, mcp_servers: {})
Main function for querying Claude.
Parameters:
prompt
(String): The prompt to send to Claudeoptions
(ClaudeCodeOptions): Optional configurationcli_path
(String): Optional path to Claude CLI binarymcp_servers
(Hash): Optional MCP server configurationsReturns: Enumerator of response messages
ClaudeCode.continue_conversation(prompt = nil, options: nil, cli_path: nil, mcp_servers: {})
Continue the most recent conversation.
Parameters:
prompt
(String): Optional new prompt to addoptions
(ClaudeCodeOptions): Optional configurationcli_path
(String): Optional path to Claude CLI binarymcp_servers
(Hash): Optional MCP server configurationsReturns: Enumerator of response messages
ClaudeCode.resume_conversation(session_id, prompt = nil, options: nil, cli_path: nil, mcp_servers: {})
Resume a specific conversation by session ID.
Parameters:
session_id
(String): The session ID to resumeprompt
(String): Optional new prompt to addoptions
(ClaudeCodeOptions): Optional configurationcli_path
(String): Optional path to Claude CLI binarymcp_servers
(Hash): Optional MCP server configurationsReturns: Enumerator of response messages
ClaudeCode.stream_query(prompt:, options: nil, cli_path: nil, mcp_servers: {}, &block)
Stream query responses with auto-formatting or custom block handling.
ClaudeCode.stream_json_query(messages, options: nil, cli_path: nil, mcp_servers: {})
Send multiple messages via streaming JSON input (JSONL format). This allows multiple turns of conversation without re-launching the Claude binary.
Parameters:
messages
(Array): Array of JSONL message objectsoptions
(ClaudeCodeOptions): Optional configuration (automatically sets input_format: 'stream-json')cli_path
(String): Optional path to Claude CLI binarymcp_servers
(Hash): Optional MCP server configurationsReturns: Enumerator of response messages
ClaudeCode.quick_mcp_query(prompt, server_name:, server_url:, tools:, **options)
Ultra-convenient method for quick MCP server usage.
ClaudeCode.add_mcp_server(name, config)
Helper to create MCP server configurations.
ClaudeCode::JSONLHelpers.create_user_message(text)
Create a user message in the format expected by Claude CLI.
ClaudeCode::JSONLHelpers.create_conversation(*turns)
Create multiple user messages from text strings.
ClaudeCode::JSONLHelpers.format_messages_as_jsonl(messages)
Format multiple messages as JSONL string.
See lib/claude_code_sdk/types.rb for complete type definitions:
ClaudeCodeOptions
- Configuration optionsAssistantMessage
, UserMessage
, SystemMessage
, ResultMessage
- Message typesTextBlock
, ToolUseBlock
, ToolResultBlock
- Content blocksbegin
ClaudeCode.query(prompt: "Hello").each do |message|
# Process message
end
rescue ClaudeCode::CLINotFoundError
puts "Please install Claude Code"
rescue ClaudeCode::ProcessError => e
puts "Process failed with exit code: #{e.exit_code}"
rescue ClaudeCode::CLIJSONDecodeError => e
puts "Failed to parse response: #{e}"
end
See lib/claude_code_sdk/errors.rb for all error types.
See the Claude Code documentation for a complete list of available tools.
See examples/quick_start.rb for a complete working example.
MIT
FAQs
Unknown package
We found that claude_code demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.