# 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: :"claude-opus-4-6", max_tokens: 1024, messages: [ { role: "user", content: "What is the capital of France?" } ] ) puts message.content.first.text ``` --- ## Streaming ```ruby stream = client.messages.stream( model: :"claude-opus-4-6", 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: :"claude-opus-4-6", 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](../shared/tool-use-concepts.md) for the tool definition format and agentic loop pattern.