<?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>Forem: Ali Ghaedrahmat</title>
    <description>The latest articles on Forem by Ali Ghaedrahmat (@ali_ghaedrahmat_8c538bdeb).</description>
    <link>https://forem.com/ali_ghaedrahmat_8c538bdeb</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%2F3412484%2Fe02e3e22-4939-4ee1-b9fb-d27718dd4cd7.png</url>
      <title>Forem: Ali Ghaedrahmat</title>
      <link>https://forem.com/ali_ghaedrahmat_8c538bdeb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ali_ghaedrahmat_8c538bdeb"/>
    <language>en</language>
    <item>
      <title>I built Clarion, an opensource AI Agent &amp; Context Engineering software</title>
      <dc:creator>Ali Ghaedrahmat</dc:creator>
      <pubDate>Thu, 09 Oct 2025 08:46:17 +0000</pubDate>
      <link>https://forem.com/ali_ghaedrahmat_8c538bdeb/i-built-clarion-an-opensource-ai-agent-context-engineering-software-1jai</link>
      <guid>https://forem.com/ali_ghaedrahmat_8c538bdeb/i-built-clarion-an-opensource-ai-agent-context-engineering-software-1jai</guid>
      <description>&lt;p&gt;Hey dev community!&lt;/p&gt;

&lt;p&gt;Like many of you, I've been riding the AI wave, trying to integrate LLMs into my daily coding workflow. And while tools like GitHub Copilot and ChatGPT are incredibly powerful, I often felt like I was fighting them. I was spending more time crafting the perfect prompt and copy-pasting context than actually coding.&lt;/p&gt;

&lt;p&gt;I wanted AI to be a predictable, configurable, and code-aware tool that adapted to &lt;em&gt;my&lt;/em&gt; workflow, not the other way around. That's why I built &lt;strong&gt;Clarion&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Clarion Philosophy: A Garage, Not a Race Car
&lt;/h3&gt;

&lt;p&gt;Many AI development tools are like buying a high-performance, pre-built race car. They're fast and ready to go for specific, common tasks. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clarion&lt;/strong&gt;, however, is like being given a professional garage with an engine, chassis, and a massive toolkit. It empowers you to build a race car, a dragster, or an off-road vehicle tailored perfectly to your exact specifications. &lt;/p&gt;

&lt;p&gt;It's an open-source, AI-powered co-development platform that lets you build, customize, and deploy specialized AI agents for any coding task. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F86df0625-ce8e-49a1-b960-04d33db03cec" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F86df0625-ce8e-49a1-b960-04d33db03cec" alt="Clarion Screenshot" width="560" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  From Frustration to Features
&lt;/h3&gt;

&lt;p&gt;I built Clarion to solve the key problems I faced when using general-purpose AI for development:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Problem: Unreliable, Unpredictable Outputs
&lt;/h4&gt;

&lt;p&gt;Ever ask an AI to generate a JSON object and get back a markdown-formatted paragraph instead? It's frustrating and breaks any attempt at automation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clarion's Solution: Predictable Structured Output&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clarion lets you define a strict JSON schema for your agent's response. Whether you use the visual builder or write the schema yourself, the agent is constrained to return a reliable, parseable output every single time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A summary of the file changes to be performed."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"file_changes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"array"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"enum"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"create"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"modify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"delete"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"new_content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;An example schema for file operations.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Problem: The Nightmare of Context Management
&lt;/h4&gt;

&lt;p&gt;Manually copy-pasting files into a prompt window is slow, error-prone, and hits context limits fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clarion's Solution: Granular Codebase Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clarion gives you precise control over the AI's context. Using powerful glob patterns, you can define exactly which files and directories are included or excluded. It even provides a real-time preview of the files that will be sent to the LLM, so you know exactly what the agent sees.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Example of include/exclude globs&lt;/span&gt;
&lt;span class="na"&gt;includeGlobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;src/**/*.tsx"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;server/routes/*.go"&lt;/span&gt;
&lt;span class="na"&gt;excludeGlobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.test.ts"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/node_modules/**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Problem: Generic AI is... Well, Generic
&lt;/h4&gt;

&lt;p&gt;One-size-fits-all system prompts lead to one-size-fits-all results. For specialized tasks like writing tests, refactoring code, or generating documentation, you need a specialist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clarion's Solution: Customizable AI Agents&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can create, manage, and customize an entire team of AI agents. Each agent has its own unique system prompt, context filters, output schema, and LLM configuration. You can build a "React Component Specialist," a "Go Test Writer," or a "Python Docstring Expert"—whatever your workflow demands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Under the Hood: The Tech Stack
&lt;/h3&gt;

&lt;p&gt;For those curious about the internals, Clarion is a local-first desktop application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Backend:&lt;/strong&gt; Written in &lt;strong&gt;Go&lt;/strong&gt;, chosen for its performance, concurrency, and robust standard library. It handles all the file system interactions, AI orchestration, and serves a REST API to the frontend.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Frontend:&lt;/strong&gt; Built with &lt;strong&gt;Tauri&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, and styled with &lt;strong&gt;Tailwind CSS&lt;/strong&gt;. Tauri allows us to create a lightweight, secure, and performant desktop app using web technologies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Get Started and Build Your Own AI Agents
&lt;/h3&gt;

&lt;p&gt;Clarion is open-source (Apache 2.0) and ready for you to try. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone the repo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ClarionDev/clarion.git
&lt;span class="nb"&gt;cd &lt;/span&gt;clarion
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install dependencies:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Go and Node.js first!&lt;/span&gt;
go mod tidy
&lt;span class="nb"&gt;cd &lt;/span&gt;clarion-frontend &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run the app(backend):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# In the project root&lt;/span&gt;
go run main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run the app(frontend):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# In another terminal, from clarion-frontend/&lt;/span&gt;
npm run tauri dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Let's Build a Better AI Workflow
&lt;/h3&gt;

&lt;p&gt;My goal with Clarion is to transform LLMs from powerful but unreliable text generators into predictable, configurable tools for developers. If that sounds like something you've been looking for, I'd love for you to check it out.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Star us on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ClarionDev/clarion" rel="noopener noreferrer"&gt;https://github.com/ClarionDev/clarion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Contributions, feedback, and ideas are always welcome. Let me know what you think!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>showdev</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
