<?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: Pedram madani</title>
    <description>The latest articles on DEV Community by Pedram madani (@pedram_madani).</description>
    <link>https://dev.to/pedram_madani</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4062432%2F44c87cdf-e797-4bf2-a02e-3297e718cf31.png</url>
      <title>DEV Community: Pedram madani</title>
      <link>https://dev.to/pedram_madani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pedram_madani"/>
    <language>en</language>
    <item>
      <title>The EU AI Act started applying to your chatbot two days ago</title>
      <dc:creator>Pedram madani</dc:creator>
      <pubDate>Tue, 04 Aug 2026 12:04:00 +0000</pubDate>
      <link>https://dev.to/pedram_madani/the-eu-ai-act-started-applying-to-your-chatbot-two-days-ago-339i</link>
      <guid>https://dev.to/pedram_madani/the-eu-ai-act-started-applying-to-your-chatbot-two-days-ago-339i</guid>
      <description>&lt;p&gt;Article 50 of the EU AI Act (Regulation (EU) 2024/1689, as amended by Regulation (EU) 2026/1744) started applying on &lt;strong&gt;2 August 2026&lt;/strong&gt;. Not "is coming". Applied. If you ship a chatbot, or generate text, images, audio or video for EU users, the transparency duties are live now.&lt;/p&gt;

&lt;p&gt;Two more dates worth putting in your calendar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2 December 2026&lt;/strong&gt;: synthetic-content systems placed on the market before 2 August 2026 must meet Article 50(2) marking (Article 111(4)). Four months.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2 December 2027&lt;/strong&gt;: Annex III high-risk obligations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The text is around 100 pages, and most of us either ignore it or eventually pay a lawyer. I wanted a third option that runs where I work.&lt;/p&gt;

&lt;h2&gt;
  
  
  In the editor
&lt;/h2&gt;

&lt;p&gt;Legalithm is an MCP server, so it works in Claude Code, Cursor and Codex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add legalithm-org/legalithm
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;legalithm@legalithm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask your agent "does the EU AI Act apply to this feature, and what tier?". It calls &lt;code&gt;classify&lt;/code&gt; and answers with the Article cited, rather than recalling the regulation from training data, which is exactly where these answers go wrong.&lt;/p&gt;

&lt;p&gt;Four tools: &lt;code&gt;classify&lt;/code&gt;, &lt;code&gt;explain_obligation&lt;/code&gt;, &lt;code&gt;generate_disclosure&lt;/code&gt; (Article 50 text, EN or DE), and &lt;code&gt;check_record&lt;/code&gt;. The first three run fully offline. The rule corpus is bundled with the server, so there is no API key and no source code, prompt or result leaves your machine.&lt;/p&gt;

&lt;p&gt;Real output for a CV screening feature, as the provider:&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;"risk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"citations"&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;"article"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6(2)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"annex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"III"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"asOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-03"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"appliesFrom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2027-12-02"&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;"matchedRules"&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;"high_risk_employment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high_risk_domain_selected"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidenceScore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reviewRequired"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&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;Note &lt;code&gt;matchedRules&lt;/code&gt;, &lt;code&gt;asOf&lt;/code&gt; and &lt;code&gt;confidenceScore&lt;/code&gt;. You can see which rule fired, how old the corpus is, and how sure the engine was. That is the difference between this and asking a model the same question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content marking, for the December deadline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; legalithm
legalithm mark ./out.png &lt;span class="nt"&gt;--watermark&lt;/span&gt;   &lt;span class="c"&gt;# C2PA + pixel watermark&lt;/span&gt;
legalithm verify ./out.signed.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No key. The hero image on the repo is AI-generated and marked with this exact command, so you can download it and verify both layers yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  In your repo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx legalithm init    &lt;span class="c"&gt;# detects the stack, writes a dated compliance record&lt;/span&gt;
npx legalithm check   &lt;span class="c"&gt;# re-verify in CI, non-zero exit on drift&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These two need a free API key, because unlike everything above they talk to the hosted record service. I would rather say that than let you find out.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;It is a rule engine that cites the Article it matched. A starting point, not legal advice, not a certification, and with no lawyer validation yet. The design choice I am proud of: when it is not confident it sets &lt;code&gt;reviewRequired&lt;/code&gt; and defers to a human instead of asserting. A compliance tool that is confidently wrong is worse than none.&lt;/p&gt;

&lt;p&gt;Free, open source, and it stays free through the high-risk deadline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/legalithm-org/legalithm" rel="noopener noreferrer"&gt;https://github.com/legalithm-org/legalithm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tell me where the classification is wrong. That is the most useful feedback I can get.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>claude</category>
      <category>openai</category>
    </item>
  </channel>
</rss>
