2.2 KiB
Claude API — Ruby
Note: The Ruby SDK supports the Claude API. A tool runner is available in beta via `client.beta.messages.tool_runner()`. Agent SDK is not yet available for Ruby.
Installation
```bash gem install anthropic ```
Client Initialization
```ruby require "anthropic"
Default (uses ANTHROPIC_API_KEY env var)
client = Anthropic::Client.new
Explicit API key
client = Anthropic::Client.new(api_key: "your-api-key") ```
Basic Message Request
```ruby message = client.messages.create( model: :"{{OPUS_ID}}", max_tokens: 1024, messages: [ { role: "user", content: "What is the capital of France?" } ] )
content is an array of polymorphic block objects (TextBlock, ThinkingBlock,
ToolUseBlock, ...). .type is a Symbol — compare with :text, not "text".
.text raises NoMethodError on non-TextBlock entries.
message.content.each do |block| puts block.text if block.type == :text end ```
Streaming
```ruby stream = client.messages.stream( model: :"{{OPUS_ID}}", max_tokens: 1024, messages: [{ role: "user", content: "Write a haiku" }] )
stream.text.each { |text| print(text) } ```
Tool Use
The Ruby SDK supports tool use via raw JSON schema definitions and also provides a beta tool runner for automatic tool execution.
Tool Runner (Beta)
```ruby class GetWeatherInput < Anthropic::BaseModel required :location, String, doc: "City and state, e.g. San Francisco, CA" end
class GetWeather < Anthropic::BaseTool doc "Get the current weather for a location"
input_schema GetWeatherInput
def call(input) "The weather in #{input.location} is sunny and 72°F." end end
client.beta.messages.tool_runner( model: :"{{OPUS_ID}}", max_tokens: 1024, tools: [GetWeather.new], messages: [{ role: "user", content: "What's the weather in San Francisco?" }] ).each_message do |message| puts message.content end ```
Manual Loop
See the shared tool use concepts for the tool definition format and agentic loop pattern.