<?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: Ventse</title>
    <description>The latest articles on DEV Community by Ventse (@traceseal).</description>
    <link>https://dev.to/traceseal</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%2F3882611%2F9fea844c-d8a3-423f-9fd5-c12bd3e6960d.png</url>
      <title>DEV Community: Ventse</title>
      <link>https://dev.to/traceseal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/traceseal"/>
    <language>en</language>
    <item>
      <title>How to verify what an AI agent actually did</title>
      <dc:creator>Ventse</dc:creator>
      <pubDate>Tue, 21 Jul 2026 08:46:24 +0000</pubDate>
      <link>https://dev.to/traceseal/how-to-verify-what-an-ai-agent-actually-did-251f</link>
      <guid>https://dev.to/traceseal/how-to-verify-what-an-ai-agent-actually-did-251f</guid>
      <description>&lt;p&gt;Your agent says it finished the job. Its log file agrees. Neither of those is evidence: the log was written by the same process it describes, and it can be rewritten afterwards by anyone with disk access. If you need to show a customer, an auditor or a court what an agent did, you need a record that &lt;strong&gt;fails loudly when altered&lt;/strong&gt; and that a stranger can check without trusting you. This is a practical walkthrough of doing exactly that with an open verifier and a signed execution receipt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: install the verifier
&lt;/h2&gt;

&lt;p&gt;The verifier is a small open-source Python package with a published &lt;a href="https://github.com/traceseal/traceseal-verify/blob/main/RECEIPT-SPEC.md" rel="noopener noreferrer"&gt;receipt specification&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;traceseal-verify
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;traceseal-verify receipt.json
&lt;span class="go"&gt;[OK] receipt.json — operator signature verified
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The check runs &lt;strong&gt;offline&lt;/strong&gt;. It needs no account, no API call and no access to the operator's infrastructure — which is the point. Verification that requires the operator's cooperation is not independent verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: read the receipt — the anatomy
&lt;/h2&gt;

&lt;p&gt;A receipt is a single JSON document with three blocks. Here is a real one, abridged:&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;"attestation"&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;"attested_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-04-15T05:29:04Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"operator_fingerprint"&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:d8d13a6f..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"operator_public_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3ba02728..."&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;"4678a52c..."&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;"execution"&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;"skill_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yoast-seo-audit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"skill_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inputs_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"sha256:6ac78ba8..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"outputs_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:66858bb9..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sandbox_profile_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:e7a3e6b8..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"skill_manifest_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;"sha256:79c14974..."&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_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"wall_time_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;47&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;"provenance"&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;"manifest_hash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256:79c14974..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"publisher_fingerprint"&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:d8d13a6f..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"transparency_log_seq"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&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;"receipt_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each block answers a different question:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;provenance&lt;/code&gt; — which code ran.&lt;/strong&gt; The publisher signs a content-addressed manifest: every artefact (the skill definition, its capability declaration, the code itself) is listed by its SHA-256 hash (&lt;a href="https://csrc.nist.gov/pubs/fips/180-4/upd1/final" rel="noopener noreferrer"&gt;FIPS 180-4&lt;/a&gt;). Change one byte of the code and the manifest hash no longer matches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;execution&lt;/code&gt; — what happened.&lt;/strong&gt; Inputs, outputs and the sandbox policy are recorded as hashes of their canonical JSON form. That proves integrity without exposing the data — you can demonstrate the output is unchanged without publishing the output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;attestation&lt;/code&gt; — who vouches for it.&lt;/strong&gt; The operator signs the whole record with an Ed25519 key (&lt;a href="https://www.rfc-editor.org/rfc/rfc8032" rel="noopener noreferrer"&gt;RFC 8032&lt;/a&gt;). The signature covers a canonical JSON encoding — sorted keys, fixed separators — so there is exactly one valid byte sequence for a given receipt. Any edit anywhere breaks the seal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: understand what the check proves
&lt;/h2&gt;

&lt;p&gt;When &lt;code&gt;traceseal-verify&lt;/code&gt; prints &lt;code&gt;[OK]&lt;/code&gt;, four things have been established:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The receipt is byte-for-byte what the operator signed — nothing was edited afterwards, by the agent, the operator's tooling, or anyone who handled the file since.&lt;/li&gt;
&lt;li&gt;The code that ran is exactly the code the publisher signed, down to the hash of each file.&lt;/li&gt;
&lt;li&gt;The recorded inputs, outputs and sandbox policy are the ones present at execution time — anything you are later shown can be checked against the hashes.&lt;/li&gt;
&lt;li&gt;The signing key is identified by fingerprint, so repeated receipts from the same operator are linkable, and the receipt can be anchored in a &lt;a href="https://log.traceseal.io" rel="noopener noreferrer"&gt;public transparency log&lt;/a&gt; (the &lt;code&gt;transparency_log_seq&lt;/code&gt; field), which prevents the operator quietly maintaining two versions of history.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What a receipt does not prove
&lt;/h2&gt;

&lt;p&gt;Honest tools state their limits, and this matters if you ever rely on a receipt in a dispute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It does not prove the work was good.&lt;/strong&gt; A receipt proves what ran and what it produced — not that the output was correct. Checking outcomes against ground truth is a separate, complementary verification step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It does not prove events it never covered.&lt;/strong&gt; A receipt seals one execution. Actions taken outside sealed executions are simply absent — which is why instrumentation has to start before the incident, not after.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It binds a key, not a person.&lt;/strong&gt; The signature proves the holder of the operator key vouched for the record. Tying that key to a legal identity is a key-management question, the same as with any signing scheme.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The trust inversion:&lt;/strong&gt; with logs, the burden is on the reader to trust the writer. With signed receipts, the burden is on the record to survive verification. That is the difference between "our system says it behaved" and "check it yourself".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why this beats screenshots and log exports
&lt;/h2&gt;

&lt;p&gt;The evidence teams typically produce today — screenshots, log exports, dashboard PDFs — shares one flaw: it is all produced by, or under the control of, the party whose behaviour is in question. Computer-security guidance on log management has warned for years that logs require protection precisely because they are alterable by whoever controls the system (&lt;a href="https://csrc.nist.gov/pubs/sp/800/92/final" rel="noopener noreferrer"&gt;NIST SP 800-92&lt;/a&gt;). A detached signature over a canonical record removes the alterability, and an open verifier removes the need to take anyone's word for it.&lt;/p&gt;

&lt;p&gt;Everything shown here is open: the &lt;a href="https://github.com/traceseal/traceseal-verify/blob/main/RECEIPT-SPEC.md" rel="noopener noreferrer"&gt;receipt spec&lt;/a&gt;, the &lt;a href="https://pypi.org/project/traceseal-verify/" rel="noopener noreferrer"&gt;verifier on PyPI&lt;/a&gt;, and the &lt;a href="https://log.traceseal.io" rel="noopener noreferrer"&gt;transparency log&lt;/a&gt;. You can implement the format yourself; the spec even includes a reference canonical-JSON encoder.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://traceseal.io/blog/verify-what-an-ai-agent-actually-did/" rel="noopener noreferrer"&gt;traceseal.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
      <category>devops</category>
    </item>
    <item>
      <title>EU AI Act Article 50: what it means for teams running AI agents</title>
      <dc:creator>Ventse</dc:creator>
      <pubDate>Sun, 19 Jul 2026 10:14:59 +0000</pubDate>
      <link>https://dev.to/traceseal/eu-ai-act-article-50-what-it-means-for-teams-running-ai-agents-p28</link>
      <guid>https://dev.to/traceseal/eu-ai-act-article-50-what-it-means-for-teams-running-ai-agents-p28</guid>
      <description>&lt;p&gt;&lt;em&gt;Cross-posted from &lt;a href="https://traceseal.io/blog/eu-ai-act-article-50-ai-agents/" rel="noopener noreferrer"&gt;traceseal.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;2 August 2026&lt;/strong&gt;, the transparency obligations in Article 50 of the EU AI Act (&lt;a href="https://eur-lex.europa.eu/eli/reg/2024/1689/oj" rel="noopener noreferrer"&gt;Regulation (EU) 2024/1689&lt;/a&gt;) become applicable. If your organisation deploys AI systems that interact with people or produce content — and AI agents do both — this deadline matters wherever you are based: the Act applies wherever a system's output is used in the Union.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Article 50 actually requires
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://artificialintelligenceact.eu/article/50/" rel="noopener noreferrer"&gt;full text of Article 50&lt;/a&gt; sets out four transparency duties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Disclosure of AI interaction.&lt;/strong&gt; People must know they are interacting with an AI system, unless obvious from context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marking of synthetic content.&lt;/strong&gt; Generated text, audio, image or video must be marked as artificially generated, machine-readably where feasible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployer disclosures.&lt;/strong&gt; Emotion recognition, biometric categorisation and deepfake-style content require informing the people affected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Published text disclosures.&lt;/strong&gt; AI-generated text published on matters of public interest must be disclosed, unless a human editor takes responsibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Non-compliance carries penalties up to &lt;strong&gt;€15 million or 3% of worldwide turnover&lt;/strong&gt; (&lt;a href="https://artificialintelligenceact.eu/article/99/" rel="noopener noreferrer"&gt;Article 99(4)&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Why agents make this harder than chatbots
&lt;/h2&gt;

&lt;p&gt;For a chat window, disclosure is a banner. For an &lt;strong&gt;agent&lt;/strong&gt; — a system that plans, calls tools, edits files, sends messages and commits code — the question is not "did we tell the user it's AI?" but "&lt;strong&gt;can we show what the system actually did?&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;Application logs are written by the same system they describe, can be edited after the fact, and prove nothing to a third party. When an agent's action is challenged, "our logs say it behaved" is an assertion, not evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  From documentation to verification
&lt;/h2&gt;

&lt;p&gt;The robust way to demonstrate what an AI system did is to make the record &lt;strong&gt;tamper-evident and independently verifiable&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign the code.&lt;/strong&gt; The publisher signs the agent skill with an ed25519 key over a content-addressed manifest — provable which code ran.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seal the execution.&lt;/strong&gt; The operator runs it in a kernel-namespace sandbox and signs a record of inputs, outputs, timing and sandbox policy — as SHA-256 hashes, proving integrity without exposing data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let anyone verify&lt;/strong&gt; — one command, offline, no access to the operator's systems:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;traceseal-verify
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;traceseal-verify receipt.json
&lt;span class="go"&gt;[OK] receipt.json — operator signature verified
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the receipt is canonical JSON under a signature, any tampering breaks the seal. That converts an Article 50 conversation from a documentation exercise into a one-command check.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The practical test: if a regulator asked you tomorrow to prove what your agent did last Tuesday, would you hand them a log file they must trust — or a receipt they can verify?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What to do before 2 August 2026
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inventory your agents.&lt;/strong&gt; Anything interacting with people or generating content is in scope for at least one duty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide your evidence standard.&lt;/strong&gt; Logs are trust-me evidence; signed receipts are check-it-yourself evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instrument now, not after an incident.&lt;/strong&gt; Receipts only cover executions sealed at the time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The receipt format, verifier and transparency log are open: the &lt;a href="https://github.com/traceseal/traceseal-verify/blob/main/RECEIPT-SPEC.md" rel="noopener noreferrer"&gt;spec&lt;/a&gt;, the &lt;a href="https://pypi.org/project/traceseal-verify/" rel="noopener noreferrer"&gt;verifier on PyPI&lt;/a&gt;, and the &lt;a href="https://log.traceseal.io" rel="noopener noreferrer"&gt;public log&lt;/a&gt;. You can adopt the format without adopting us.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>compliance</category>
      <category>security</category>
      <category>devops</category>
    </item>
    <item>
      <title>Proving What Your AI Agent Did: Introducing Traceseal</title>
      <dc:creator>Ventse</dc:creator>
      <pubDate>Thu, 16 Apr 2026 14:01:09 +0000</pubDate>
      <link>https://dev.to/traceseal/proving-what-your-ai-agent-did-introducing-traceseal-5bpn</link>
      <guid>https://dev.to/traceseal/proving-what-your-ai-agent-did-introducing-traceseal-5bpn</guid>
      <description>&lt;p&gt;Every AI agent framework can make agents do things. None of them&lt;br&gt;
can prove what the agent did.&lt;/p&gt;

&lt;p&gt;When a client asks "was your AI agent running authorized code when&lt;br&gt;
it published that article?" the answer today is "trust me." When a&lt;br&gt;
regulator asks "what capabilities did the automated system have?"&lt;br&gt;
the answer is "trust me." When something goes wrong and someone&lt;br&gt;
asks "what exactly happened?" the answer is still "trust me."&lt;/p&gt;

&lt;p&gt;We built Traceseal to replace "trust me" with math.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Traceseal does
&lt;/h2&gt;

&lt;p&gt;Traceseal produces an Execution Receipt — a signed JSON document&lt;br&gt;
that proves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What code ran (manifest hash over every source file)&lt;/li&gt;
&lt;li&gt;Who authorized it (publisher's ed25519 signature)&lt;/li&gt;
&lt;li&gt;What sandbox it ran in (hash of the kernel-namespace configuration)&lt;/li&gt;
&lt;li&gt;What it produced (SHA-256 of inputs and outputs)&lt;/li&gt;
&lt;li&gt;Who vouches for it (operator's ed25519 signature over all of the above)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A third party verifies the receipt with one command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install traceseal-verify
traceseal-verify receipt.json

[OK] receipt.json
  skill:     agentmail v1.2.0
  operator:  ed25519:f19bc125...
  publisher: ed25519:a07c7eb5...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;No access to the operator's machine. No trust assumptions. Just math.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;8 weeks. 217 tests. 27-entry audit chain on real Debian 13 hardware.&lt;br&gt;
Three signed production skills with verified receipts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A multi-entry-point skill bundle&lt;/strong&gt; — signed, sandboxed with&lt;br&gt;
kernel-namespace isolation, receipt verified by a third party. 116ms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A real production skill with SDK dependencies&lt;/strong&gt; — the agentmail&lt;br&gt;
SDK was mounted read-only into the sandbox. The execution failed&lt;br&gt;
(bad API key) and the receipt honestly records the failure.&lt;br&gt;
The system doesn't hide bad outcomes — it seals them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A web scraping skill&lt;/strong&gt; — signed, sandboxed, 47ms, receipt verified.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The full pipeline — sign, sandbox, execute, receipt, verify — runs&lt;br&gt;
in under 200ms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;AI agents are moving from demos to production. When they get there,&lt;br&gt;
someone will ask for proof. Proof that the code was authorized.&lt;br&gt;
Proof that the sandbox was real. Proof that the outputs weren't&lt;br&gt;
tampered with. Proof that a third party can check independently.&lt;/p&gt;

&lt;p&gt;Every other trust system in the AI agent space offers dashboards,&lt;br&gt;
not proofs. They log what happened. We seal it. The difference:&lt;br&gt;
a log says "the operator claims this happened." A receipt says&lt;br&gt;
"anyone can independently verify this happened."&lt;/p&gt;

&lt;h2&gt;
  
  
  Open spec, open verifier
&lt;/h2&gt;

&lt;p&gt;The Execution Receipt Specification is Apache 2.0:&lt;br&gt;
→ &lt;a href="https://traceseal.io/spec" rel="noopener noreferrer"&gt;RECEIPT-SPEC.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The standalone verifier is Apache 2.0:&lt;br&gt;
→ pip install traceseal-verify&lt;br&gt;
→ &lt;a href="https://github.com/traceseal/traceseal-verify" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The transparency log is live:&lt;br&gt;
→ &lt;a href="https://log.traceseal.io" rel="noopener noreferrer"&gt;log.traceseal.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyone can verify receipts. Anyone can implement the spec.&lt;br&gt;
The hard part — signing, sandboxing, audit logging, the full stack&lt;br&gt;
that generates receipts worth verifying — is Traceseal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Traceseal currently produces receipts for skill execution. We're&lt;br&gt;
extending the receipt format to cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model call receipts&lt;/strong&gt; — prove which model processed your data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orchestration receipts&lt;/strong&gt; — prove a multi-step workflow
executed in order with declared inputs at each step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data flow receipts&lt;/strong&gt; — prove what data was sent where&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same format. Same verifier. Same transparency log.&lt;/p&gt;

&lt;p&gt;The goal: a cryptographic audit trail for every action your AI agent&lt;br&gt;
takes, verifiable by anyone, without trusting the operator's machine.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://traceseal.io" rel="noopener noreferrer"&gt;traceseal.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
      <category>security</category>
    </item>
  </channel>
</rss>
