<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Muhammad Ibtisam</title>
    <description>The latest articles on DEV Community by Muhammad Ibtisam (@muhammadibtisam_dev).</description>
    <link>https://dev.to/muhammadibtisam_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3887452%2F3db06eec-cf1d-42d7-a376-8a3b1e855324.jpeg</url>
      <title>DEV Community: Muhammad Ibtisam</title>
      <link>https://dev.to/muhammadibtisam_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammadibtisam_dev"/>
    <language>en</language>
    <item>
      <title>Using CrewAI with Ruby Without the Boilerplate</title>
      <dc:creator>Muhammad Ibtisam</dc:creator>
      <pubDate>Sun, 19 Apr 2026 14:49:37 +0000</pubDate>
      <link>https://dev.to/muhammadibtisam_dev/using-crewai-with-ruby-without-the-boilerplate-48a7</link>
      <guid>https://dev.to/muhammadibtisam_dev/using-crewai-with-ruby-without-the-boilerplate-48a7</guid>
      <description>&lt;p&gt;The Ruby ecosystem has always been great for building clean, maintainable, production-ready systems.&lt;/p&gt;

&lt;p&gt;At the same time, tools like CrewAI are opening up a new world — multi-agent workflows that can research, generate, and collaborate on their own.&lt;/p&gt;

&lt;p&gt;Naturally, I wanted to try CrewAI from Ruby.&lt;/p&gt;

&lt;p&gt;But honestly… the experience wasn’t what I expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ The Gap
&lt;/h2&gt;

&lt;p&gt;Using CrewAI in Ruby usually meant going a bit too low-level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing raw HTTP requests&lt;/li&gt;
&lt;li&gt;Manually handling authentication&lt;/li&gt;
&lt;li&gt;Building your own polling for async runs&lt;/li&gt;
&lt;li&gt;Dealing with inconsistent error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sure, it worked.&lt;/p&gt;

&lt;p&gt;But it didn’t &lt;em&gt;feel&lt;/em&gt; like Ruby.&lt;/p&gt;

&lt;p&gt;And if you’ve worked with Ruby for a while, you know that feeling matters.&lt;/p&gt;

&lt;p&gt;We care about clean APIs, readability, and developer happiness.&lt;br&gt;
Integrations should match that vibe.&lt;/p&gt;


&lt;h2&gt;
  
  
  💡 The Idea
&lt;/h2&gt;

&lt;p&gt;I started thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;What if interacting with CrewAI felt just like calling a simple Ruby service object?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removes boilerplate&lt;/li&gt;
&lt;li&gt;Feels predictable&lt;/li&gt;
&lt;li&gt;Fits naturally into any Rails or Ruby app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of scattering HTTP calls everywhere, I built a small client to wrap it all cleanly.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Introducing: ruby-crewai
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ruby-crewai&lt;/strong&gt; is a lightweight Ruby client for the CrewAI AMP API.&lt;/p&gt;

&lt;p&gt;The goal is simple: make working with AI crews feel &lt;em&gt;native&lt;/em&gt; to Ruby.&lt;/p&gt;


&lt;h2&gt;
  
  
  ✨ Example
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;CrewAI&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;access_token: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"CREWAI_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="ss"&gt;uri_base:     &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"CREWAI_URI_BASE"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kickoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;inputs: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;topic: &lt;/span&gt;&lt;span class="s2"&gt;"AI in healthcare"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;audience: &lt;/span&gt;&lt;span class="s2"&gt;"CTOs"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And… that’s pretty much it.&lt;/p&gt;

&lt;p&gt;No manual requests.&lt;br&gt;
No custom polling logic.&lt;br&gt;
No unnecessary complexity.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ What You Can Do
&lt;/h2&gt;

&lt;p&gt;With ruby-crewai, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kick off AI crews&lt;/li&gt;
&lt;li&gt;Check execution status&lt;/li&gt;
&lt;li&gt;Resume runs with human feedback&lt;/li&gt;
&lt;li&gt;Handle errors in a clean, structured way&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All through a simple, Ruby-friendly interface.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Using modern AI tools shouldn’t mean stepping outside your ecosystem.&lt;/p&gt;

&lt;p&gt;By making CrewAI feel natural in Ruby, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster prototyping&lt;/li&gt;
&lt;li&gt;Cleaner integrations&lt;/li&gt;
&lt;li&gt;Less “glue code”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which basically means:&lt;/p&gt;

&lt;p&gt;👉 More time building actual features, not wiring things together&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Getting Started
&lt;/h2&gt;

&lt;p&gt;Install the gem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gem &lt;span class="nb"&gt;install &lt;/span&gt;ruby-crewai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the project:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/MuhammadIbtisam/ruby-crewai" rel="noopener noreferrer"&gt;https://github.com/MuhammadIbtisam/ruby-crewai&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔮 What’s Next?
&lt;/h2&gt;

&lt;p&gt;This is just a small step toward better AI tooling in Ruby.&lt;/p&gt;

&lt;p&gt;There’s still a lot to explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-agent workflows&lt;/li&gt;
&lt;li&gt;Human-in-the-loop systems&lt;/li&gt;
&lt;li&gt;AI-powered backend services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re experimenting with CrewAI or building AI features in Ruby, I’d genuinely love to hear how you’re approaching it.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❤️ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Ruby has always been about developer experience.&lt;/p&gt;

&lt;p&gt;AI integrations should feel the same — simple, expressive, and actually enjoyable to use.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ruby</category>
      <category>crewai</category>
      <category>gap</category>
    </item>
  </channel>
</rss>
