<?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: Makoto Yui</title>
    <description>The latest articles on DEV Community by Makoto Yui (@myui).</description>
    <link>https://dev.to/myui</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%2F3697276%2Fee20b0bf-bb57-4c2d-87ef-b51daa2689d1.jpg</url>
      <title>DEV Community: Makoto Yui</title>
      <link>https://dev.to/myui</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/myui"/>
    <language>en</language>
    <item>
      <title>Introducing Graflow: An Orchestration Engine for AI Agent Workflows</title>
      <dc:creator>Makoto Yui</dc:creator>
      <pubDate>Thu, 16 Apr 2026 16:29:55 +0000</pubDate>
      <link>https://dev.to/myui/introducing-graflow-an-orchestration-engine-for-ai-agent-workflows-a5j</link>
      <guid>https://dev.to/myui/introducing-graflow-an-orchestration-engine-for-ai-agent-workflows-a5j</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This post was originally published on the &lt;a href="https://graflow.ai/blog/introducing-graflow" rel="noopener noreferrer"&gt;Graflow blog&lt;/a&gt;. It has been adapted for dev.to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Graflow is a Python-based orchestration engine for &lt;strong&gt;Agentic Workflows&lt;/strong&gt; — the sweet spot between deterministic pipelines and fully autonomous agents. Built with &lt;strong&gt;developer experience&lt;/strong&gt; as a first-class concern, Graflow lets you write production-grade AI workflows that are readable, flexible, and easy to operate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Agentic Workflow?
&lt;/h2&gt;

&lt;p&gt;The choice between AI workflows and autonomous agents isn't binary — it's a &lt;a href="https://www.decodingai.com/p/ai-workflows-vs-agents-the-autonomy" rel="noopener noreferrer"&gt;spectrum of autonomy&lt;/a&gt;, or what Andrej Karpathy calls an &lt;a href="https://andrewships.substack.com/p/autonomy-sliders" rel="noopener noreferrer"&gt;Autonomy Slider&lt;/a&gt;: a continuous dial calibrated by trust and risk.&lt;/p&gt;

&lt;p&gt;Andrew Ng's take is pragmatic: most enterprises should bet on &lt;strong&gt;controlled autonomy&lt;/strong&gt; — agentic workflows where humans set the structure — rather than chasing full autonomy. In his &lt;a href="https://learn.deeplearning.ai/courses/agentic-ai/information" rel="noopener noreferrer"&gt;Agentic AI course&lt;/a&gt;, he identifies four design patterns — &lt;strong&gt;Reflection, Tool Use, Planning, and Multi-Agent coordination&lt;/strong&gt; — that let LLMs handle complex tasks through iterative, multi-step workflows rather than single-shot prompting. His &lt;a href="https://www.insightpartners.com/ideas/andrew-ng-why-agentic-ai-is-the-smart-bet-for-most-enterprises/" rel="noopener noreferrer"&gt;advice&lt;/a&gt;: use the best model available, start building, and layer in agentic capabilities where they deliver real value.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Production Gap
&lt;/h3&gt;

&lt;p&gt;Autonomous agents like Claude Cowork and OpenClaw show how far the slider can go. But in enterprise environments — where compliance, approval flows, and audit trails are non-negotiable — cranking the slider to maximum autonomy rarely works. You need to &lt;strong&gt;control where the slider sits&lt;/strong&gt;, per task, per workflow, per use case.&lt;/p&gt;

&lt;p&gt;This is the gap: most existing tools force you to choose. Deterministic workflow engines (Airflow, Dagster) can't express agent reasoning loops. Fully autonomous agent frameworks give you the ReAct loop but lack orchestration primitives — checkpointing, HITL, distributed execution, error policies — that production demands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Graflow Fits
&lt;/h3&gt;

&lt;p&gt;Graflow sits in the middle of Karpathy's slider — the &lt;strong&gt;Agentic Workflow&lt;/strong&gt; zone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic workflows&lt;/strong&gt; (slider at minimum): Traditional ETL, RPA. Fully pre-defined, no AI decision-making.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic Workflows&lt;/strong&gt; (slider in the middle): Structured orchestration + localized agent autonomy. Humans design the overall flow; agents operate autonomously &lt;em&gt;within&lt;/em&gt; each task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully autonomous agents&lt;/strong&gt; (slider at maximum): The agent decides everything — tool selection, execution order, when to stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Graflow gives you &lt;strong&gt;controlled autonomy&lt;/strong&gt;: the overall flow is human-designed and auditable, while individual tasks can leverage the full power of LLM-based agents internally. You can &lt;strong&gt;dial the autonomy up or down per task&lt;/strong&gt; — some tasks are pure deterministic logic, others delegate to a SuperAgent with full ReAct capabilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  Developer Experience First
&lt;/h2&gt;

&lt;p&gt;Graflow is designed so that &lt;strong&gt;the code you write looks like the workflow you're thinking about&lt;/strong&gt;. Here are two features that embody this philosophy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fat Node Design — Use the Best Agent Framework for the Job
&lt;/h3&gt;

&lt;p&gt;Some frameworks express a SuperAgent's internal reasoning loop — tool selection, execution, re-evaluation — as nodes and edges in the workflow graph. Tool-calling logic leaks into the workflow definition, making graphs harder to read.&lt;/p&gt;

&lt;p&gt;Graflow treats &lt;strong&gt;SuperAgents as fat nodes&lt;/strong&gt;: the ReAct loop stays &lt;em&gt;inside&lt;/em&gt; the agent; the workflow graph only expresses task-level dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LlmAgent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;graflow.llm.agents.adk_agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AdkLLMAgent&lt;/span&gt;

&lt;span class="c1"&gt;# Create a SuperAgent with Google ADK
&lt;/span&gt;&lt;span class="n"&gt;adk_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;search_tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;calculator_tool&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;sub_agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;analyst_agent&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Wrap and register — one line
&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_llm_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;AdkLLMAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adk_agent&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Use in a task — the entire ReAct loop is handled by ADK
&lt;/span&gt;&lt;span class="nd"&gt;@task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inject_llm_agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;research&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because Graflow delegates the SuperAgent to specialized frameworks, you can use &lt;strong&gt;Google ADK, PydanticAI, OpenAI Agents SDK, Strands Agents&lt;/strong&gt; — or mix them in the same workflow. Swapping the agent framework doesn't touch your workflow code.&lt;/p&gt;

&lt;p&gt;For simpler LLM calls that don't need a ReAct loop, &lt;code&gt;inject_llm_client&lt;/code&gt; provides direct access via &lt;a href="https://docs.litellm.ai/" rel="noopener noreferrer"&gt;LiteLLM&lt;/a&gt; — switching between OpenAI, Claude, Gemini, Bedrock, or local models by changing one string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inject_llm_client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;LLMClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;completion_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# or "claude-sonnet-4-20250514", "gemini-2.5-flash", ...
&lt;/span&gt;    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pythonic DSL + State Machine — Write What You Mean
&lt;/h3&gt;

&lt;p&gt;Graflow's execution model combines a &lt;strong&gt;static DAG skeleton&lt;/strong&gt; with &lt;strong&gt;runtime dynamic transitions&lt;/strong&gt;, inspired by the shift from TensorFlow 1.x (define-and-run) to PyTorch (define-by-run).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The DAG part&lt;/strong&gt; — Pythonic operators make pipeline structure visible at a glance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# &amp;gt;&amp;gt; for sequential, | for parallel — diamond pattern in one line
&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;enrich&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The State Machine part&lt;/strong&gt; — tasks control flow dynamically using plain Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inject_context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TaskExecutionContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;run_processing&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next_iteration&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                    &lt;span class="c1"&gt;# self-loop
&lt;/span&gt;    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error_handler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;goto&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# jump
&lt;/span&gt;    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;finalize_task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="c1"&gt;# dynamic branch
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No compile step, no pre-defined conditional edges, no routing functions. Runtime decisions are just &lt;code&gt;if&lt;/code&gt; statements. This hybrid gives you &lt;strong&gt;static readability&lt;/strong&gt; and &lt;strong&gt;dynamic flexibility&lt;/strong&gt; in one model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Production Features
&lt;/h2&gt;

&lt;p&gt;Beyond the pillars above, Graflow provides a full set of production capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-Loop&lt;/strong&gt; — &lt;code&gt;request_feedback()&lt;/code&gt; with timeout-aware checkpointing and built-in Feedback API (REST + UI)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channel-based data sharing&lt;/strong&gt; — Key-value store (&lt;code&gt;set&lt;/code&gt;/&lt;code&gt;get&lt;/code&gt;) for inter-task communication with thread-safe primitives (&lt;code&gt;atomic_add&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, &lt;code&gt;lock&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-controlled checkpoints&lt;/strong&gt; — Save state explicitly via &lt;code&gt;context.checkpoint()&lt;/code&gt; — local filesystem or S3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel group error policies&lt;/strong&gt; — Per-group failure handling: Strict, Best-effort, At-least-N, Critical, or custom&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed execution&lt;/strong&gt; — Redis-based workers for horizontal scaling — switch from local with one line&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker task handlers&lt;/strong&gt; — Run tasks in containers for GPU access, dependency isolation, or sandboxed execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracing via Langfuse (OSS)&lt;/strong&gt; — OpenTelemetry-based observability — self-hostable and free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type-safe channels&lt;/strong&gt; — &lt;code&gt;TypedDict&lt;/code&gt;-backed channels with IDE autocomplete and compile-time checking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the full feature list, see the &lt;a href="https://graflow.ai/docs/getting-started/features" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;If you're interested, check out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://graflow.ai/docs/category/getting-started" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GraflowAI/graflow" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://graflow.ai/blog/hands-on-graflow-colab" rel="noopener noreferrer"&gt;Try it on Colab (free using local ollama+gemma4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://graflow.ai/blog/langgraph-vs-graflow-part1" rel="noopener noreferrer"&gt;Side-by-side comparison to LangGraph&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feedback and contributions are welcome!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
