<?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: Fyrnity</title>
    <description>The latest articles on DEV Community by Fyrnity (@fyrnitydev).</description>
    <link>https://dev.to/fyrnitydev</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%2Forganization%2Fprofile_image%2F13179%2Fbfa64042-79fc-4e61-af21-1f5447c3e279.png</url>
      <title>DEV Community: Fyrnity</title>
      <link>https://dev.to/fyrnitydev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fyrnitydev"/>
    <language>en</language>
    <item>
      <title>Ghost Signature: Cryptographic Receipts for AI Output (Ed25519 + JWKS)</title>
      <dc:creator>Anton Fredriksson</dc:creator>
      <pubDate>Tue, 12 May 2026 08:05:12 +0000</pubDate>
      <link>https://dev.to/fyrnitydev/ghost-signature-cryptographic-receipts-for-ai-output-ed25519-jwks-mh</link>
      <guid>https://dev.to/fyrnitydev/ghost-signature-cryptographic-receipts-for-ai-output-ed25519-jwks-mh</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I built a tiny API that lets your AI agent &lt;strong&gt;cryptographically sign every output&lt;/strong&gt; with Ed25519, so anyone can verify &lt;em&gt;"yes, this came from agent X at time Y, unmodified"&lt;/em&gt; — without trusting you, me, or any platform. Public verify endpoint, free 20 signs/month, no SDK. &lt;strong&gt;&lt;a href="https://rapidapi.com/fredrikssonanton01/api/ghostsignature" rel="noopener noreferrer"&gt;Try it on RapidAPI&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The "did AI write this?" arms race is the wrong question
&lt;/h2&gt;

&lt;p&gt;Every week another startup launches an "AI detector". Every week another paper shows they're 60% accurate at best, and they flag human writing as AI all the time.&lt;/p&gt;

&lt;p&gt;The whole approach is backwards. You can't reliably reverse-engineer authorship from text alone — the signal just isn't there once the words are on the page.&lt;/p&gt;

&lt;p&gt;But you &lt;strong&gt;can&lt;/strong&gt; solve the inverse: let the author prove authorship at the moment of generation. That's what cryptographic signatures have done for code (sigstore), for emails (DKIM), for software updates (Ed25519 everywhere) for years.&lt;/p&gt;

&lt;p&gt;So I built it for AI output.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ghost Signature
&lt;/h2&gt;

&lt;p&gt;Three endpoints. That's the whole API.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /sign&lt;/code&gt; → sign a piece of content (private, your key)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /verify&lt;/code&gt; → verify a signature (public, anyone)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /jwks&lt;/code&gt; → published public keys (rotation-aware)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your agent signs at generation time. Anyone — recipient, journalist, fact-checker, downstream model — hits &lt;code&gt;/verify&lt;/code&gt; and gets a yes/no with the signing agent's ID and timestamp. &lt;strong&gt;No login required to verify.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Signing in 2 lines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;sig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://ghostsignature.p.rapidapi.com/sign&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&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;X-RapidAPI-Key&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;YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&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;agent_id&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;research-bot-1&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="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# attach sig["signature"] + sig["kid"] to your output
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&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;"agent_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"research-bot-1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rb1-2026-05"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MEUCIQDx..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signed_at"&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-05-12T08:14:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"alg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ed25519"&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;Attach the three fields to your message — in metadata, a footer, an HTTP header, wherever.&lt;/p&gt;




&lt;h2&gt;
  
  
  Verifying from anywhere (no auth)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://ghostsignature.p.rapidapi.com/verify?&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
agent_id=research-bot-1&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
kid=rb1-2026-05&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
signature=MEUCIQDx...&amp;amp;&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
content=..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&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;"valid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agent_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"research-bot-1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signed_at"&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-05-12T08:14:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"revoked"&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;If anyone changed a single character → &lt;code&gt;valid: false&lt;/code&gt;. If you rotated keys and revoked the old one → &lt;code&gt;revoked: true&lt;/code&gt; with the original signing time still intact (soft revocation — old signatures stay verifiable as historical, just flagged).&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Ed25519 + JWKS + soft revocation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ed25519&lt;/strong&gt; — fast, small signatures (64 bytes), no parameter footguns like ECDSA. Same scheme SSH and Signal use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWKS with &lt;code&gt;kid&lt;/code&gt;&lt;/strong&gt; — your agent can rotate keys monthly without breaking old signatures. Each signature carries the &lt;code&gt;kid&lt;/code&gt; that signed it; verifier looks up the right public key automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Soft revocation&lt;/strong&gt; — when a key is compromised, you mark it revoked but old signatures still verify as historical. You don't lose the audit trail; you just flag everything signed after the suspected breach.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What it's actually good for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-generated journalism / reports&lt;/strong&gt; — readers can verify "this paragraph came from our verified research agent, not edited"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent-to-agent trust&lt;/strong&gt; — downstream agent verifies upstream agent's output before acting on it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs&lt;/strong&gt; — sign every decision your agent makes, keep an immutable provenance trail&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disclosure compliance&lt;/strong&gt; — EU AI Act + similar regs are heading toward "label AI output". A signature is the strongest possible label.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; stop someone from copy-pasting your text and removing the signature. That's the point — absence of signature means "unverified", presence means "provably from this agent". Same trust model as PGP-signed emails.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt; — 20 signs/month (verify is always free + public)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PRO&lt;/strong&gt; — $29/month, 50,000 signs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ULTRA&lt;/strong&gt; — $99/month, 250,000 signs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All hard-limited. No surprise bills.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://rapidapi.com/fredrikssonanton01/api/ghostsignature" rel="noopener noreferrer"&gt;Try Ghost Signature on RapidAPI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built solo as part of a 5-API micro-SaaS family (&lt;a href="https://fyrnity.com/tools" rel="noopener noreferrer"&gt;fyrnity.com/tools&lt;/a&gt;). Feedback welcome — especially from people running agents in production who've thought about provenance.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>security</category>
      <category>cryptography</category>
    </item>
    <item>
      <title>ResonanceEngine — Score how well two texts resonate (semantic, intent, emotion, brand)</title>
      <dc:creator>Anton Fredriksson</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:53:12 +0000</pubDate>
      <link>https://dev.to/fyrnitydev/resonanceengine-score-how-well-two-texts-resonate-semantic-intent-emotion-brand-a2p</link>
      <guid>https://dev.to/fyrnitydev/resonanceengine-score-how-well-two-texts-resonate-semantic-intent-emotion-brand-a2p</guid>
      <description>&lt;p&gt;&lt;strong&gt;Stop shipping AI features blind.&lt;/strong&gt; ResonanceEngine tells you exactly how well two texts resonate — whether that's a model output vs. expected answer, a chatbot reply vs. brand voice, or a generated email vs. the user's intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why developers use it
&lt;/h2&gt;

&lt;p&gt;LLMs are non-deterministic. You need a fast, calibrated way to measure &lt;em&gt;"did the output actually match what we wanted?"&lt;/em&gt; — without hand-grading every response.&lt;/p&gt;

&lt;p&gt;ResonanceEngine gives you a &lt;strong&gt;0–100 score&lt;/strong&gt; plus aligned/misaligned signals, in four modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Semantic&lt;/strong&gt; — do the texts mean the same thing?&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Intent&lt;/strong&gt; — does the response fulfill the user's actual goal?&lt;/li&gt;
&lt;li&gt;❤️ &lt;strong&gt;Emotional&lt;/strong&gt; — does the tone match (warm, urgent, calm)?&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Brand&lt;/strong&gt; — does it sound like &lt;em&gt;your&lt;/em&gt; brand voice?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;QA on AI responses&lt;/strong&gt; — flag low-scoring outputs before they ship&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt evaluation&lt;/strong&gt; — A/B test prompts with objective scoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content guardrails&lt;/strong&gt; — block off-brand or off-intent generations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chatbot evals&lt;/strong&gt; — measure response quality at scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAG validation&lt;/strong&gt; — does the answer actually match the retrieved context?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s1"&gt;'https://resonance-engine.p.rapidapi.com/resonance-engine-evaluate'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'x-rapidapi-key: YOUR_KEY'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'x-rapidapi-host: resonance-engine.p.rapidapi.com'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "source": "I need help fast, my server is down",
    "target": "Sure! Here is a 12-step guide to server architecture",
    "mode": "intent"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response: Low intent score — the reply doesn't match the urgency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Batch mode
&lt;/h2&gt;

&lt;p&gt;Need to score 20 pairs at once? Use &lt;code&gt;/resonance-engine-batch&lt;/code&gt; — same auth, takes an array of pairs and returns per-pair scores plus an average.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic&lt;/strong&gt; — $9/month, 5,000 evaluations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt; — $29/month, 50,000 evaluations ⭐ recommended&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ultra&lt;/strong&gt; — $99/month, 500,000 evaluations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://rapidapi.com/fredrikssonanton01/api/resonanceengine" rel="noopener noreferrer"&gt;Get ResonanceEngine on RapidAPI →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>machinelearning</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Stop Runaway AI Agents in 60 Seconds with a Single API Call</title>
      <dc:creator>Anton Fredriksson</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:27:57 +0000</pubDate>
      <link>https://dev.to/fyrnitydev/stop-runaway-ai-agents-in-60-seconds-with-a-single-api-call-1hlc</link>
      <guid>https://dev.to/fyrnitydev/stop-runaway-ai-agents-in-60-seconds-with-a-single-api-call-1hlc</guid>
      <description>&lt;p&gt;Your LLM agent is stuck in a token loop. It's burning $50/hour. You're asleep. What happens next?&lt;/p&gt;

&lt;p&gt;Without a killswitch — disaster. With &lt;strong&gt;AgentSafety&lt;/strong&gt;, one HTTP call stops it in under 60 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;LLM agents go off the rails. A lot.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔄 &lt;strong&gt;Token loops&lt;/strong&gt; — agent retries the same failing action 10 000 times&lt;/li&gt;
&lt;li&gt;💸 &lt;strong&gt;Budget drain&lt;/strong&gt; — $5 of API credits gone before lunch&lt;/li&gt;
&lt;li&gt;🌙 &lt;strong&gt;Midnight runs&lt;/strong&gt; — agent decides 3 AM is a great time to scrape the entire web&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Infinite retries&lt;/strong&gt; — one broken endpoint = thousands of wasted calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most teams discover this &lt;strong&gt;after&lt;/strong&gt; the bill arrives.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AgentSafety Does
&lt;/h2&gt;

&lt;p&gt;A simple HTTP-based control plane for any AI agent — no SDK, no rewrite required.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🛑 &lt;strong&gt;KILLSWITCH&lt;/strong&gt; — stop a runaway agent in under 60 seconds&lt;/li&gt;
&lt;li&gt;😴 &lt;strong&gt;SLEEP SCHEDULE&lt;/strong&gt; — define rest hours per agent (timezone-aware)&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;STATUS CHECK&lt;/strong&gt; — lightweight heartbeat your agent polls before each action&lt;/li&gt;
&lt;li&gt;♻️ &lt;strong&gt;REVIVE&lt;/strong&gt; — bring a stopped agent back online when you're ready&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All endpoints are RFC 7807 compliant (Problem Details JSON) — clean errors, no surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Your agent calls &lt;strong&gt;one endpoint&lt;/strong&gt; before each action cycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If status returns &lt;code&gt;should_run: true&lt;/code&gt; → continue&lt;/li&gt;
&lt;li&gt;If status returns &lt;code&gt;should_run: false&lt;/code&gt; → pause until next check&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. Three lines of integration code. Total peace of mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔧 &lt;strong&gt;Production agents&lt;/strong&gt; — kill switch when something goes wrong at 2 AM&lt;/li&gt;
&lt;li&gt;💰 &lt;strong&gt;Cost control&lt;/strong&gt; — auto-pause expensive agents during off-hours&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Timezone-aware ops&lt;/strong&gt; — agent sleeps 22:00–06:00 in user's local time&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Testing&lt;/strong&gt; — pause all agents instantly during deploys&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Compliance&lt;/strong&gt; — provable audit trail of when agents ran or stopped&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Autonomous agents are exploding in production. Frameworks like LangChain, AutoGPT, CrewAI and custom GPT runtimes all share one weakness: &lt;strong&gt;no remote off-switch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AgentSafety fills that gap with a vendor-neutral, framework-agnostic API. Works with any agent that can make an HTTP call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic&lt;/strong&gt; — $9/month, 1 000 requests, 100 agents max&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt; — $19/month, 5 000 requests, unlimited agents ⭐ recommended&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mega&lt;/strong&gt; — $49/month, 25 000 requests, unlimited agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Five endpoints. RFC 7807 errors. Stop runaway agents before they stop your budget.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Try AgentSafety on RapidAPI:&lt;/strong&gt; &lt;a href="https://rapidapi.com/fredrikssonanton01/api/agentsafety" rel="noopener noreferrer"&gt;https://rapidapi.com/fredrikssonanton01/api/agentsafety&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building autonomous agents? What's your worst runaway story? Drop a comment below 👇&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Convert Markdown to PDF via API in 30 Seconds</title>
      <dc:creator>Anton Fredriksson</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:18:28 +0000</pubDate>
      <link>https://dev.to/fyrnitydev/convert-markdown-to-pdf-via-api-in-30-seconds-4pak</link>
      <guid>https://dev.to/fyrnitydev/convert-markdown-to-pdf-via-api-in-30-seconds-4pak</guid>
      <description>&lt;p&gt;Tired of writing complex HTML or wrestling with PDF libraries? &lt;strong&gt;MarkdownPDF&lt;/strong&gt; turns plain Markdown into beautifully styled PDFs in a single API call.&lt;/p&gt;

&lt;p&gt;Perfect for invoices, reports, documentation, receipts, and newsletters — no design skills required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What MarkdownPDF Does
&lt;/h2&gt;

&lt;p&gt;Send Markdown → get a professional PDF back. That's it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Zero setup&lt;/strong&gt; — no libraries, no headless browsers&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;6 built-in themes&lt;/strong&gt; — pick one and you're done&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Fast&lt;/strong&gt; — PDFs generated in under 2 seconds&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Stateless&lt;/strong&gt; — your content is never stored&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Markdown Instead of HTML?
&lt;/h2&gt;

&lt;p&gt;Writing HTML for PDFs is painful. CSS for print is worse. Markdown is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Readable&lt;/strong&gt; — your team can edit it without training&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version-control friendly&lt;/strong&gt; — clean diffs in Git&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portable&lt;/strong&gt; — works everywhere, breaks nowhere&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Example
&lt;/h2&gt;

&lt;p&gt;A single POST request to &lt;code&gt;https://markdownpdf.p.rapidapi.com/markdownpdf&lt;/code&gt; with your markdown, a theme (&lt;code&gt;professional&lt;/code&gt;, &lt;code&gt;modern&lt;/code&gt;, &lt;code&gt;classic&lt;/code&gt;, &lt;code&gt;minimal&lt;/code&gt;, &lt;code&gt;elegant&lt;/code&gt;, or &lt;code&gt;technical&lt;/code&gt;), and page size (&lt;code&gt;A4&lt;/code&gt; or &lt;code&gt;Letter&lt;/code&gt;) returns a ready-to-download PDF.&lt;/p&gt;

&lt;p&gt;Full code example with &lt;code&gt;fetch&lt;/code&gt;, &lt;code&gt;axios&lt;/code&gt;, Python and cURL is available in the &lt;strong&gt;Code Snippets&lt;/strong&gt; tab on the RapidAPI page — copy-paste ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📄 &lt;strong&gt;Invoices &amp;amp; receipts&lt;/strong&gt; — auto-generate from order data&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Reports&lt;/strong&gt; — turn analytics into shareable PDFs&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Documentation&lt;/strong&gt; — convert docs to downloadable guides&lt;/li&gt;
&lt;li&gt;📧 &lt;strong&gt;Newsletters&lt;/strong&gt; — archive emails as PDF attachments&lt;/li&gt;
&lt;li&gt;🎓 &lt;strong&gt;Certificates&lt;/strong&gt; — generate course completions on demand&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6 Themes to Choose From
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Professional&lt;/strong&gt; — clean, corporate look&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern&lt;/strong&gt; — minimal with bold headers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classic&lt;/strong&gt; — timeless serif typography&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal&lt;/strong&gt; — pure focus on content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elegant&lt;/strong&gt; — refined, premium feel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical&lt;/strong&gt; — perfect for docs and code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic&lt;/strong&gt; — $5/month, 1 000 PDFs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt; — $19/month, 10 000 PDFs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Markdown in. PDF out. No drama.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Try MarkdownPDF on RapidAPI:&lt;/strong&gt; &lt;a href="https://rapidapi.com/fredrikssonanton01/api/markdownpdf" rel="noopener noreferrer"&gt;https://rapidapi.com/fredrikssonanton01/api/markdownpdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have feedback or feature requests? Drop a comment below 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Humanize AI Text with One API Call</title>
      <dc:creator>Anton Fredriksson</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:12:59 +0000</pubDate>
      <link>https://dev.to/fyrnitydev/how-to-humanize-ai-text-with-one-api-call-409m</link>
      <guid>https://dev.to/fyrnitydev/how-to-humanize-ai-text-with-one-api-call-409m</guid>
      <description>&lt;p&gt;AI-generated text is everywhere — but it often sounds like AI. Repetitive patterns, robotic phrasing, and that uncanny "ChatGPT voice" that readers (and AI detectors) spot instantly.&lt;/p&gt;

&lt;p&gt;I built ChromaWrite to solve this. It's a text processing API on RapidAPI that transforms AI-generated text into natural, human-sounding writing — with a single API call.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ChromaWrite Does
&lt;/h2&gt;

&lt;p&gt;Five actions, one endpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rewrite&lt;/strong&gt; — Improve clarity and flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grammar&lt;/strong&gt; — Fix every error instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tone&lt;/strong&gt; — Shift between formal, casual, professional, friendly, or academic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humanize&lt;/strong&gt; — Convert AI text into natural human writing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summarize&lt;/strong&gt; — Condense long texts into short, medium, or long summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Not Just Prompt Engineer?
&lt;/h2&gt;

&lt;p&gt;You could ask ChatGPT to "sound more human" — but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent results&lt;/strong&gt; — Every prompt gives different quality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No API&lt;/strong&gt; — You can't automate prompt engineering in a pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token waste&lt;/strong&gt; — Burning tokens on meta-instructions instead of content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No specialization&lt;/strong&gt; — ChromaWrite's humanize model is tuned for this task&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Example
&lt;/h2&gt;

&lt;p&gt;​&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://chromawrite.p.rapidapi.com/chromawrite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chromawrite.p.rapidapi.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Your AI-generated text here&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;humanize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// "Using better methods helps you get the best results."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content publishers&lt;/strong&gt; — Run AI drafts through ChromaWrite before publishing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO teams&lt;/strong&gt; — Bulk-process AI content without the robotic tone&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email marketing&lt;/strong&gt; — Humanize AI-written campaigns so they feel personal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chatbots&lt;/strong&gt; — Post-process bot responses to sound more natural&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic ($9/mo)&lt;/strong&gt; — 5,000 requests. Includes rewrite, grammar, and tone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro ($19/mo)&lt;/strong&gt; — 25,000 requests. All 5 actions including humanize and summarize.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No free tier. Professional tool, professional pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;ChromaWrite on RapidAPI: &lt;a href="https://rapidapi.com/fredrikssonanton01/api/chromawrite" rel="noopener noreferrer"&gt;https://rapidapi.com/fredrikssonanton01/api/chromawrite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation &amp;amp; Examples: &lt;a href="https://fyrnity.com/tools" rel="noopener noreferrer"&gt;https://fyrnity.com/tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by Fyrnity — developer tools that just work.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
  </channel>
</rss>
