<?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: Alexey</title>
    <description>The latest articles on DEV Community by Alexey (@fanatchipsovchitos19).</description>
    <link>https://dev.to/fanatchipsovchitos19</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%2F4105009%2Fe8c20fd2-0050-48e4-b6b3-a67ebe789108.jpg</url>
      <title>DEV Community: Alexey</title>
      <link>https://dev.to/fanatchipsovchitos19</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fanatchipsovchitos19"/>
    <language>en</language>
    <item>
      <title>Here’s the trust layer I built to prevent AI's mistakes</title>
      <dc:creator>Alexey</dc:creator>
      <pubDate>Sun, 06 Sep 2026 14:51:40 +0000</pubDate>
      <link>https://dev.to/fanatchipsovchitos19/heres-the-trust-layer-i-built-to-prevent-ais-mistakes-4ga8</link>
      <guid>https://dev.to/fanatchipsovchitos19/heres-the-trust-layer-i-built-to-prevent-ais-mistakes-4ga8</guid>
      <description>&lt;p&gt;&lt;strong&gt;The moment I stopped trusting the agent&lt;/strong&gt;&lt;br&gt;
I built a trading agent. It worked in backtests. Clean profits. Low drawdown. Good Sharpe.&lt;/p&gt;

&lt;p&gt;I put it on a test wallet with $50k.&lt;/p&gt;

&lt;p&gt;On day 3, it executed a trade based on bad data. A single corrupted price feed made it think an asset was breaking out. It wasn’t.&lt;/p&gt;

&lt;p&gt;20% loss in 60 seconds.&lt;/p&gt;

&lt;p&gt;I watched it happen and couldn’t stop it.&lt;/p&gt;

&lt;p&gt;That’s when I realised: the problem wasn’t the agent. The problem was the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Agent receives data → Agent decides → Agent executes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No validation. No sanity checks. Just trust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The architecture: Lumen → Regula → Palisade&lt;/strong&gt;&lt;br&gt;
I built a trust layer that sits between the agent and the exchange.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`Agent → Lumen → Regula → Palisade → Exchange
         │        │          │
       Data    Decision    Hard limits`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;1. Lumen — on‑chain intelligence&lt;/strong&gt;&lt;br&gt;
Lumen validates the context before the agent even sees the data.&lt;/p&gt;

&lt;p&gt;What it checks:&lt;/p&gt;

&lt;p&gt;Module - What it validates&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whale Movements - Transfers &amp;gt;$1M to exchanges or between wallets&lt;/li&gt;
&lt;li&gt;Insider Wallets - Wallets linked to team, investors, early buyers&lt;/li&gt;
&lt;li&gt;Liquidity Changes - Pool changes (inflow/outflow)&lt;/li&gt;
&lt;li&gt;Vesting Unlocks - Upcoming token unlocks&lt;/li&gt;
&lt;li&gt;Scam DB - Address against scam, phishing, and sanction lists
Request:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /intel/0x742d...
{
  "address": "0x1234...5678"
}
&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;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x1234...5678"&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="s2"&gt;"Bearish signal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signals"&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="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;"whale"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3 whales depositing to Binance"&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="mf"&gt;0.82&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"severity"&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="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="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;"insider"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Team wallet started selling"&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="mf"&gt;0.91&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"severity"&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="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="nl"&gt;"recommendation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"exit_or_reduce"&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;u&gt;Key design choice:&lt;/u&gt; Lumen doesn't tell the agent what to do. It gives structured context so the agent can make an informed decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Regula — trade validation&lt;/strong&gt;&lt;br&gt;
When the agent proposes a trade, Regula evaluates it before execution.&lt;/p&gt;

&lt;p&gt;What it checks:&lt;/p&gt;

&lt;p&gt;Module - What it validates&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Market Regime - Trending, flat, chaotic (ADX + volatility)&lt;/li&gt;
&lt;li&gt;Position Sizer - Optimal position size based on volatility&lt;/li&gt;
&lt;li&gt;Drawdown (VaR) - Value at Risk on real prices&lt;/li&gt;
&lt;li&gt;Liquidation Risk - Cascade risk based on Open Interest&lt;/li&gt;
&lt;li&gt;Correlation - Correlation with the user’s portfolio
Request:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /risk/validate
{
  "symbol": "BTCUSDT",
  "side": "LONG",
  "amount": 5000,
  "leverage": 3
}

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Response (rejected):&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;"approved"&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="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="mf"&gt;0.78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"position_details"&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;"optimal_size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"entry_levels"&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;"optimal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;64361.16&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;"exit_levels"&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;"stop_loss_hard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;61143.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"take_profit_1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;67579.22&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;"risk_reward_ratio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.0&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;"market_context"&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;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"volatility_daily_pct"&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.2&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;"rejection_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VaR exceeds 2% of portfolio"&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;u&gt;Key design choice:&lt;/u&gt; Regula doesn't just reject. It suggests a safer alternative (optimal_size). The agent can ignore it — but then it takes full risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Palisade — hard limits and enforcement&lt;/strong&gt;&lt;br&gt;
Palisade sits between the agent and the exchange. Every outgoing order passes through it.&lt;/p&gt;

&lt;p&gt;What it enforces:&lt;/p&gt;

&lt;p&gt;Module - What it does&lt;br&gt;
Rules (limits) - Max order size, daily volume, orders per minute&lt;br&gt;
Anomaly detector - z‑score &amp;gt; 3, loops, unusual patterns&lt;br&gt;
Kill switch - One‑click halt of all orders&lt;br&gt;
Key revoke - One‑click full API key revocation&lt;br&gt;
Audit trail - Every action logged&lt;br&gt;
Flow:&lt;br&gt;
&lt;code&gt;Agent → Palisade → Exchange&lt;br&gt;
         │&lt;br&gt;
         ├─ rules check&lt;br&gt;
         ├─ anomaly detection&lt;br&gt;
         ├─ audit log&lt;br&gt;
         └─ if violation → 403 Forbidden&lt;/code&gt;&lt;br&gt;
Example response (blocked):&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;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"REJECTED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Order size exceeds max limit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"attempted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&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-09-06T14:32:11Z"&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;u&gt;Key design choice:&lt;/u&gt; Palisade is a wall, not a counsellor. It doesn't suggest — it blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real‑world example&lt;/strong&gt;&lt;br&gt;
Here’s a real log from a live run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[Agent #17] Trade #384&lt;br&gt;
  Lumen: anomaly detected (whale movement)&lt;br&gt;
  Regula: rejected (VaR exceeded limit)&lt;br&gt;
  Palisade: blocked&lt;br&gt;
  Status: SAFE&lt;/code&gt;&lt;br&gt;
The agent wanted to buy $50,000 worth of BTC. Lumen detected three whale wallets depositing to Binance. Regula calculated VaR and rejected it. Palisade enforced the block.&lt;/p&gt;

&lt;p&gt;10 seconds later, BTC dropped 3%. The loss was prevented.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;No human intervention.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Key principles&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fail‑closed by default &lt;/li&gt;
&lt;li&gt;No human in the loop &lt;/li&gt;
&lt;li&gt;Validation before execution
&lt;/li&gt;
&lt;li&gt;Structured data, not prompts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What about you?&lt;br&gt;
I’m curious how others handle safety in production agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you validate data before the agent acts?&lt;/li&gt;
&lt;li&gt;What’s your decision validation pipeline?&lt;/li&gt;
&lt;li&gt;When something fails, do you default to allow or deny?&lt;/li&gt;
&lt;li&gt;What’s the worst "oops" moment you’ve had?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>machinelearning</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
