Now Agents are Controllers
Makes code TonsOfFun!
Active Agent provides that missing AI layer in the Rails framework, offering a structured approach to building AI-powered applications through Agent Oriented Programming. Now Agents are Controllers! Designing applications using agents allows developers to create modular, reusable components that can be easily integrated into existing systems. This approach promotes code reusability, maintainability, and scalability, making it easier to build complex AI-driven applications with the Object Oriented Ruby code you already use today.
docs.activeagents.ai - The official documentation site for Active Agent.
Use bundler to add activeagent to your Gemfile and install:
bundle add activeagent
Add the generation provider gem you want to use:
# OpenAI
bundle add ruby-openai
# Anthropic
bundle add ruby-anthropic
# Ollama (uses OpenAI-compatible API)
bundle add ruby-openai
# OpenRouter (uses OpenAI-compatible API)
bundle add ruby-openai
Run the install generator to create the necessary configuration files:
rails generate active_agent:install
This creates:
config/active_agent.yml
: Configuration file for generation providersapp/agents
: Directory for your agent classesapp/views/agent_*
: Directory for agent prompt/view templates
Define an application agent:
class ApplicationAgent < ActiveAgent::Base
generate_with :openai,
instructions: "You are a helpful assistant.",
model: "gpt-4o-mini",
temperature: 0.7
end
Use your agent:
message = "Test Application Agent"
prompt = ApplicationAgent.with(message: message).prompt_context
response = prompt.generate_now
Generate a new agent:
rails generate active_agent:agent TravelAgent search book confirm
This creates an agent with actions that can be called:
class TravelAgent < ApplicationAgent
def search
# Your search logic here
prompt
end
def book
# Your booking logic here
prompt
end
def confirm
# Your confirmation logic here
prompt
end
end
Configure generation providers in config/active_agent.yml
:
development:
openai:
service: "OpenAI"
api_key: <%= Rails.application.credentials.dig(:openai, :api_key) %>
model: "gpt-4o-mini"
embeddings_model: "text-embedding-3-small"
anthropic:
service: "Anthropic"
api_key: <%= Rails.application.credentials.dig(:anthropic, :api_key) %>
model: "claude-3-5-sonnet"
ollama:
service: "Ollama"
model: "llama3.2"
embeddings_model: "nomic-embed-text"
host: "http://localhost:11434"
- Agent-Oriented Programming: Build AI applications using familiar Rails patterns
- Multiple Provider Support: Works with OpenAI, Anthropic, Ollama, and more
- Action-Based Design: Define agent capabilities through actions
- View Templates: Use ERB templates for prompts (text, JSON, HTML)
- Streaming Support: Real-time response streaming with ActionCable
- Tool/Function Calling: Agents can use tools to interact with external services
- Context Management: Maintain conversation history across interactions
- Structured Output: Define JSON schemas for predictable responses
Extract structured data from images, PDFs, and text:
prompt = DataExtractionAgent.with(
output_schema: :chart_schema,
image_path: Rails.root.join("sales_chart.png")
).parse_content
Translate text between languages:
response = TranslationAgent.with(
message: "Hi, I'm Justin",
locale: "japanese"
).translate.generate_now
Agents can use tools to perform actions:
# Agent with tool support
message = "Show me a cat"
prompt = SupportAgent.with(message: message).prompt_context
response = prompt.generate_now
# Response includes tool call results
We welcome contributions! Please see our Contributing Guide for details.
Active Agent is released under the MIT License.