rcrewai 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +99 -0
- data/CHANGELOG.md +24 -0
- data/README.md +33 -1
- data/Rakefile +53 -53
- data/bin/rcrewai +3 -3
- data/docs/mcp.md +109 -0
- data/docs/superpowers/plans/2026-05-11-llm-modernization.md +2753 -0
- data/docs/superpowers/specs/2026-05-11-llm-modernization-design.md +479 -0
- data/docs/upgrading-to-0.3.md +163 -0
- data/examples/async_execution_example.rb +82 -81
- data/examples/hierarchical_crew_example.rb +68 -72
- data/examples/human_in_the_loop_example.rb +73 -74
- data/examples/mcp_example.rb +48 -0
- data/examples/native_tools_example.rb +64 -0
- data/examples/streaming_example.rb +56 -0
- data/lib/rcrewai/agent.rb +148 -287
- data/lib/rcrewai/async_executor.rb +43 -43
- data/lib/rcrewai/cli.rb +11 -11
- data/lib/rcrewai/configuration.rb +14 -9
- data/lib/rcrewai/crew.rb +56 -39
- data/lib/rcrewai/events.rb +30 -0
- data/lib/rcrewai/human_input.rb +104 -114
- data/lib/rcrewai/legacy_react_runner.rb +172 -0
- data/lib/rcrewai/llm_client.rb +1 -1
- data/lib/rcrewai/llm_clients/anthropic.rb +174 -54
- data/lib/rcrewai/llm_clients/azure.rb +23 -128
- data/lib/rcrewai/llm_clients/base.rb +11 -7
- data/lib/rcrewai/llm_clients/google.rb +159 -95
- data/lib/rcrewai/llm_clients/ollama.rb +150 -106
- data/lib/rcrewai/llm_clients/openai.rb +140 -63
- data/lib/rcrewai/mcp/client.rb +101 -0
- data/lib/rcrewai/mcp/tool_adapter.rb +59 -0
- data/lib/rcrewai/mcp/transport/http.rb +53 -0
- data/lib/rcrewai/mcp/transport/stdio.rb +55 -0
- data/lib/rcrewai/mcp.rb +8 -0
- data/lib/rcrewai/memory.rb +45 -37
- data/lib/rcrewai/pricing.rb +34 -0
- data/lib/rcrewai/process.rb +86 -95
- data/lib/rcrewai/provider_schema.rb +38 -0
- data/lib/rcrewai/sse_parser.rb +55 -0
- data/lib/rcrewai/task.rb +56 -64
- data/lib/rcrewai/tool_runner.rb +132 -0
- data/lib/rcrewai/tool_schema.rb +97 -0
- data/lib/rcrewai/tools/base.rb +98 -37
- data/lib/rcrewai/tools/code_executor.rb +71 -74
- data/lib/rcrewai/tools/email_sender.rb +70 -78
- data/lib/rcrewai/tools/file_reader.rb +38 -30
- data/lib/rcrewai/tools/file_writer.rb +40 -38
- data/lib/rcrewai/tools/pdf_processor.rb +115 -130
- data/lib/rcrewai/tools/sql_database.rb +58 -55
- data/lib/rcrewai/tools/web_search.rb +26 -25
- data/lib/rcrewai/version.rb +2 -2
- data/lib/rcrewai.rb +18 -10
- data/rcrewai.gemspec +55 -36
- metadata +86 -50
|
@@ -8,24 +8,29 @@ require 'uri'
|
|
|
8
8
|
module RCrewAI
|
|
9
9
|
module Tools
|
|
10
10
|
class WebSearch < Base
|
|
11
|
+
tool_name 'web_search'
|
|
12
|
+
description 'Search the web using DuckDuckGo and return top results'
|
|
13
|
+
param :query, type: :string, required: true,
|
|
14
|
+
description: 'Search query'
|
|
15
|
+
param :max_results, type: :integer, default: 5,
|
|
16
|
+
description: 'Number of results to return (1-25)'
|
|
17
|
+
|
|
11
18
|
def initialize(**options)
|
|
12
19
|
super()
|
|
13
|
-
@name = 'websearch'
|
|
14
|
-
@description = 'Search the web for information using DuckDuckGo'
|
|
15
20
|
@max_results = options.fetch(:max_results, 5)
|
|
16
21
|
@timeout = options.fetch(:timeout, 30)
|
|
17
22
|
end
|
|
18
23
|
|
|
19
24
|
def execute(**params)
|
|
20
25
|
validate_params!(params, required: [:query], optional: [:max_results])
|
|
21
|
-
|
|
26
|
+
|
|
22
27
|
query = params[:query]
|
|
23
28
|
max_results = params[:max_results] || @max_results
|
|
24
|
-
|
|
29
|
+
|
|
25
30
|
begin
|
|
26
31
|
search_results = perform_search(query, max_results)
|
|
27
32
|
format_results(search_results)
|
|
28
|
-
rescue => e
|
|
33
|
+
rescue StandardError => e
|
|
29
34
|
"Search failed: #{e.message}"
|
|
30
35
|
end
|
|
31
36
|
end
|
|
@@ -36,14 +41,12 @@ module RCrewAI
|
|
|
36
41
|
# Use DuckDuckGo HTML search (no API key required)
|
|
37
42
|
encoded_query = URI.encode_www_form_component(query)
|
|
38
43
|
url = "https://html.duckduckgo.com/html/?q=#{encoded_query}"
|
|
39
|
-
|
|
44
|
+
|
|
40
45
|
response = http_client.get(url, {}, headers)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
raise ToolError, "Search request failed with status: #{response.status}"
|
|
46
|
-
end
|
|
46
|
+
|
|
47
|
+
raise ToolError, "Search request failed with status: #{response.status}" unless response.success?
|
|
48
|
+
|
|
49
|
+
parse_duckduckgo_results(response.body, max_results)
|
|
47
50
|
end
|
|
48
51
|
|
|
49
52
|
def parse_duckduckgo_results(html, max_results)
|
|
@@ -62,13 +65,13 @@ module RCrewAI
|
|
|
62
65
|
# Clean up URL (DuckDuckGo sometimes wraps URLs)
|
|
63
66
|
url = clean_duckduckgo_url(url) if url
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
next unless title.present? && url.present?
|
|
69
|
+
|
|
70
|
+
results << {
|
|
71
|
+
title: title,
|
|
72
|
+
url: url,
|
|
73
|
+
snippet: snippet
|
|
74
|
+
}
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
results
|
|
@@ -80,17 +83,15 @@ module RCrewAI
|
|
|
80
83
|
# Extract the actual URL from the redirect
|
|
81
84
|
uri = URI.parse("https://duckduckgo.com#{url}")
|
|
82
85
|
query_params = URI.decode_www_form(uri.query || '')
|
|
83
|
-
actual_url = query_params.find { |k,
|
|
86
|
+
actual_url = query_params.find { |k, _v| k == 'uddg' }&.last
|
|
84
87
|
return actual_url if actual_url
|
|
85
88
|
end
|
|
86
|
-
|
|
89
|
+
|
|
87
90
|
url
|
|
88
91
|
end
|
|
89
92
|
|
|
90
93
|
def format_results(results)
|
|
91
|
-
if results.empty?
|
|
92
|
-
return "No search results found."
|
|
93
|
-
end
|
|
94
|
+
return 'No search results found.' if results.empty?
|
|
94
95
|
|
|
95
96
|
formatted = "Search Results:\n\n"
|
|
96
97
|
results.each_with_index do |result, index|
|
|
@@ -128,4 +129,4 @@ class String
|
|
|
128
129
|
def present?
|
|
129
130
|
!empty?
|
|
130
131
|
end
|
|
131
|
-
end
|
|
132
|
+
end
|
data/lib/rcrewai/version.rb
CHANGED
data/lib/rcrewai.rb
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
3
|
+
require 'thor'
|
|
4
|
+
require 'faraday'
|
|
5
|
+
require 'json'
|
|
6
|
+
require 'logger'
|
|
7
|
+
require 'concurrent'
|
|
8
|
+
require 'nokogiri'
|
|
9
9
|
|
|
10
10
|
module RCrewAI
|
|
11
11
|
class Error < StandardError; end
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
def self.root
|
|
14
|
-
@root ||= Pathname.new(File.expand_path(
|
|
14
|
+
@root ||= Pathname.new(File.expand_path('..', __dir__))
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# Load all components manually to ensure proper order
|
|
19
19
|
require_relative 'rcrewai/version'
|
|
20
20
|
require_relative 'rcrewai/configuration'
|
|
21
|
+
require_relative 'rcrewai/events'
|
|
22
|
+
require_relative 'rcrewai/sse_parser'
|
|
23
|
+
require_relative 'rcrewai/pricing'
|
|
21
24
|
require_relative 'rcrewai/llm_client'
|
|
22
25
|
require_relative 'rcrewai/memory'
|
|
23
26
|
require_relative 'rcrewai/human_input'
|
|
27
|
+
require_relative 'rcrewai/tool_schema'
|
|
28
|
+
require_relative 'rcrewai/provider_schema'
|
|
24
29
|
require_relative 'rcrewai/tools/base'
|
|
25
30
|
require_relative 'rcrewai/tools/web_search'
|
|
26
31
|
require_relative 'rcrewai/tools/file_reader'
|
|
@@ -29,8 +34,11 @@ require_relative 'rcrewai/tools/sql_database'
|
|
|
29
34
|
require_relative 'rcrewai/tools/email_sender'
|
|
30
35
|
require_relative 'rcrewai/tools/code_executor'
|
|
31
36
|
require_relative 'rcrewai/tools/pdf_processor'
|
|
37
|
+
require_relative 'rcrewai/tool_runner'
|
|
38
|
+
require_relative 'rcrewai/legacy_react_runner'
|
|
32
39
|
require_relative 'rcrewai/process'
|
|
33
40
|
require_relative 'rcrewai/async_executor'
|
|
34
41
|
require_relative 'rcrewai/agent'
|
|
35
|
-
require_relative 'rcrewai/task'
|
|
36
|
-
require_relative 'rcrewai/crew'
|
|
42
|
+
require_relative 'rcrewai/task'
|
|
43
|
+
require_relative 'rcrewai/crew'
|
|
44
|
+
require_relative 'rcrewai/mcp'
|
data/rcrewai.gemspec
CHANGED
|
@@ -1,22 +1,41 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative 'lib/rcrewai/version'
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name =
|
|
6
|
+
spec.name = 'rcrewai'
|
|
7
7
|
spec.version = RCrewAI::VERSION
|
|
8
|
-
spec.authors = [
|
|
9
|
-
spec.email = [
|
|
8
|
+
spec.authors = ['gkosmo']
|
|
9
|
+
spec.email = ['gkosmo1@hotmail.com']
|
|
10
10
|
|
|
11
|
-
spec.summary =
|
|
12
|
-
spec.description =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
spec.required_ruby_version = ">= 3.0.0"
|
|
11
|
+
spec.summary = 'Build intelligent AI agent crews in Ruby - CrewAI implementation with multi-LLM support'
|
|
12
|
+
spec.description = <<~DESC
|
|
13
|
+
RCrewAI is a powerful Ruby framework for creating autonomous AI agent crews that collaborate to solve complex tasks.
|
|
14
|
+
Build intelligent workflows with reasoning agents, tool usage, memory systems, and human oversight.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
Key Features:
|
|
17
|
+
• Multi-Agent Orchestration: Create crews of specialized AI agents that work together
|
|
18
|
+
• Multi-LLM Support: OpenAI GPT-4, Anthropic Claude, Google Gemini, Azure OpenAI, Ollama
|
|
19
|
+
• Rich Tool Ecosystem: Web search, file operations, SQL databases, email, code execution, PDF processing
|
|
20
|
+
• Agent Memory: Short-term and long-term memory for learning from past executions
|
|
21
|
+
• Human-in-the-Loop: Interactive approval workflows and collaborative decision making
|
|
22
|
+
• Advanced Task Management: Dependencies, retries, async execution, and context sharing
|
|
23
|
+
• Hierarchical Teams: Manager agents that coordinate and delegate to specialist agents
|
|
24
|
+
• Production Ready: Security controls, error handling, comprehensive logging, and monitoring
|
|
25
|
+
• Ruby-First Design: Built specifically for Ruby developers with idiomatic patterns
|
|
26
|
+
• CLI Tools: Command-line interface for creating and managing AI crews
|
|
27
|
+
DESC
|
|
28
|
+
spec.homepage = 'https://github.com/gkosmo/rcrewAI'
|
|
29
|
+
spec.license = 'MIT'
|
|
30
|
+
spec.required_ruby_version = '>= 3.0.0'
|
|
31
|
+
|
|
32
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
33
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
|
34
|
+
spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
35
|
+
spec.metadata['documentation_uri'] = 'https://gkosmo.github.io/rcrewAI/'
|
|
36
|
+
spec.metadata['bug_tracker_uri'] = "#{spec.homepage}/issues"
|
|
37
|
+
spec.metadata['wiki_uri'] = "#{spec.homepage}/wiki"
|
|
38
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
20
39
|
|
|
21
40
|
# Specify which files should be added to the gem when it is released.
|
|
22
41
|
spec.files = Dir.chdir(__dir__) do
|
|
@@ -25,30 +44,30 @@ Gem::Specification.new do |spec|
|
|
|
25
44
|
f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile])
|
|
26
45
|
end
|
|
27
46
|
end
|
|
28
|
-
spec.bindir =
|
|
29
|
-
spec.executables = [
|
|
30
|
-
spec.require_paths = [
|
|
47
|
+
spec.bindir = 'bin'
|
|
48
|
+
spec.executables = ['rcrewai']
|
|
49
|
+
spec.require_paths = ['lib']
|
|
31
50
|
|
|
32
51
|
# Runtime dependencies
|
|
33
|
-
spec.add_dependency
|
|
34
|
-
spec.add_dependency
|
|
35
|
-
spec.add_dependency
|
|
36
|
-
spec.add_dependency
|
|
37
|
-
spec.add_dependency
|
|
38
|
-
spec.add_dependency
|
|
39
|
-
spec.add_dependency
|
|
40
|
-
spec.add_dependency
|
|
41
|
-
spec.add_dependency
|
|
42
|
-
spec.add_dependency
|
|
43
|
-
spec.add_dependency
|
|
44
|
-
|
|
52
|
+
spec.add_dependency 'anthropic', '~> 0.2'
|
|
53
|
+
spec.add_dependency 'concurrent-ruby', '~> 1.2'
|
|
54
|
+
spec.add_dependency 'faraday', '~> 2.7'
|
|
55
|
+
spec.add_dependency 'faraday-multipart', '~> 1.0'
|
|
56
|
+
spec.add_dependency 'json', '~> 2.6'
|
|
57
|
+
spec.add_dependency 'logger', '~> 1.5'
|
|
58
|
+
spec.add_dependency 'mail', '~> 2.8'
|
|
59
|
+
spec.add_dependency 'nokogiri', '~> 1.15'
|
|
60
|
+
spec.add_dependency 'pdf-reader', '~> 2.11'
|
|
61
|
+
spec.add_dependency 'ruby-openai', '~> 6.3'
|
|
62
|
+
spec.add_dependency 'thor', '~> 1.3'
|
|
63
|
+
|
|
45
64
|
# Development dependencies
|
|
46
|
-
spec.add_development_dependency
|
|
47
|
-
spec.add_development_dependency
|
|
48
|
-
spec.add_development_dependency
|
|
49
|
-
spec.add_development_dependency
|
|
50
|
-
spec.add_development_dependency
|
|
51
|
-
spec.add_development_dependency
|
|
52
|
-
spec.add_development_dependency
|
|
53
|
-
spec.add_development_dependency
|
|
54
|
-
end
|
|
65
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
66
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
67
|
+
spec.add_development_dependency 'rspec', '~> 3.12'
|
|
68
|
+
spec.add_development_dependency 'rubocop', '~> 1.50'
|
|
69
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.20'
|
|
70
|
+
spec.add_development_dependency 'simplecov', '~> 0.22'
|
|
71
|
+
spec.add_development_dependency 'vcr', '~> 6.1'
|
|
72
|
+
spec.add_development_dependency 'webmock', '~> 3.18'
|
|
73
|
+
end
|
metadata
CHANGED
|
@@ -1,29 +1,42 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rcrewai
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- gkosmo
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
13
|
+
name: anthropic
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '0.2'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '0.2'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: concurrent-ruby
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '1.2'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '1.2'
|
|
27
40
|
- !ruby/object:Gem::Dependency
|
|
28
41
|
name: faraday
|
|
29
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -81,19 +94,19 @@ dependencies:
|
|
|
81
94
|
- !ruby/object:Gem::Version
|
|
82
95
|
version: '1.5'
|
|
83
96
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
97
|
+
name: mail
|
|
85
98
|
requirement: !ruby/object:Gem::Requirement
|
|
86
99
|
requirements:
|
|
87
100
|
- - "~>"
|
|
88
101
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
102
|
+
version: '2.8'
|
|
90
103
|
type: :runtime
|
|
91
104
|
prerelease: false
|
|
92
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
106
|
requirements:
|
|
94
107
|
- - "~>"
|
|
95
108
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
109
|
+
version: '2.8'
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
|
98
111
|
name: nokogiri
|
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,61 +122,47 @@ dependencies:
|
|
|
109
122
|
- !ruby/object:Gem::Version
|
|
110
123
|
version: '1.15'
|
|
111
124
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '6.3'
|
|
118
|
-
type: :runtime
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '6.3'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: anthropic
|
|
125
|
+
name: pdf-reader
|
|
127
126
|
requirement: !ruby/object:Gem::Requirement
|
|
128
127
|
requirements:
|
|
129
128
|
- - "~>"
|
|
130
129
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '
|
|
130
|
+
version: '2.11'
|
|
132
131
|
type: :runtime
|
|
133
132
|
prerelease: false
|
|
134
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
134
|
requirements:
|
|
136
135
|
- - "~>"
|
|
137
136
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '
|
|
137
|
+
version: '2.11'
|
|
139
138
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
139
|
+
name: ruby-openai
|
|
141
140
|
requirement: !ruby/object:Gem::Requirement
|
|
142
141
|
requirements:
|
|
143
142
|
- - "~>"
|
|
144
143
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
144
|
+
version: '6.3'
|
|
146
145
|
type: :runtime
|
|
147
146
|
prerelease: false
|
|
148
147
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
148
|
requirements:
|
|
150
149
|
- - "~>"
|
|
151
150
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
151
|
+
version: '6.3'
|
|
153
152
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
153
|
+
name: thor
|
|
155
154
|
requirement: !ruby/object:Gem::Requirement
|
|
156
155
|
requirements:
|
|
157
156
|
- - "~>"
|
|
158
157
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '
|
|
158
|
+
version: '1.3'
|
|
160
159
|
type: :runtime
|
|
161
160
|
prerelease: false
|
|
162
161
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
162
|
requirements:
|
|
164
163
|
- - "~>"
|
|
165
164
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '
|
|
165
|
+
version: '1.3'
|
|
167
166
|
- !ruby/object:Gem::Dependency
|
|
168
167
|
name: bundler
|
|
169
168
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -207,33 +206,33 @@ dependencies:
|
|
|
207
206
|
- !ruby/object:Gem::Version
|
|
208
207
|
version: '3.12'
|
|
209
208
|
- !ruby/object:Gem::Dependency
|
|
210
|
-
name:
|
|
209
|
+
name: rubocop
|
|
211
210
|
requirement: !ruby/object:Gem::Requirement
|
|
212
211
|
requirements:
|
|
213
212
|
- - "~>"
|
|
214
213
|
- !ruby/object:Gem::Version
|
|
215
|
-
version: '
|
|
214
|
+
version: '1.50'
|
|
216
215
|
type: :development
|
|
217
216
|
prerelease: false
|
|
218
217
|
version_requirements: !ruby/object:Gem::Requirement
|
|
219
218
|
requirements:
|
|
220
219
|
- - "~>"
|
|
221
220
|
- !ruby/object:Gem::Version
|
|
222
|
-
version: '
|
|
221
|
+
version: '1.50'
|
|
223
222
|
- !ruby/object:Gem::Dependency
|
|
224
|
-
name:
|
|
223
|
+
name: rubocop-rspec
|
|
225
224
|
requirement: !ruby/object:Gem::Requirement
|
|
226
225
|
requirements:
|
|
227
226
|
- - "~>"
|
|
228
227
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: '
|
|
228
|
+
version: '2.20'
|
|
230
229
|
type: :development
|
|
231
230
|
prerelease: false
|
|
232
231
|
version_requirements: !ruby/object:Gem::Requirement
|
|
233
232
|
requirements:
|
|
234
233
|
- - "~>"
|
|
235
234
|
- !ruby/object:Gem::Version
|
|
236
|
-
version: '
|
|
235
|
+
version: '2.20'
|
|
237
236
|
- !ruby/object:Gem::Dependency
|
|
238
237
|
name: simplecov
|
|
239
238
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -249,35 +248,48 @@ dependencies:
|
|
|
249
248
|
- !ruby/object:Gem::Version
|
|
250
249
|
version: '0.22'
|
|
251
250
|
- !ruby/object:Gem::Dependency
|
|
252
|
-
name:
|
|
251
|
+
name: vcr
|
|
253
252
|
requirement: !ruby/object:Gem::Requirement
|
|
254
253
|
requirements:
|
|
255
254
|
- - "~>"
|
|
256
255
|
- !ruby/object:Gem::Version
|
|
257
|
-
version: '1
|
|
256
|
+
version: '6.1'
|
|
258
257
|
type: :development
|
|
259
258
|
prerelease: false
|
|
260
259
|
version_requirements: !ruby/object:Gem::Requirement
|
|
261
260
|
requirements:
|
|
262
261
|
- - "~>"
|
|
263
262
|
- !ruby/object:Gem::Version
|
|
264
|
-
version: '1
|
|
263
|
+
version: '6.1'
|
|
265
264
|
- !ruby/object:Gem::Dependency
|
|
266
|
-
name:
|
|
265
|
+
name: webmock
|
|
267
266
|
requirement: !ruby/object:Gem::Requirement
|
|
268
267
|
requirements:
|
|
269
268
|
- - "~>"
|
|
270
269
|
- !ruby/object:Gem::Version
|
|
271
|
-
version: '
|
|
270
|
+
version: '3.18'
|
|
272
271
|
type: :development
|
|
273
272
|
prerelease: false
|
|
274
273
|
version_requirements: !ruby/object:Gem::Requirement
|
|
275
274
|
requirements:
|
|
276
275
|
- - "~>"
|
|
277
276
|
- !ruby/object:Gem::Version
|
|
278
|
-
version: '
|
|
279
|
-
description:
|
|
280
|
-
tasks
|
|
277
|
+
version: '3.18'
|
|
278
|
+
description: |
|
|
279
|
+
RCrewAI is a powerful Ruby framework for creating autonomous AI agent crews that collaborate to solve complex tasks.
|
|
280
|
+
Build intelligent workflows with reasoning agents, tool usage, memory systems, and human oversight.
|
|
281
|
+
|
|
282
|
+
Key Features:
|
|
283
|
+
• Multi-Agent Orchestration: Create crews of specialized AI agents that work together
|
|
284
|
+
• Multi-LLM Support: OpenAI GPT-4, Anthropic Claude, Google Gemini, Azure OpenAI, Ollama
|
|
285
|
+
• Rich Tool Ecosystem: Web search, file operations, SQL databases, email, code execution, PDF processing
|
|
286
|
+
• Agent Memory: Short-term and long-term memory for learning from past executions
|
|
287
|
+
• Human-in-the-Loop: Interactive approval workflows and collaborative decision making
|
|
288
|
+
• Advanced Task Management: Dependencies, retries, async execution, and context sharing
|
|
289
|
+
• Hierarchical Teams: Manager agents that coordinate and delegate to specialist agents
|
|
290
|
+
• Production Ready: Security controls, error handling, comprehensive logging, and monitoring
|
|
291
|
+
• Ruby-First Design: Built specifically for Ruby developers with idiomatic patterns
|
|
292
|
+
• CLI Tools: Command-line interface for creating and managing AI crews
|
|
281
293
|
email:
|
|
282
294
|
- gkosmo1@hotmail.com
|
|
283
295
|
executables:
|
|
@@ -285,6 +297,8 @@ executables:
|
|
|
285
297
|
extensions: []
|
|
286
298
|
extra_rdoc_files: []
|
|
287
299
|
files:
|
|
300
|
+
- ".rubocop.yml"
|
|
301
|
+
- ".rubocop_todo.yml"
|
|
288
302
|
- CHANGELOG.md
|
|
289
303
|
- LICENSE
|
|
290
304
|
- README.md
|
|
@@ -324,22 +338,31 @@ files:
|
|
|
324
338
|
- docs/examples/tool-composition.md
|
|
325
339
|
- docs/examples/web-scraping.md
|
|
326
340
|
- docs/index.md
|
|
341
|
+
- docs/mcp.md
|
|
342
|
+
- docs/superpowers/plans/2026-05-11-llm-modernization.md
|
|
343
|
+
- docs/superpowers/specs/2026-05-11-llm-modernization-design.md
|
|
327
344
|
- docs/tutorials/advanced-agents.md
|
|
328
345
|
- docs/tutorials/custom-tools.md
|
|
329
346
|
- docs/tutorials/deployment.md
|
|
330
347
|
- docs/tutorials/getting-started.md
|
|
331
348
|
- docs/tutorials/index.md
|
|
332
349
|
- docs/tutorials/multiple-crews.md
|
|
350
|
+
- docs/upgrading-to-0.3.md
|
|
333
351
|
- examples/async_execution_example.rb
|
|
334
352
|
- examples/hierarchical_crew_example.rb
|
|
335
353
|
- examples/human_in_the_loop_example.rb
|
|
354
|
+
- examples/mcp_example.rb
|
|
355
|
+
- examples/native_tools_example.rb
|
|
356
|
+
- examples/streaming_example.rb
|
|
336
357
|
- lib/rcrewai.rb
|
|
337
358
|
- lib/rcrewai/agent.rb
|
|
338
359
|
- lib/rcrewai/async_executor.rb
|
|
339
360
|
- lib/rcrewai/cli.rb
|
|
340
361
|
- lib/rcrewai/configuration.rb
|
|
341
362
|
- lib/rcrewai/crew.rb
|
|
363
|
+
- lib/rcrewai/events.rb
|
|
342
364
|
- lib/rcrewai/human_input.rb
|
|
365
|
+
- lib/rcrewai/legacy_react_runner.rb
|
|
343
366
|
- lib/rcrewai/llm_client.rb
|
|
344
367
|
- lib/rcrewai/llm_clients/anthropic.rb
|
|
345
368
|
- lib/rcrewai/llm_clients/azure.rb
|
|
@@ -347,9 +370,19 @@ files:
|
|
|
347
370
|
- lib/rcrewai/llm_clients/google.rb
|
|
348
371
|
- lib/rcrewai/llm_clients/ollama.rb
|
|
349
372
|
- lib/rcrewai/llm_clients/openai.rb
|
|
373
|
+
- lib/rcrewai/mcp.rb
|
|
374
|
+
- lib/rcrewai/mcp/client.rb
|
|
375
|
+
- lib/rcrewai/mcp/tool_adapter.rb
|
|
376
|
+
- lib/rcrewai/mcp/transport/http.rb
|
|
377
|
+
- lib/rcrewai/mcp/transport/stdio.rb
|
|
350
378
|
- lib/rcrewai/memory.rb
|
|
379
|
+
- lib/rcrewai/pricing.rb
|
|
351
380
|
- lib/rcrewai/process.rb
|
|
381
|
+
- lib/rcrewai/provider_schema.rb
|
|
382
|
+
- lib/rcrewai/sse_parser.rb
|
|
352
383
|
- lib/rcrewai/task.rb
|
|
384
|
+
- lib/rcrewai/tool_runner.rb
|
|
385
|
+
- lib/rcrewai/tool_schema.rb
|
|
353
386
|
- lib/rcrewai/tools/base.rb
|
|
354
387
|
- lib/rcrewai/tools/code_executor.rb
|
|
355
388
|
- lib/rcrewai/tools/email_sender.rb
|
|
@@ -367,7 +400,10 @@ metadata:
|
|
|
367
400
|
homepage_uri: https://github.com/gkosmo/rcrewAI
|
|
368
401
|
source_code_uri: https://github.com/gkosmo/rcrewAI
|
|
369
402
|
changelog_uri: https://github.com/gkosmo/rcrewAI/blob/main/CHANGELOG.md
|
|
370
|
-
|
|
403
|
+
documentation_uri: https://gkosmo.github.io/rcrewAI/
|
|
404
|
+
bug_tracker_uri: https://github.com/gkosmo/rcrewAI/issues
|
|
405
|
+
wiki_uri: https://github.com/gkosmo/rcrewAI/wiki
|
|
406
|
+
rubygems_mfa_required: 'true'
|
|
371
407
|
rdoc_options: []
|
|
372
408
|
require_paths:
|
|
373
409
|
- lib
|
|
@@ -382,8 +418,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
382
418
|
- !ruby/object:Gem::Version
|
|
383
419
|
version: '0'
|
|
384
420
|
requirements: []
|
|
385
|
-
rubygems_version: 3.
|
|
386
|
-
signing_key:
|
|
421
|
+
rubygems_version: 3.6.9
|
|
387
422
|
specification_version: 4
|
|
388
|
-
summary: Ruby implementation
|
|
423
|
+
summary: Build intelligent AI agent crews in Ruby - CrewAI implementation with multi-LLM
|
|
424
|
+
support
|
|
389
425
|
test_files: []
|