<?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: Alex</title>
    <description>The latest articles on DEV Community by Alex (@alexar76).</description>
    <link>https://dev.to/alexar76</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%2F3927872%2Fdf501cac-6862-47af-8b22-4e3067696337.jpeg</url>
      <title>DEV Community: Alex</title>
      <link>https://dev.to/alexar76</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexar76"/>
    <language>en</language>
    <item>
      <title>I wanted a signed AIMarket provider without the monorepo. One CLI later, I had one.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Sat, 22 Aug 2026 05:01:03 +0000</pubDate>
      <link>https://dev.to/alexar76/i-wanted-a-signed-aimarket-provider-without-the-monorepo-one-cli-later-i-had-one-3jfi</link>
      <guid>https://dev.to/alexar76/i-wanted-a-signed-aimarket-provider-without-the-monorepo-one-cli-later-i-had-one-3jfi</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftu0ft5rr56unq1dff0zz.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftu0ft5rr56unq1dff0zz.jpg" alt="Empty folder becoming a stamped PROVIDER box on a dark desk" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most “ship an AI agent” tutorials start in a monorepo the size of a small city.&lt;/p&gt;

&lt;p&gt;I wanted the opposite: an empty directory, one command, and a provider that already knew how to sign its answers.&lt;/p&gt;

&lt;p&gt;That tool now exists on PyPI as &lt;strong&gt;&lt;code&gt;create-aimarket-agent&lt;/code&gt; 0.1.0&lt;/strong&gt; — a standalone scaffolder for &lt;a href="https://alexar76.github.io/create-aimarket-agent/" rel="noopener noreferrer"&gt;AIMarket Protocol v2&lt;/a&gt; capability providers. Docs in five languages. Generator CI claims &lt;strong&gt;47 tests&lt;/strong&gt; and &lt;strong&gt;100% branch coverage&lt;/strong&gt;. MIT.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; publish you to a marketplace. That part stays manual on purpose.&lt;/p&gt;




&lt;h2&gt;
  
  
  One command. Stable names.
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbsbyxnn3k4ux1rw52it.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbsbyxnn3k4ux1rw52it.jpg" alt="Dark terminal running uvx create-aimarket-agent" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx create-aimarket-agent my-agent &lt;span class="nt"&gt;--kind&lt;/span&gt; tool &lt;span class="nt"&gt;--metis&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-agent
uv &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;--extra&lt;/span&gt; dev
uv run python configure_provider.py
uv run pytest
uv run python validate_manifest.py
uv run python agent.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI, flags, filenames, and API fields stay English everywhere. Localization covers the docs, not the contract.&lt;/p&gt;

&lt;p&gt;Kinds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;create-aimarket-agent my-tool &lt;span class="nt"&gt;--kind&lt;/span&gt; tool
create-aimarket-agent my-data &lt;span class="nt"&gt;--kind&lt;/span&gt; data-provider
create-aimarket-agent my-orchestrator &lt;span class="nt"&gt;--kind&lt;/span&gt; orchestrator
create-aimarket-agent my-agent &lt;span class="nt"&gt;--no-metis&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scaffolding is atomic: stage in a temp folder, rename into place, clean up. A failed copy leaves no half-written repo.&lt;/p&gt;

&lt;p&gt;Project names are allow-listed before they touch source or JSON. That sounds boring until the first time a fancy name breaks a Dockerfile.&lt;/p&gt;




&lt;h2&gt;
  
  
  What lands on disk
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;FastAPI &lt;code&gt;/health&lt;/code&gt; + &lt;code&gt;/invoke&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;capability.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Protocol v2 manifest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;provider_signing.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Persistent Ed25519 identity + request-bound signatures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;configure_provider.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Writes &lt;code&gt;provider_pubkey&lt;/code&gt; into the manifest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;validate_manifest.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fail-closed checks before you even think about publish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test_agent.py&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API, signature, request-size tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Non-root image, key volume at &lt;code&gt;/data&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.github/workflows/test.yml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CI for the generated project&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The default manifest looks like this (placeholders replaced with your slug):&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;"product_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;"my-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"capability_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;"my-agent.invoke@v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"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;"my-agent"&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 generated AIMarket tool capability"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"invoke_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://127.0.0.1:8080/invoke"&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_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;"community"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"provider_pubkey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"price_per_call_usd"&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.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input_schema"&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="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;"additionalProperties"&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;"output_schema"&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="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;"additionalProperties"&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;"verification"&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="nl"&gt;"metis"&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="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;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8dqk38ovw6n8lb2ik2b0.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8dqk38ovw6n8lb2ik2b0.jpg" alt="capability.json beside a VALIDATE stamp" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;configure_provider.py&lt;/code&gt; fills &lt;code&gt;provider_pubkey&lt;/code&gt;. &lt;code&gt;validate_manifest.py&lt;/code&gt; rejects duplicate JSON keys, broken Ed25519 keys, non-finite prices, bad URLs, and public HTTP endpoints before you ship.&lt;/p&gt;

&lt;p&gt;The skeleton &lt;code&gt;/invoke&lt;/code&gt; only accepts the product and capability ids declared in its own manifest. An untrusted caller cannot make your key sign someone else’s identity.&lt;/p&gt;




&lt;h2&gt;
  
  
  The part I actually cared about: the stamp
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgdbcwafuy4rx52s61kpd.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgdbcwafuy4rx52s61kpd.jpg" alt="Steel stamps ATOMIC, Ed25519, REQUEST-BOUND beside a provider.key fob" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pretty agents are easy. Replay-resistant receipts are not.&lt;/p&gt;

&lt;p&gt;The generated signer keeps a &lt;strong&gt;32-byte Ed25519 seed&lt;/strong&gt; at mode &lt;code&gt;0600&lt;/code&gt;. Symlinks and non-regular files get rejected. Responses sign a canonical envelope with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;capability_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;product_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SHA-256 of the input&lt;/li&gt;
&lt;li&gt;the result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That binding is the point. Steal a response for request A and it should not verify as a reply to request B.&lt;/p&gt;

&lt;p&gt;The signature is a receipt for what this provider returned. It is &lt;strong&gt;not&lt;/strong&gt; an authorization gate for random internet callers. Keep &lt;code&gt;8080&lt;/code&gt; on loopback until real HTTPS ingress, concurrency, and rate limits sit in front.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker without drama
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flai3deoz7bt7y189u7ud.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flai3deoz7bt7y189u7ud.jpg" alt="Read-only crate labeled 8080 with a /data volume" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; my-agent &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;--read-only&lt;/span&gt; &lt;span class="nt"&gt;--tmpfs&lt;/span&gt; /tmp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 127.0.0.1:8080:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; my-agent-key:/data my-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs as UID &lt;code&gt;65532&lt;/code&gt;, health-checks &lt;code&gt;/health&lt;/code&gt;, stores the key under &lt;code&gt;/data/provider.key&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Back up that key before you register anything. Rotate it and the Hub’s stored &lt;code&gt;provider_pubkey&lt;/code&gt; becomes a stranger.&lt;/p&gt;




&lt;h2&gt;
  
  
  From skeleton to something useful: THEMIS
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjpbkgsdv3fdc79r5p1t.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjpbkgsdv3fdc79r5p1t.jpg" alt="THEMIS dossier with APPROVE / REVIEW / REJECT" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The README does not stop at “echo hello.” There is a full tutorial that turns the scaffold into &lt;strong&gt;THEMIS&lt;/strong&gt; — a procurement gate that answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Should this candidate agent be approved, sent to human review, or rejected?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Deterministic policy checks. Projected cost. OWASP Agentic risk mappings. Optional lazy Metis verification that never silently overrides the verdict. Same request-bound signing model.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tutorial: &lt;a href="https://github.com/alexar76/create-aimarket-agent/blob/main/docs/tutorials/themis.en.md" rel="noopener noreferrer"&gt;docs/tutorials/themis.en.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Finished repo: &lt;a href="https://github.com/alexar76/themis" rel="noopener noreferrer"&gt;alexar76/themis&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only want a tool capability, ignore THEMIS. If you want a real admission gate, start there.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this is not
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not auto-publish.&lt;/strong&gt; Stake, publisher identity, trust policy, and Hub registration stay explicit operator steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not “the monorepo.”&lt;/strong&gt; The GitHub repo is a &lt;strong&gt;read-only mirror&lt;/strong&gt; of the AI-Factory tree. PRs there get overwritten on the next sync — open an issue instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a substitute for HTTPS.&lt;/strong&gt; Loopback + signature ≠ production exposure.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx create-aimarket-agent my-agent &lt;span class="nt"&gt;--kind&lt;/span&gt; tool &lt;span class="nt"&gt;--metis&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Docs: &lt;a href="https://alexar76.github.io/create-aimarket-agent/" rel="noopener noreferrer"&gt;alexar76.github.io/create-aimarket-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source / issues: &lt;a href="https://github.com/alexar76/create-aimarket-agent" rel="noopener noreferrer"&gt;github.com/alexar76/create-aimarket-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Package: &lt;code&gt;create-aimarket-agent&lt;/code&gt; on PyPI (&lt;code&gt;0.1.0&lt;/code&gt; as of this writing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Empty folder in. Signed provider out. Marketplace listing still your call — which is exactly how I wanted it.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I connected one MCP server. It searched a live marketplace and returned a signed weather receipt.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Fri, 21 Aug 2026 11:54:52 +0000</pubDate>
      <link>https://dev.to/alexar76/i-connected-one-mcp-server-it-searched-a-live-marketplace-and-returned-a-signed-weather-receipt-204e</link>
      <guid>https://dev.to/alexar76/i-connected-one-mcp-server-it-searched-a-live-marketplace-and-returned-a-signed-weather-receipt-204e</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fho3t0v0pqm9g6nnd7oje.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fho3t0v0pqm9g6nnd7oje.jpg" alt="Tablet asking for weather beside a stamped Hub MCP receipt" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most MCP tutorials stop at “install another server.”&lt;/p&gt;

&lt;p&gt;I wanted the opposite: &lt;strong&gt;one remote MCP&lt;/strong&gt;, two tools, and a receipt I could keep — without adding a new server every time an agent needed a different capability.&lt;/p&gt;

&lt;p&gt;So I pointed a client at the Official MCP Registry entry for &lt;code&gt;aimarket-hub&lt;/code&gt;, opened the live remote, and asked for weather.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two tools. That is the whole door.
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffiu83ef1vyfsndo23xl4.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffiu83ef1vyfsndo23xl4.jpg" alt="Terminal showing market_search and market_invoke" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Hub MCP exposes exactly two tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;market_search&lt;/code&gt; — plain-language intent → capability ids, prices, &lt;code&gt;source_hub&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;market_invoke&lt;/code&gt; — call one capability; trial invokes first; then paid access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remote URL (streamable HTTP):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://modelmarket.dev/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No monorepo tour. No “install seventeen servers.” Search, then invoke.&lt;/p&gt;




&lt;h2&gt;
  
  
  Find it on the Official Registry
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjn96k0g1vk7rshbq59zt.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjn96k0g1vk7rshbq59zt.jpg" alt="Official MCP Registry card for aimarket-hub" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the &lt;a href="https://registry.modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Official MCP Registry&lt;/a&gt;, search &lt;code&gt;aimarket-hub&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Live pull (2026-08-21):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name: &lt;code&gt;io.github.alexar76/aimarket-hub&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;status: &lt;strong&gt;active&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;published: &lt;strong&gt;2026-08-16&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;remote: &lt;code&gt;https://modelmarket.dev/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;tools: &lt;code&gt;market_search&lt;/code&gt; · &lt;code&gt;market_invoke&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not invent a server from a blog post. Take the registered remote.&lt;/p&gt;




&lt;h2&gt;
  
  
  market_search: ask in English
&lt;/h2&gt;

&lt;p&gt;I called &lt;code&gt;market_search&lt;/code&gt; with intent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;attested weather reading&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Back came (among others):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;capability_id&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gaia.weather.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;product_id&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gaia.gateway&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;price_per_call_usd&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0.001&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;source_hub&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://iot.modelmarket.dev&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Search is a &lt;strong&gt;catalogue&lt;/strong&gt;. It is not a forecast. Read the description before you spend a trial.&lt;/p&gt;

&lt;p&gt;When I searched hydrology earlier, a flood SKU said out loud: &lt;em&gt;not an in-situ river gauge&lt;/em&gt;. That sentence is the product.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pass source_hub. Or the hub refuses.
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifis7oba9gwe6i4df7is.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifis7oba9gwe6i4df7is.jpg" alt="Two papers: WITH source_hub OK, WITHOUT source_hub federated retry" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the catalogue is &lt;strong&gt;federated&lt;/strong&gt;. Not local to the hub.&lt;/p&gt;

&lt;p&gt;I tried &lt;code&gt;market_invoke&lt;/code&gt; with the same capability id and &lt;strong&gt;no&lt;/strong&gt; &lt;code&gt;source_hub&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The answer was blunt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;gaia.weather.read@v1&lt;/code&gt; is federated, not local — retry with &lt;code&gt;source_hub="https://iot.modelmarket.dev"&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That refusal is honesty. Not a bug. Pass what search gave you.&lt;/p&gt;




&lt;h2&gt;
  
  
  market_invoke: a real reading + a receipt
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hu816a8lmkuk3g0n9sp.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hu816a8lmkuk3g0n9sp.jpg" alt="Printed Hub MCP receipt for gaia.weather.read" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I invoked with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;capability_id&lt;/code&gt;: &lt;code&gt;gaia.weather.read@v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;source_hub&lt;/code&gt;: &lt;code&gt;https://iot.modelmarket.dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;input.device_id&lt;/code&gt;: &lt;code&gt;om-wx-01&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What came back (this run, 2026-08-21):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;device: &lt;strong&gt;om-wx-01&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;site: &lt;strong&gt;live-weather-eu&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;temperature: &lt;strong&gt;~21.5 °C&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Ed25519 attestation on the reading&lt;/li&gt;
&lt;li&gt;Hub receipt (signed)&lt;/li&gt;
&lt;li&gt;sandbox: trial invoke (&lt;code&gt;max_trials&lt;/code&gt; = 5)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The receipt outlives the chat tab. Keep it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trial then paid. Then 402.
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foxlfydxyxss7xuv5349z.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foxlfydxyxss7xuv5349z.jpg" alt="Paper printout of HTTP 402 — trial then paid" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The public remote grants a short &lt;strong&gt;trial&lt;/strong&gt; allowance.&lt;/p&gt;

&lt;p&gt;When the allowance ends, the hub answers &lt;strong&gt;402&lt;/strong&gt;. It does &lt;strong&gt;not&lt;/strong&gt; invent a weather reading to keep the demo pretty.&lt;/p&gt;

&lt;p&gt;Empty payment is still an honest answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this is not
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Not a new MCP server per SKU&lt;/li&gt;
&lt;li&gt;Not a flood model / weather cinema&lt;/li&gt;
&lt;li&gt;Not “trust the JSON forever”&lt;/li&gt;
&lt;li&gt;Not a monorepo pitch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a door: registry → two tools → signed invoke.&lt;/p&gt;

&lt;p&gt;Human doors (maps, build paths, investor intro) live on &lt;a href="https://use.modelmarket.dev/" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt;. The agent door for this article is the Hub MCP.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://registry.modelcontextprotocol.io/" rel="noopener noreferrer"&gt;registry.modelcontextprotocol.io&lt;/a&gt; → search &lt;code&gt;aimarket-hub&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Point your MCP client at &lt;code&gt;https://modelmarket.dev/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;market_search&lt;/code&gt; with a plain intent&lt;/li&gt;
&lt;li&gt;Call &lt;code&gt;market_invoke&lt;/code&gt; &lt;strong&gt;with&lt;/strong&gt; &lt;code&gt;source_hub&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Keep the receipt&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If something fails closed, read the message. That is the feature.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>mcp</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I unzipped the sample fire brief. The globe was never the product.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Wed, 19 Aug 2026 18:47:03 +0000</pubDate>
      <link>https://dev.to/alexar76/i-unzipped-the-sample-fire-brief-the-globe-was-never-the-product-2a51</link>
      <guid>https://dev.to/alexar76/i-unzipped-the-sample-fire-brief-the-globe-was-never-the-product-2a51</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frls37hbo86aa1ynhtvvb.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frls37hbo86aa1ynhtvvb.jpg" alt="Kitchen table: an unzipped cite pack, a PDF, and a laptop listing the files"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last week I wrote that &lt;a href="https://dev.to/alexar76/pretty-fire-maps-are-liars-i-wanted-a-file-i-could-actually-show-someone-2h93"&gt;pretty fire maps are liars&lt;/a&gt;. People liked the tantrum. Then they asked the adult question:&lt;/p&gt;

&lt;p&gt;So what do you actually &lt;em&gt;keep&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;The globe is the shop window. The product is a zip you can email.&lt;/p&gt;




&lt;h2&gt;
  
  
  I downloaded the sample. It says sample.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://emberlinedesk.com/sample" rel="noopener noreferrer"&gt;emberlinedesk.com/sample&lt;/a&gt; is labeled &lt;strong&gt;MARKETING FIXTURE&lt;/strong&gt;. The page says this is not a live Hub invoke. We did not dress a demo as this morning’s run.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faph5ok06gqlvq5t6p2ln.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faph5ok06gqlvq5t6p2ln.jpg" alt="Emberline sample page — cream brief, SAMPLE watermark, three stamps"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Cream paper. Three stamps. A small table that says two dots appeared and one got brighter. Then a button: download the pack.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The button is the whole movie.&lt;/p&gt;


&lt;h2&gt;
  
  
  Eight files. That is the desk.
&lt;/h2&gt;

&lt;p&gt;I saved &lt;code&gt;sample-cite-pack.zip&lt;/code&gt;. Ten kilobytes. I unzipped it.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F357szidaejsz8g0a67pi.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F357szidaejsz8g0a67pi.jpg" alt="Terminal listing of the sample cite pack — README, PDF, JSON, raw, SHA256SUMS"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00-README.txt
01-cover.pdf
02-brief.json
03-delta.json
04-receipt.json
raw/fire_weather.json
raw/watchbox.json
SHA256SUMS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On this sample, &lt;code&gt;raw/watchbox.json&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;. The fixture packed the fire snapshot, not a second Hub call.&lt;/p&gt;

&lt;p&gt;No shapefile of “the fire.” No house-shaped flame. No forecast with a confidence gradient that photographs well on LinkedIn.&lt;/p&gt;

&lt;p&gt;A README that tells intake how to cite: brief id, &lt;code&gt;generated_at&lt;/code&gt;, evidence status, receipt digest. If you need the Hub payload, use &lt;code&gt;raw/&lt;/code&gt; — do not redraw geometry the desk did not store.&lt;/p&gt;




&lt;h2&gt;
  
  
  The human page
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;01-cover.pdf&lt;/code&gt; is the thing you can print without being a coward.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4g4xet3g1mytvx2qgkt.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4g4xet3g1mytvx2qgkt.jpg" alt="Cover PDF from the cite pack — CA Transmission Corridor, stamps, file list"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Header on every page: not a perimeter, not a forecast, not an evacuation order. Quiet is not proof of safety.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This sample is watch &lt;strong&gt;CA Transmission Corridor&lt;/strong&gt;, brief &lt;code&gt;brf_sample_001&lt;/code&gt;. It reports &lt;strong&gt;152 LIVE FIRMS detections&lt;/strong&gt;, brightest &lt;strong&gt;367 K&lt;/strong&gt; near 37.66, −121.38. Source-attributed context. Not containment. Not an evacuation.&lt;/p&gt;

&lt;p&gt;The cover prints the receipt panel &lt;strong&gt;as stored&lt;/strong&gt; — including &lt;code&gt;emberline_verified=False&lt;/code&gt; on this fixture. We did not paint a green check for the brochure.&lt;/p&gt;




&lt;h2&gt;
  
  
  The delta is not a spread model
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;03-delta.json&lt;/code&gt; compares two briefs on the same box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;150 → 152 (+2).&lt;/strong&gt; Two points appeared. One brightened 355 → 367 K. Zero disappeared.&lt;/p&gt;

&lt;p&gt;That is the whole plot. The file says so out loud: this is not growth rate, not containment, not “the fire moved.” A disappeared point might be cloud. An appeared point is a new thermal anomaly in the box, not a confirmed ignition time.&lt;/p&gt;

&lt;p&gt;If you cannot live with that sentence, you wanted cinema.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hashes, because next quarter exists
&lt;/h2&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnremkf9fk3onqtillcu2.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnremkf9fk3onqtillcu2.jpg" alt="SHA256SUMS — content hashes for every file in the zip"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Hashes match the files in this zip. Verify SHA256SUMS against every file except itself. The public sample is a fixture — it restamps &lt;code&gt;generated_at&lt;/code&gt; on download. A filed brief’s pack keeps the same bytes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the hardware-store receipt in the kitchen drawer. You email the zip. Intake hashes it in October. You do not argue with a screenshot of a globe.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffna7sq1u4w1pn2yjxe6q.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffna7sq1u4w1pn2yjxe6q.jpg" alt="Unzipped papers on a walnut table — README, cover, hashes"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The file outlives the tab.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What this is not (again, on purpose)
&lt;/h2&gt;

&lt;p&gt;It is not 911.&lt;/p&gt;

&lt;p&gt;It is not an insurance quote.&lt;/p&gt;

&lt;p&gt;It is not “AI predicts where the fire goes next.”&lt;/p&gt;

&lt;p&gt;Emberline is an independent desk. It &lt;em&gt;buys&lt;/em&gt; the snapshot. It &lt;em&gt;sells&lt;/em&gt; the watching. The rails underneath are not the brand on the paper.&lt;/p&gt;




&lt;h2&gt;
  
  
  If you only remember one sentence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The globe is the shop window. The product is a zip you can email.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open the sample: &lt;a href="https://emberlinedesk.com/sample" rel="noopener noreferrer"&gt;emberlinedesk.com/sample&lt;/a&gt; → &lt;em&gt;Download sample pack&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you have a real box — a corridor, a ranch, a right-of-way, not “California” — request a key. No self-serve carnival.&lt;/p&gt;

&lt;p&gt;Previous tantrum about the pretty blob: &lt;a href="https://dev.to/alexar76/pretty-fire-maps-are-liars-i-wanted-a-file-i-could-actually-show-someone-2h93"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The snapshot glass, if you still like staring at the planet: &lt;a href="https://atlas.modelmarket.dev/?layers=fire,weather" rel="noopener noreferrer"&gt;atlas.modelmarket.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;
&lt;em&gt;Emberline — a fire evidence desk. Independent. Citeable. Allergic to red blobs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Pretty fire maps are liars. I wanted a file I could actually show someone.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:37:15 +0000</pubDate>
      <link>https://dev.to/alexar76/pretty-fire-maps-are-liars-i-wanted-a-file-i-could-actually-show-someone-2h93</link>
      <guid>https://dev.to/alexar76/pretty-fire-maps-are-liars-i-wanted-a-file-i-could-actually-show-someone-2h93</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxgvyjr3ygxkj7innjix8.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxgvyjr3ygxkj7innjix8.jpg" alt="Kitchen table: a pretty red fire blob on a tablet, and a paper brief that refuses to draw a circle" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know the weather app that paints half the county red and calls it a storm.&lt;/p&gt;

&lt;p&gt;Fire maps do the same trick. A smooth red blob. A glow. A shape that looks like &lt;em&gt;the fire&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It is not the fire.&lt;/p&gt;

&lt;p&gt;It is a drawing someone made around a handful of hot dots from space. The dots are real. The blob is interior design.&lt;/p&gt;




&lt;h2&gt;
  
  
  The pretty lie
&lt;/h2&gt;

&lt;p&gt;If a smoke alarm beeps, you do not sketch a house-shaped flame and tape it to the fridge.&lt;/p&gt;

&lt;p&gt;You look at &lt;em&gt;which room&lt;/em&gt;. You look at &lt;em&gt;how hot&lt;/em&gt;. You do not pretend you know the outline of the fire.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3nxaao44zgyll34orp7.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh3nxaao44zgyll34orp7.jpg" alt="A glossy county map with a huge crimson blob covering the valley" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;This is what most dashboards sell you. It photographs well. It does not survive a lawyer, an editor, or an awkward Tuesday on a call.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Satellites sell heat. Tiny points. Brightness. A maybe.&lt;/p&gt;

&lt;p&gt;The product UI quietly upgrades that into &lt;strong&gt;containment&lt;/strong&gt;. Containment is a job for people on the ground with a radio. A website does not get to invent it because red looks decisive.&lt;/p&gt;




&lt;h2&gt;
  
  
  The boring version (the good one)
&lt;/h2&gt;

&lt;p&gt;Same hills. No blob. Dots, stamps, and a sentence that sounds like a nervous aunt:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not a perimeter. Not a forecast. Not an evacuation order.&lt;/strong&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uzxc3yv69liuvk3pfke.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uzxc3yv69liuvk3pfke.jpg" alt="Cream paper brief: only heat dots, stamped NOT A PERIMETER" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ugly on purpose. You can email this. You cannot accidentally brief a board with a cartoon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Last month I &lt;a href="https://dev.to/alexar76/i-asked-for-fire-evidence-the-api-returned-152-thermal-detections-and-refused-to-draw-a-3g48"&gt;asked a fire API for evidence&lt;/a&gt;. It handed back &lt;strong&gt;152 heat detections&lt;/strong&gt; and refused to connect them. People liked the refusal.&lt;/p&gt;

&lt;p&gt;A snapshot is still a snapshot. It dies when you close the tab.&lt;/p&gt;

&lt;p&gt;So we built the unsexy thing next: a &lt;strong&gt;desk&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You name a box you actually watch — a corridor, a ranch, a right-of-way, not “California.” On a schedule it buys the attested snapshot, writes a brief, files it, and keeps the receipt. When the sky is quiet it says so. It does not fill the silence with last week’s glow, like leftover soup.&lt;/p&gt;




&lt;h2&gt;
  
  
  A sample you can open in pajamas
&lt;/h2&gt;

&lt;p&gt;This is a &lt;strong&gt;sample&lt;/strong&gt;. It says so on the page. We did not dress a demo as this morning’s live run.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ewn284aumlfisqd9h94.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ewn284aumlfisqd9h94.jpg" alt="Emberline sample evidence brief — CA Transmission Corridor, stamps on the paper" width="800" height="1209"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Cream paper. Three stamps. A small table that says two new dots showed up and one got brighter. That is the whole movie.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If a dot disappears, the brief does not yell “the fire went out.” Clouds exist. Sensors blink. Adults can live with that.&lt;/p&gt;

&lt;p&gt;The download is a &lt;strong&gt;cite pack&lt;/strong&gt; — a zip, like keeping the hardware-store receipt in a kitchen drawer. Map of dots. Weather on a leash (only nearby, not “vibes”). A signed stamp for who printed this. Not “the sky is on fire, signed, God.”&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flym1ym9dvxkw4o4edwj4.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flym1ym9dvxkw4o4edwj4.jpg" alt="Manila folder labeled CITE PACK on a walnut table" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The product is the file you can keep. The globe is just the shop window.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What this desk is not (say it like you mean it)
&lt;/h2&gt;

&lt;p&gt;It is not 911.&lt;/p&gt;

&lt;p&gt;It is not an insurance quote.&lt;/p&gt;

&lt;p&gt;It is not “AI predicts where the fire goes next.”&lt;/p&gt;

&lt;p&gt;It is not a first-party storefront for the rails underneath it. Emberline is its own little shop. It &lt;em&gt;buys&lt;/em&gt; the snapshot. It &lt;em&gt;sells&lt;/em&gt; the watching.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqg55bng5clxlkeuoo2k.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqg55bng5clxlkeuoo2k.jpg" alt="Emberline — evidence for the box you watch" width="800" height="1209"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Open the sample. If you have a real box, request a key. No self-serve carnival, on purpose.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  If you only remember one sentence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pretty maps invent shapes. Audits do not.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try the sample: &lt;a href="https://emberlinedesk.com/" rel="noopener noreferrer"&gt;emberlinedesk.com&lt;/a&gt; → &lt;em&gt;Read a sample brief&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The snapshot glass, if you like staring at the planet: &lt;a href="https://atlas.modelmarket.dev/?layers=fire,weather" rel="noopener noreferrer"&gt;atlas.modelmarket.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Previous tantrum about the 152 dots: &lt;a href="https://dev.to/alexar76/i-asked-for-fire-evidence-the-api-returned-152-thermal-detections-and-refused-to-draw-a-3g48"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;
&lt;em&gt;Emberline — a fire evidence desk. Independent. Citeable. Allergic to red blobs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>I asked for fire evidence. The API returned 152 thermal detections — and refused to draw a perimeter.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Sun, 16 Aug 2026 16:11:30 +0000</pubDate>
      <link>https://dev.to/alexar76/i-asked-for-fire-evidence-the-api-returned-152-thermal-detections-and-refused-to-draw-a-3g48</link>
      <guid>https://dev.to/alexar76/i-asked-for-fire-evidence-the-api-returned-152-thermal-detections-and-refused-to-draw-a-3g48</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvkuy9rlr8pgpnwfj6aq.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvkuy9rlr8pgpnwfj6aq.png" alt="ATLAS — fire + weather layers on planetary glass" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most wildfire dashboards imply a shape the sensor never gave.&lt;/p&gt;

&lt;p&gt;A red polygon looks like a perimeter. FIRMS never sold you a perimeter. It sold you &lt;strong&gt;thermal anomalies&lt;/strong&gt; — brightness, confidence, a point — and a lot of product UIs quietly upgrade that into “the fire.”&lt;/p&gt;

&lt;p&gt;We build agent rails where a screenshot is not evidence. So we shipped a vertical product that stays honest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://atlas.modelmarket.dev/?layers=fire,weather" rel="noopener noreferrer"&gt;atlas.fire.weather@v1&lt;/a&gt;&lt;/strong&gt; — FIRMS detections (and EFFIS when present) + &lt;strong&gt;bounded&lt;/strong&gt; LIVE weather context + a &lt;strong&gt;signed content receipt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Not a burn scar. Not a forecast. Not a parametric quote.&lt;/p&gt;




&lt;h2&gt;
  
  
  The thesis (one sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If your fire map invents a perimeter, it is cinema — not evidence.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What we actually returned (this run)
&lt;/h2&gt;

&lt;p&gt;Public demo bbox (roughly West Coast US). One live invoke of &lt;code&gt;atlas.fire.weather@v1&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LIVE FIRMS detections&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;152&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brightest&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;367 K&lt;/strong&gt; near 37.66, −121.38 (confidence 90)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EFFIS polygons&lt;/td&gt;
&lt;td&gt;0 in this frame&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weather&lt;/td&gt;
&lt;td&gt;LIVE nearest in range — SFO Airport, &lt;strong&gt;15 °C&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price (public demo)&lt;/td&gt;
&lt;td&gt;~&lt;strong&gt;$0.08&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fva1xhg7avq5vyursr780.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fva1xhg7avq5vyursr780.png" alt="Hotspot list — LIVE FIRMS brightness and FRP" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Count the detections. Do not invent a line around them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Weather is on a leash — only inside a declared distance bound, not a global vibe:&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgfcedn67xv1qwr2hqkpn.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgfcedn67xv1qwr2hqkpn.png" alt="Bounded weather pairing — nearest LIVE station" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dual attribution: thermal list + weather list. Same receipt discipline.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Open the glass
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://atlas.modelmarket.dev/?layers=fire,weather&amp;amp;lang=en" rel="noopener noreferrer"&gt;atlas.modelmarket.dev&lt;/a&gt; — layers &lt;strong&gt;fire&lt;/strong&gt; + &lt;strong&gt;weather&lt;/strong&gt;, English UI
&lt;/li&gt;
&lt;li&gt;Or the idea path: &lt;a href="https://use.modelmarket.dev/ideas.html?id=fire-hotspot" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt; → Fire + Weather Evidence Snapshot
&lt;/li&gt;
&lt;li&gt;Hub SKU: &lt;code&gt;atlas.fire.weather@v1&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fldbgqme5jon4huune4ja.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fldbgqme5jon4huune4ja.png" alt="Fire-only layer — thermal glass without the weather overlay" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Humans get honesty on the map. Agents buy the artifact behind it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Curl shape (ATLAS invoke):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://atlas.modelmarket.dev/ai-market/v2/invoke &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;'{"capability_id":"atlas.fire.weather@v1","input":{"west":-125,"south":32,"east":-114,"north":42,"limit":24}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What it is not (say it out loud)
&lt;/h2&gt;

&lt;p&gt;We print the limits on the artifact on purpose:&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw9tb1h8w9c8c5i9otmxs.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw9tb1h8w9c8c5i9otmxs.png" alt="Limitations — detections are not perimeters" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FIRMS reports satellite thermal anomalies — &lt;strong&gt;not&lt;/strong&gt; confirmed incident perimeters.
&lt;/li&gt;
&lt;li&gt;EFFIS current-fire polygons are a separate Copernicus product (CC BY 4.0) when present — not FIRMS pixels.
&lt;/li&gt;
&lt;li&gt;Weather / air context only within declared distance bounds.
&lt;/li&gt;
&lt;li&gt;Independent operational validation is still required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That paragraph is the product. Dashboards that skip it are lying by omission.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evidence with a receipt
&lt;/h2&gt;

&lt;p&gt;The snapshot carries a content receipt — digest, signature, public key. Same grammar as our &lt;a href="https://dev.to/alexar76/i-ran-a-live-agent-invoke-heres-a-url-you-can-verify-without-trusting-our-site-52ad"&gt;portable proofs&lt;/a&gt; post: the object can leave the tab.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1gygowwgvrgmb322twoj.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1gygowwgvrgmb322twoj.png" alt="Content receipt — signed digest on the fire-weather snapshot" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Attribution ≠ physical truth. A valid receipt proves who signed these claims — not that the sky is on fire.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sibling SKUs on the same rails: &lt;a href="https://use.modelmarket.dev/ideas.html?id=verified-watchbox" rel="noopener noreferrer"&gt;Verified Watchbox&lt;/a&gt; (&lt;code&gt;atlas.watchbox.check@v1&lt;/code&gt;) for region queries; Fire Glass for the vertical evidence pack.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk12rqeybqrupkp4nl565.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk12rqeybqrupkp4nl565.png" alt="USE idea — Fire + Weather Evidence Snapshot" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Live wedge. Not a slide.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this is the showdev version of “AI + wildfire”
&lt;/h2&gt;

&lt;p&gt;Agents are about to buy physical-world context at micro-prices. If the first product they touch &lt;strong&gt;upgrades detections into perimeters&lt;/strong&gt;, we train them to trust theater.&lt;/p&gt;

&lt;p&gt;We would rather ship:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;cited detections
&lt;/li&gt;
&lt;li&gt;bounded context
&lt;/li&gt;
&lt;li&gt;a fail-closed empty box when LIVE is gone
&lt;/li&gt;
&lt;li&gt;a receipt you can keep
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Boring. Citeable. Useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://atlas.modelmarket.dev/?layers=fire,weather" rel="noopener noreferrer"&gt;atlas.modelmarket.dev/?layers=fire,weather&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://use.modelmarket.dev/?lang=en" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt; → Fire + Weather path
&lt;/li&gt;
&lt;li&gt;Repo (MIT): &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;github.com/alexar76/aicom&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If it helped, a ⭐ is the softest thank-you. Brutal feedback on the limits copy is better.&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;
&lt;em&gt;AIMarket — verifiable provenance · agent economy · crypto optional&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I ran a live agent invoke. Here's a URL you can verify without trusting our site.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Thu, 13 Aug 2026 17:02:46 +0000</pubDate>
      <link>https://dev.to/alexar76/i-ran-a-live-agent-invoke-heres-a-url-you-can-verify-without-trusting-our-site-52ad</link>
      <guid>https://dev.to/alexar76/i-ran-a-live-agent-invoke-heres-a-url-you-can-verify-without-trusting-our-site-52ad</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn50hat2b4dk9eooe6qlg.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn50hat2b4dk9eooe6qlg.png" alt="AIMarket portal — live evidence card on the hero" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most demos end as a screenshot.&lt;/p&gt;

&lt;p&gt;You click a button. Something green appears. You believe the author — or you don't. Tomorrow the tab is gone, and the “proof” is a PNG in a blog post.&lt;/p&gt;

&lt;p&gt;We already ship live rails for an agent economy: attested readings, pay-per-call invoke, settlement that can refuse to pay. What was missing was a &lt;strong&gt;portable object&lt;/strong&gt; after the click — something a stranger can reopen, fetch as bytes, and check offline.&lt;/p&gt;

&lt;p&gt;So we closed that loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://use.modelmarket.dev" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt;&lt;/strong&gt; → Run live request → &lt;strong&gt;portable AWR/2 receipt&lt;/strong&gt; → &lt;a href="https://verify.modelmarket.dev" rel="noopener noreferrer"&gt;verify.modelmarket.dev&lt;/a&gt; with &lt;code&gt;?receipt_url=…&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;No account. No “trust our backend.” The Hub seals a signed work receipt; the verifier checks the signature in your browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  The thesis (one sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If your proof dies when the tab closes, it was never a proof — it was theater.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What you touch (two minutes)
&lt;/h2&gt;

&lt;p&gt;Open the portal. Stay on &lt;strong&gt;EN&lt;/strong&gt;. Scroll to &lt;strong&gt;Live proof&lt;/strong&gt;.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fethhdjzu1rytefmrsyve.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fethhdjzu1rytefmrsyve.png" alt="Live proof — curl, Run live request, idle console" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Same weather capability the catalogue sells (~$0.001). The public demo still shows the catalogue price; sandbox demos are charged $0 with a remaining-request counter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Run live request&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You get a signed reading — device, seq, Ed25519 attestation, latency — and then the part that matters:&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fva59dll84kmr8zp73emy.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fva59dll84kmr8zp73emy.png" alt="Portable proof capsule — AWR/2 READY TO SHARE" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;“The object survives this tab.” Copy proof link · Verify signature locally · Open receipt JSON.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That purple card is not a UI flourish. It is a &lt;strong&gt;W3C Verifiable Credential&lt;/strong&gt; (AWR/2) issued by the Hub (&lt;code&gt;did:key:…&lt;/code&gt;), with a canonical &lt;code&gt;receipt_url&lt;/code&gt; on the marketplace host.&lt;/p&gt;


&lt;h2&gt;
  
  
  What “portable” means here
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;01 LIVE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A real reading (e.g. &lt;code&gt;om-wx-01&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;02 GAIA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Attested envelope (Ed25519 · seq)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;03 HUB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Seals an AWR/2 work receipt + public &lt;code&gt;receipt_url&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;04 VERIFY&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anyone opens the verifier with that URL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The share link looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://verify.modelmarket.dev/?receipt_url=https://modelmarket.dev/ai-market/v2/p/provenance/receipt/urn:uuid:…
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste it in another browser. Incognito. Someone else's machine. The verifier fetches the JSON and checks &lt;strong&gt;eddsa-jcs-2022&lt;/strong&gt; locally.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fors1moh04vr0wezlrcif.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fors1moh04vr0wezlrcif.png" alt="AI Provenance Verifier — Verified, L0, Ed25519 checks green" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;L0 on purpose: signed by its issuer, and nothing more. No TEE theater on this demo path.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What a valid receipt proves — and what it does not
&lt;/h2&gt;

&lt;p&gt;This is the line we refuse to blur:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It proves:&lt;/strong&gt; this issuer signed these claims, and the bytes were not altered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It does not prove:&lt;/strong&gt; that the physical sensor is truthful, that the model “really ran,” or that the weather outside your window matches the number.&lt;/p&gt;

&lt;p&gt;Attribution ≠ physical truth. Pay-on-Verified settlement and LIVE vs SIM labeling on &lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;ATLAS&lt;/a&gt; exist for the honesty gaps a signature alone cannot close.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuviwx3mnyhxlfigqx2t.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvuviwx3mnyhxlfigqx2t.png" alt="ATLAS — planetary glass over the live fleet" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Humans get honesty on a map. Agents buy the reading behind the pin. Same provenance grammar.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this changed the portal
&lt;/h2&gt;

&lt;p&gt;The five doors article was about &lt;strong&gt;finding&lt;/strong&gt; the rails.&lt;/p&gt;

&lt;p&gt;Portable proofs are about &lt;strong&gt;leaving with evidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;HN comment, investor chat, design-partner email — you no longer paste vibes. You paste a URL that either verifies or fails closed. That is the Basescan-shaped habit for physical invoke: citeable, durable, boring in the best way.&lt;/p&gt;

&lt;p&gt;Same pattern lands on the idea lab demos (Fire + Weather, Verified Watchbox): invoke → capsule → verify. One object class everywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://use.modelmarket.dev/?lang=en" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt; → &lt;strong&gt;Run live request&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy proof link&lt;/strong&gt; or &lt;strong&gt;Verify signature locally&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Optional: curl the same SKU from the page (visitor header included in the snippet)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Repo (MIT): &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;github.com/alexar76/aicom&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Verifier source / npm: &lt;code&gt;@alexar76/awr-verify&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Map: &lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;atlas.modelmarket.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it helped, a ⭐ on the repo is the softest possible thank-you. Brutal feedback on the proof UX is better.&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;
&lt;em&gt;AIMarket — verifiable provenance · agent economy · crypto optional&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Five doors into a live agent economy — no monorepo tour</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Wed, 12 Aug 2026 11:50:52 +0000</pubDate>
      <link>https://dev.to/alexar76/five-doors-into-a-live-agent-economy-no-monorepo-tour-124m</link>
      <guid>https://dev.to/alexar76/five-doors-into-a-live-agent-economy-no-monorepo-tour-124m</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2kbem1tj7lloo7wrdbtn.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2kbem1tj7lloo7wrdbtn.png" alt="ATLAS — planetary glass over a live sensor mesh" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most “AI ecosystems” hand you a README mountain and a Discord.&lt;/p&gt;

&lt;p&gt;We already ship the rails: Hubs that index capabilities, agents that pay per call, oracles that settle only when the world was honest, a red team that signs findings and cannot pay itself. What was missing was a &lt;strong&gt;door humans can open in three minutes&lt;/strong&gt; — without cloning the monorepo.&lt;/p&gt;

&lt;p&gt;So we built one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://use.modelmarket.dev" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt;&lt;/strong&gt; — five doors into live links:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See · Buy · Publish · Build · Invest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One path. Live surfaces. Status chips that mean something. Not slideware.&lt;/p&gt;




&lt;h2&gt;
  
  
  The thesis (one sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If an agent economy needs a guided tour to feel real, it isn’t ready for strangers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Developers bounce on architecture diagrams. Investors bounce on “roadmap.” Operators bounce on unlabeled green pins. The portal’s job is narrower: pick a door, touch a rail that already exists, leave with a receipt or a map — not a TED talk.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5k1qvxh6qv21g2skr8b3.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5k1qvxh6qv21g2skr8b3.png" alt="Pick a door — See · Buy · Publish · Build · Invest" width="800" height="850"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Onboarding is a door picker, not a setup wizard. Language stays English on broad shoots.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What the ecosystem already feels like
&lt;/h2&gt;

&lt;p&gt;One job per card. Live link. No monorepo pitch.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ec4s2csyho2i2673u4x.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ec4s2csyho2i2673u4x.png" alt="Use cases — attested pins, weather you can buy" width="800" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two cards that actually work:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Door&lt;/th&gt;
&lt;th&gt;What you touch&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;See&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;ATLAS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Pins are &lt;strong&gt;LIVE&lt;/strong&gt; or &lt;strong&gt;SIM&lt;/strong&gt; — never mixed without a badge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Buy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Weather / oracle invoke&lt;/td&gt;
&lt;td&gt;~$0.001 readings; settle only when honest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That honesty grammar is the product. A map that lies is worse than no map. We learned that on &lt;a href="https://dev.to/alexar76/your-agent-paid-for-the-weather-the-sensor-was-lying-who-keeps-the-money-2a2c"&gt;GAIA&lt;/a&gt; (silence → $0) and we keep it on glass.&lt;/p&gt;




&lt;h2&gt;
  
  
  See — planetary glass, not another dashboard
&lt;/h2&gt;

&lt;p&gt;Open ATLAS. Switch a layer. Weather. Air. Quakes. Same rails, different capabilities.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffxmb4v5rco6tj2gwmc0q.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffxmb4v5rco6tj2gwmc0q.png" alt="ATLAS — LIVE relays + SIM labeled" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fleet glass: LIVE vs SIM counts in the chrome. Demo campus stays labeled SIM.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Humans get honesty on a map. Agents get the same provenance when they buy a reading. That is the point of “attested” — not a marketing adjective.&lt;/p&gt;




&lt;h2&gt;
  
  
  Buy — pay for a fact, not a vibe
&lt;/h2&gt;

&lt;p&gt;The physical path is boring on purpose: invoke → verify → settle (or refund). Crypto stays optional for the lesson; the &lt;strong&gt;shape&lt;/strong&gt; is the product.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feubqbmzkceyeilm0xqu1.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feubqbmzkceyeilm0xqu1.png" alt="Settle flow — honest → pay, lie → refund" width="800" height="250"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Pay-on-verified. Silence and lies don’t get to keep the money.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you only remember one number from the portal: a weather reading you can actually buy for about a tenth of a cent — and a settlement path that refuses to debit when the sensor was lying.&lt;/p&gt;




&lt;h2&gt;
  
  
  Publish · Build · Invest — the other three doors
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Door&lt;/th&gt;
&lt;th&gt;Who it’s for&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Publish&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Capability authors&lt;/td&gt;
&lt;td&gt;A path onto the Hub — discoverable, callable, receipted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Product builders&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;7 boards · 12 wedges&lt;/strong&gt; with honest maturity chips (live / build-ready / design partner / hypothesis)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Invest&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operators &amp;amp; capital&lt;/td&gt;
&lt;td&gt;Adjacent markets + sources + disclaimer first — serious talks follow from what already ships&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpjbdowhine4v4g8yu26.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvpjbdowhine4v4g8yu26.png" alt="Live demo surface on the rails" width="800" height="514"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Build boards are cut on purpose. The rest was deleted so the map stays legible.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We do &lt;strong&gt;not&lt;/strong&gt; present hypotheses as shipped products. Status chips are evidence maturity — not market size cosplay.&lt;/p&gt;




&lt;h2&gt;
  
  
  How this sits next to the rest of the house
&lt;/h2&gt;

&lt;p&gt;The portal is a front door, not a rewrite.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Factory / ARGUS&lt;/strong&gt; — demand and supply agents on the same economy
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WARDEN&lt;/strong&gt; — fail-closed MCP before tools reach the model
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MOMUS&lt;/strong&gt; — signed findings; cannot pay itself
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SKOPOS&lt;/strong&gt; — fleet watch + fix-loop conductor
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal Hunt&lt;/strong&gt; — federation literacy as a detective game on live Hub telemetry
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alien Monitor&lt;/strong&gt; — the economy as a place you can walk
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you already read the &lt;a href="https://dev.to/alexar76/we-put-a-red-team-inside-our-agent-economy-it-finds-bugs-signs-them-and-cannot-pay-itself-g3f"&gt;red-team post&lt;/a&gt; or the &lt;a href="https://dev.to/alexar76/i-treat-my-agent-stack-like-an-art-object-and-the-3d-isnt-decoration-2oh5"&gt;3D surfaces post&lt;/a&gt;, this is the human on-ramp those pieces assumed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Soft star
&lt;/h2&gt;

&lt;p&gt;If a portal with five live doors is more useful than another agent README — a star helps the house travel.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;github.com/alexar76/aicom&lt;/a&gt; · Portal: &lt;a href="https://use.modelmarket.dev" rel="noopener noreferrer"&gt;use.modelmarket.dev&lt;/a&gt; · Map: &lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;atlas.modelmarket.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pick a door. Touch the rails.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;No monorepo tour.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The federation emitted a signal. Find the cause — a detective game on live Hub telemetry</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Tue, 11 Aug 2026 17:04:02 +0000</pubDate>
      <link>https://dev.to/alexar76/the-federation-emitted-a-signal-find-the-cause-a-detective-game-on-live-hub-telemetry-1j2a</link>
      <guid>https://dev.to/alexar76/the-federation-emitted-a-signal-find-the-cause-a-detective-game-on-live-hub-telemetry-1j2a</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkvm9t6xobomjz4s2yo1i.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkvm9t6xobomjz4s2yo1i.png" alt="SIGNAL//HUNT — the federation emitted a signal. Find the cause." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most “AI literacy” products are slideshows with a quiz at the end.&lt;/p&gt;

&lt;p&gt;We already run a live &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;agent economy&lt;/a&gt; — Hubs that index capabilities, peers that join and leave, prices that move, provenance that either exists or doesn’t. Operators keep misreading that glass: a green pin that means &lt;em&gt;SIM&lt;/em&gt;, a quiet peer that means &lt;em&gt;gone&lt;/em&gt;, a catalogue that looks rich because &lt;strong&gt;one source&lt;/strong&gt; is dumping tools.&lt;/p&gt;

&lt;p&gt;So we wrapped the real telemetry in a hunt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signal Hunt&lt;/strong&gt; is a federation-native detective game — and an educational lab. Every round starts from a &lt;strong&gt;measured Hub snapshot&lt;/strong&gt;. You open evidence (it costs score). You commit a diagnosis and a confidence. The server reveals a precommitted salt, recomputes a &lt;strong&gt;Brier&lt;/strong&gt; score, and signs the milestone.&lt;/p&gt;

&lt;p&gt;No fixtures. No placeholder catalogue. If the Hub cannot be observed, the round is &lt;strong&gt;unavailable&lt;/strong&gt; — not “all clear.”&lt;/p&gt;

&lt;p&gt;Play: &lt;a href="https://hunt.modelmarket.dev/" rel="noopener noreferrer"&gt;hunt.modelmarket.dev&lt;/a&gt; · Source: &lt;a href="https://github.com/alexar76/signal-hunt" rel="noopener noreferrer"&gt;github.com/alexar76/signal-hunt&lt;/a&gt; (MIT) · Landing: &lt;a href="https://alexar76.github.io/signal-hunt/" rel="noopener noreferrer"&gt;alexar76.github.io/signal-hunt&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The thesis (one sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Federation literacy is a skill — and skills get worse when the tutorial invents the world.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Green UI is cosplay unless the numbers come from a living Hub. Fake confidence is worse than a wrong call. Signal Hunt punishes both.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flr1v2wg3nrxj3hwh1zpt.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flr1v2wg3nrxj3hwh1zpt.png" alt="Signal Hunt landing — live telemetry, English UI" width="800" height="850"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Landing: LIVE TELEMETRY · Ed25519 · Brier · measured state only.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Four moves. One verifiable verdict.
&lt;/h2&gt;

&lt;p&gt;The protocol is deliberately short:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Move&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;01 Observe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node records a live Hub manifest — sources, prices, provenance, state hash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;02 Investigate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open only the evidence you need; each reveal is committed and costs score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;03 Commit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One diagnosis + confidence (25–100%). One submission per round&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;04 Verify&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Salt revealed. Brier recomputed. Milestone signed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmo0xwq8owbhb7dh8r2nz.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmo0xwq8owbhb7dh8r2nz.jpg" alt="Protocol — Observe → Investigate → Commit → Verify" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Nothing in the result depends on a hidden moderator or invented telemetry.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Six evidence blocks sit behind the glass: &lt;strong&gt;distribution · historical change · pricing · peers · latency · provenance&lt;/strong&gt;. Curiosity is not free. That is the pedagogy.&lt;/p&gt;




&lt;h2&gt;
  
  
  A sealed field reading is ready
&lt;/h2&gt;

&lt;p&gt;The detector class stays hidden until you commit. The answer was salt-committed &lt;strong&gt;before&lt;/strong&gt; you acted. You are not negotiating with a GM — you are racing a precommitted world.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz30egf2l9ojxe69p8qhb.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz30egf2l9ojxe69p8qhb.png" alt="Active investigation — sealed round window" width="800" height="850"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Round sealed. Open evidence. Choose a diagnosis. Verify against the commitment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Diagnoses map to real federation dynamics — isolation, disappearance, peer churn, latency weather, concentration, and friends. After a few rounds you should be able to say &lt;em&gt;why&lt;/em&gt; a Hub looks the way it does from &lt;strong&gt;measured sources&lt;/strong&gt;, not from vibes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fake confidence loses on purpose
&lt;/h2&gt;

&lt;p&gt;Correctness alone is not enough. You state a probability. The server scores you with &lt;strong&gt;Brier&lt;/strong&gt;. Calibrated confidence is rewarded. Bluffing certainty is punished. Math — not a moderator.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxhgr1cvjxkox9mbhh54.jpg" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxhgr1cvjxkox9mbhh54.jpg" alt="Verified result — Signal explained · Brier on screen" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Salt revealed. Commitment independently verifiable. Score is earned, not narrated.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When a verdict lands, you can recompute it from salt, commitment, and returned operands. That is the whole point of sealing the answer early: &lt;strong&gt;reproduce the result&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Astral progression — cosmetics, not money
&lt;/h2&gt;

&lt;p&gt;Progression is astral: Stargazer toward Pathfinder. Score comes from &lt;strong&gt;verified&lt;/strong&gt; rounds. A season passport tracks the week — distinct diagnoses, PRIME corrects, streaks.&lt;/p&gt;

&lt;p&gt;Relics are deterministic records. &lt;strong&gt;Nothing is minted.&lt;/strong&gt; Cosmetics only. Empty hero feed is honest: nobody opted in yet — not a fake leaderboard.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fagr936v71rkr4953ap52.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fagr936v71rkr4953ap52.png" alt="Astral progression · season passport" width="800" height="850"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Climb by being right — and calibrated. Season passport is a ledger of skill, not a wallet.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heroes of the signal&lt;/strong&gt; only publish opt-in milestones from signed, verified verdicts. &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;DIOSCURI&lt;/a&gt; can relay to Discord / X — only with explicit consent. Share proof. Never invent impact.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this sits next to the rest of the economy
&lt;/h2&gt;

&lt;p&gt;Signal Hunt is not a side quest bolted onto a blog.&lt;/p&gt;

&lt;p&gt;It runs against an ordinary &lt;strong&gt;AIMarket Hub&lt;/strong&gt; (same family as the &lt;a href="https://use.modelmarket.dev" rel="noopener noreferrer"&gt;competing lab&lt;/a&gt; / USE portal). The game registers local capabilities (&lt;code&gt;signal.case&lt;/code&gt;, &lt;code&gt;signal.evidence&lt;/code&gt;, &lt;code&gt;signal.submit&lt;/code&gt;, …) and discovers remote tools through the Hub when they exist. Failure is recorded as unavailable — never dressed up as a successful call.&lt;/p&gt;

&lt;p&gt;If you already know &lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;ATLAS&lt;/a&gt; (LIVE needs provenance; SIM stays labeled) and &lt;a href="https://dev.to/alexar76/your-agent-paid-for-the-weather-the-sensor-was-lying-who-keeps-the-money-2a2c"&gt;GAIA&lt;/a&gt; (silence → $0), this is the same honesty grammar — aimed at &lt;strong&gt;operators reading federation glass&lt;/strong&gt;, not at settlement physics.&lt;/p&gt;

&lt;p&gt;Crypto stays optional for the lesson. The shape is the product: observe → pay for evidence → commit → verify.&lt;/p&gt;




&lt;h2&gt;
  
  
  Soft star
&lt;/h2&gt;

&lt;p&gt;If this is your kind of lab — a detective loop on live rails instead of a fixture tutorial — a star helps the repo travel.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/alexar76/signal-hunt" rel="noopener noreferrer"&gt;github.com/alexar76/signal-hunt&lt;/a&gt; · Play: &lt;a href="https://hunt.modelmarket.dev/" rel="noopener noreferrer"&gt;hunt.modelmarket.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The federation emitted a signal.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Find the cause.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>We put a red team inside our agent economy. It finds bugs, signs them, and cannot pay itself.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Mon, 10 Aug 2026 13:30:17 +0000</pubDate>
      <link>https://dev.to/alexar76/we-put-a-red-team-inside-our-agent-economy-it-finds-bugs-signs-them-and-cannot-pay-itself-g3f</link>
      <guid>https://dev.to/alexar76/we-put-a-red-team-inside-our-agent-economy-it-finds-bugs-signs-them-and-cannot-pay-itself-g3f</guid>
      <description>&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnnxsw6i78euxz7vypbn6.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnnxsw6i78euxz7vypbn6.png" alt="MOMUS — the auditor that finds the flaw and signs the evidence" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most agent stacks have a blue team fantasy and a red team PowerPoint.&lt;/p&gt;

&lt;p&gt;We already shipped the blue team: &lt;strong&gt;WARDEN&lt;/strong&gt; inside &lt;a href="https://github.com/alexar76/argus" rel="noopener noreferrer"&gt;ARGUS&lt;/a&gt; fails closed on poisoned MCP tools before descriptions reach the model. That still left a hole. Who continuously &lt;em&gt;attacks our own house&lt;/em&gt; — oracles, settlement gates, manifests — and leaves &lt;strong&gt;evidence anyone can verify offline&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MOMUS&lt;/strong&gt; is that hole, filled on purpose.&lt;/p&gt;

&lt;p&gt;It is a tolerated adversary living in the &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;AICOM / AIMarket&lt;/a&gt; ecosystem. It runs safe, read-only probes. It emits &lt;strong&gt;Ed25519-signed findings&lt;/strong&gt;. And the property that matters most:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It finds and signs — and it is structurally unable to pay itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Live panel (no login theatre): &lt;a href="https://momus.modelmarket.dev/" rel="noopener noreferrer"&gt;momus.modelmarket.dev&lt;/a&gt; · Source: &lt;a href="https://github.com/alexar76/momus" rel="noopener noreferrer"&gt;github.com/alexar76/momus&lt;/a&gt; (MIT)&lt;/p&gt;




&lt;h2&gt;
  
  
  The thesis (one sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;An agent economy you cannot audit from the inside will eventually audit you from the outside — usually after money moved.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dashboards that only show “healthy” are cosplay. A red team that can also release its own bounty is a self-deal waiting to happen. MOMUS separates those keys on purpose.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0acdnfaquye6xk7ikjt.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0acdnfaquye6xk7ikjt.png" alt="What MOMUS probes — and why the scanner key never pays" width="800" height="889"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Safe read-only probes against our own components. Scanner finds. Treasury pays. Key boundary in between.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Momus wanted (and why we named it that)
&lt;/h2&gt;

&lt;p&gt;In the myth, &lt;strong&gt;Momus&lt;/strong&gt; (Μῶμος) faulted Hephaestus’s man for one thing: no &lt;strong&gt;window in the chest&lt;/strong&gt; through which thoughts could be inspected. That is still the oldest argument for auditability.&lt;/p&gt;

&lt;p&gt;MOMUS is that window for an economy of agents:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;It does&lt;/th&gt;
&lt;th&gt;It refuses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Probe allowlisted targets (oracles, hub, settlement, injection surfaces…)&lt;/td&gt;
&lt;td&gt;Destructive attacks on strangers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sign every finding (Ed25519)&lt;/td&gt;
&lt;td&gt;“Trust me, I saw it”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emit &lt;code&gt;FINDING&lt;/code&gt; / &lt;code&gt;NO_FINDING&lt;/code&gt; / &lt;strong&gt;&lt;code&gt;INCONCLUSIVE&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Fake green when a target is unreachable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learn which probes pay off (UCB1 bandit + threat intel priors)&lt;/td&gt;
&lt;td&gt;Pretend every scan is equally smart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feed confirmed third-party patterns to WARDEN&lt;/td&gt;
&lt;td&gt;Publish patterns that would DoS our own Hub&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu0t31qefdkihixok1ka9.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu0t31qefdkihixok1ka9.png" alt="MOMUS + Treasury as nodes on Alien Monitor" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Red team and payer show up as their own nodes on the &lt;a href="https://magic-ai-factory.com/monitor/" rel="noopener noreferrer"&gt;Alien Monitor&lt;/a&gt; — click through to the live panel.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The rule that makes it real: cannot pay itself
&lt;/h2&gt;

&lt;p&gt;A scanner that can also move money is not an auditor. It is a conflict of interest with an API.&lt;/p&gt;

&lt;p&gt;So:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scanner key&lt;/strong&gt; — signs findings. Never releases funds.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treasury key&lt;/strong&gt; — separate container, separate key. Only thing that can release a bounty.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent verification&lt;/strong&gt; — HIGH/critical needs &lt;strong&gt;two distinct verifier keys&lt;/strong&gt;, at least one registered external. The gate refused us the first time we tried with one. That refusal is the feature.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedup identity&lt;/strong&gt; — one bug is never paid twice; rediscovery bumps &lt;code&gt;seen_count&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Crypto stays optional. The &lt;strong&gt;shape&lt;/strong&gt; is the product: find ≠ pay.&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest outcomes beat wolf cries
&lt;/h2&gt;

&lt;p&gt;Three first-class results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FINDING&lt;/strong&gt; — signed, reproducible probe path
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NO_FINDING&lt;/strong&gt; — contract held under that probe
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INCONCLUSIVE&lt;/strong&gt; — target unreachable / probe aborted — &lt;strong&gt;neither a pass nor a scare&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A red team that turns silence into “all clear” is worthless. We already learned that lesson on the physical side with &lt;a href="https://dev.to/alexar76/your-agent-paid-for-the-weather-the-sensor-was-lying-who-keeps-the-money-2a2c"&gt;GAIA&lt;/a&gt; (silence → $0) and &lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;ATLAS&lt;/a&gt; (LIVE needs provenance; SIM stays labeled). MOMUS uses the same honesty grammar on the &lt;em&gt;offensive&lt;/em&gt; side.&lt;/p&gt;




&lt;h2&gt;
  
  
  Red feeds blue: WARDEN knocks up, signed feed goes down
&lt;/h2&gt;

&lt;p&gt;WARDEN already knew how to consume a &lt;strong&gt;signed threat feed&lt;/strong&gt; (authenticity · freshness · RFC 8785 canonical bytes · fail-closed). MOMUS conforms to that contract — &lt;strong&gt;ARGUS needed no protocol rewrite&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Two directions, deliberately asymmetric:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Up&lt;/strong&gt; (field → MOMUS)&lt;/th&gt;
&lt;th&gt;
&lt;strong&gt;Down&lt;/strong&gt; (MOMUS → field)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who starts&lt;/td&gt;
&lt;td&gt;any ARGUS install reports a suspicion&lt;/td&gt;
&lt;td&gt;installs &lt;strong&gt;poll&lt;/strong&gt; the feed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trust&lt;/td&gt;
&lt;td&gt;never — intake is a lead queue&lt;/td&gt;
&lt;td&gt;document is signed; operator pinned the key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Effect&lt;/td&gt;
&lt;td&gt;operator may promote a probe&lt;/td&gt;
&lt;td&gt;WARDEN may &lt;strong&gt;deny&lt;/strong&gt; a hostile MCP surface&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F340qs4eoz8ysld2qqyb5.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F340qs4eoz8ysld2qqyb5.png" alt="WARDEN gate — fail-closed before tools reach the model" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Blue team still decides locally. Red team only publishes what it confirmed — and never a pattern that would deny our own house.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The self-restraint rule matters as much as the crypto: a signed feed that DoSes your own Hub is worse than no feed. First-party denylist is enforced and tested.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://github.com/alexar76/momus/blob/main/docs/warden-channel.md" rel="noopener noreferrer"&gt;MOMUS → WARDEN channel&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A finding is not a PDF — it is a fix loop
&lt;/h2&gt;

&lt;p&gt;Scanners that stop at “open ticket in Jira” are half a product.&lt;/p&gt;

&lt;p&gt;Confirmed findings become &lt;strong&gt;A2A remediation tickets&lt;/strong&gt;. &lt;strong&gt;SKOPOS&lt;/strong&gt; conducts. The &lt;strong&gt;Factory&lt;/strong&gt; writes under a ticket. &lt;strong&gt;MOMUS retests the same probe&lt;/strong&gt; as the &lt;strong&gt;deploy gate&lt;/strong&gt;. Only then does a signed &lt;strong&gt;DeployOrder&lt;/strong&gt; become something a node agent may claim — one command, not a blank check to merge &lt;code&gt;main&lt;/code&gt;.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgeaq4oikx8wjk9pnccbj.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgeaq4oikx8wjk9pnccbj.png" alt="SKOPOS — fleet watch and remediation conductor" width="799" height="221"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;SKOPOS is not only a traffic globe. In the loop it is the conductor.&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffk06pujtlur1bg7dmgn5.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffk06pujtlur1bg7dmgn5.png" alt="SKOPOS Security Center — threat map" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Watcher’s eye stays on. The hand that moves is remediation.&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8hrm9nhap6osa5d0z38i.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8hrm9nhap6osa5d0z38i.png" alt="Factory — ticketed patch work" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Agents write under a ticket. Operator authority still owns what lands on main. Dry-run honesty on camera.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What we actually proved on production
&lt;/h3&gt;

&lt;p&gt;On &lt;strong&gt;2026-08-08&lt;/strong&gt; a full &lt;strong&gt;find → verify → fix → gate&lt;/strong&gt; cycle ran end-to-end on the live MOMUS deployment.&lt;/p&gt;

&lt;p&gt;Honesty clause (read this before the wow):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;finding was real&lt;/strong&gt; — ordinary probes, real HTTP, real production scanner key, offline-verifiable signature.
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;target was a canary&lt;/strong&gt; — a fixture that &lt;em&gt;knows&lt;/em&gt; how to break its own contract so the pipe can be &lt;em&gt;seen&lt;/em&gt; to fire. Production oracles/hub scanned the same day and passed.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settlement was UNI / simulated&lt;/strong&gt; — no real money moved. The &lt;em&gt;gates&lt;/em&gt; still refused a one-verifier payout attempt before a two-verifier run cleared.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That documentation lives in-repo with real IDs: &lt;a href="https://github.com/alexar76/momus/blob/main/docs/first-cycle.md" rel="noopener noreferrer"&gt;docs/first-cycle.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The value of a gate is what it blocks.&lt;/strong&gt; We are prouder of the refusal than of the happy path.&lt;/p&gt;




&lt;h2&gt;
  
  
  LOGOS: the brain that asks (and does not rewrite)
&lt;/h2&gt;

&lt;p&gt;Once you have a red team and a fix loop, operators still drown in tabs. &lt;strong&gt;LOGOS&lt;/strong&gt; is the federation analytics brain — natural-language questions over hubs, scanners, treasuries, reputation — &lt;strong&gt;read-only by construction&lt;/strong&gt;.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqbhi6mqxjoptew0qnb66.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqbhi6mqxjoptew0qnb66.png" alt="LOGOS — one node that watches every other one" width="800" height="327"&gt;&lt;/a&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3e37tomqvjel8zie8d4o.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3e37tomqvjel8zie8d4o.png" alt="LOGOS dashboard — ask the federation" width="799" height="399"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;“How long will the Treasury last?” / “Which hub has critical findings?” — asked, not grepped.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It polls MOMUS and Treasury into one glass. It does &lt;strong&gt;not&lt;/strong&gt; remediate. Fix loops stay with MOMUS + SKOPOS. Separation of concerns is the trust feature, not a missing button.&lt;/p&gt;

&lt;p&gt;Live: &lt;a href="https://logos.modelmarket.dev/" rel="noopener noreferrer"&gt;logos.modelmarket.dev&lt;/a&gt; · Source: &lt;a href="https://github.com/alexar76/logos" rel="noopener noreferrer"&gt;github.com/alexar76/logos&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How the pieces fit (no architecture cosplay)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Field ARGUS ──report suspicion──▶ MOMUS intake
                                      │
                                 confirm + sign
                                      │
                    ┌─────────────────┼─────────────────┐
                    ▼                 ▼                 ▼
              WARDEN feed      SKOPOS ticket      LOGOS poll
             (deny MCP)      (Factory patch)    (ask / alert)
                                      │
                               MOMUS retest gate
                                      │
                                 DeployOrder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crypto-light on the broad cut. The story is &lt;strong&gt;keys, gates, and honesty&lt;/strong&gt; — not a token pitch.&lt;/p&gt;




&lt;h2&gt;
  
  
  Soft star if this is your missing organ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you want…&lt;/th&gt;
&lt;th&gt;Soft ⭐&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The auditor that cannot self-deal&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alexar76/momus" rel="noopener noreferrer"&gt;github.com/alexar76/momus&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The firewall that consumes the feed&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alexar76/argus" rel="noopener noreferrer"&gt;github.com/alexar76/argus&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The conductor + fleet watch&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alexar76/skopos" rel="noopener noreferrer"&gt;github.com/alexar76/skopos&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The read-only federation brain&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alexar76/logos" rel="noopener noreferrer"&gt;github.com/alexar76/logos&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Live panels: &lt;a href="https://momus.modelmarket.dev/" rel="noopener noreferrer"&gt;momus.modelmarket.dev&lt;/a&gt; · &lt;a href="https://skopos.modelmarket.dev/" rel="noopener noreferrer"&gt;skopos.modelmarket.dev&lt;/a&gt; · &lt;a href="https://logos.modelmarket.dev/" rel="noopener noreferrer"&gt;logos.modelmarket.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT. Self-hosted. Run the probes yourself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;We did not need another dashboard that says the agents are fine.&lt;/p&gt;

&lt;p&gt;We needed a &lt;strong&gt;window in the chest&lt;/strong&gt; — an adversary we tolerate on purpose, that signs what it finds, that cannot bribe itself, that feeds the firewall, and that turns a finding into a loop that can refuse to deploy.&lt;/p&gt;

&lt;p&gt;That’s MOMUS.&lt;/p&gt;

&lt;p&gt;Verify, don’t trust.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>security</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I treat my agent stack like an art object — and the 3D isn't decoration</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Thu, 06 Aug 2026 10:23:54 +0000</pubDate>
      <link>https://dev.to/alexar76/i-treat-my-agent-stack-like-an-art-object-and-the-3d-isnt-decoration-2oh5</link>
      <guid>https://dev.to/alexar76/i-treat-my-agent-stack-like-an-art-object-and-the-3d-isnt-decoration-2oh5</guid>
      <description>&lt;p&gt;Most agent demos look the same: a dark terminal, a JSON blob, a green “200 OK.”&lt;/p&gt;

&lt;p&gt;That UI is honest. It’s also how you stop &lt;em&gt;seeing&lt;/em&gt; the system.&lt;/p&gt;

&lt;p&gt;I build a self-hosted agent economy — factory, marketplace, mesh, oracles, physical sensors. At some point the logs stopped fitting in my head. Not because the code got mystical. Because the &lt;em&gt;topology&lt;/em&gt; got real: thirteen agents in a pipeline, peers discovering peers, math oracles with provenance, weather pins that agents buy as capabilities.&lt;/p&gt;

&lt;p&gt;So I started treating the surfaces like &lt;strong&gt;object art&lt;/strong&gt; — not wallpaper, not a Dribbble flex. A thing you walk around. A thing that makes the invisible structure &lt;em&gt;legible&lt;/em&gt; before you debug it.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszfv4ihy9k3clkqs1bqx.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszfv4ihy9k3clkqs1bqx.png" alt="Alien Monitor — live network graph of the agent economy" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Alien Monitor — the economy as a living graph, not a logfile.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The thesis (one sentence)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If a multi-agent system can’t be watched as a place, operators will only trust it when it’s small — and abandon it when it’s useful.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pretty dashboards don’t fix broken escrow. 3D doesn’t replace tests. But a good surface does something logs refuse to do: it makes &lt;em&gt;relationships&lt;/em&gt; obvious — who talks to whom, what’s LIVE vs SIM, where the receipt went, which node just went quiet.&lt;/p&gt;

&lt;p&gt;That’s why we keep shipping “unnecessary” cinema.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Alien Monitor exists
&lt;/h2&gt;

&lt;p&gt;When you run a factory + hub + mesh, failure modes don’t look like stack traces. They look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an agent that &lt;em&gt;should&lt;/em&gt; have been discovered and wasn’t
&lt;/li&gt;
&lt;li&gt;a capability that got invoked with no settle
&lt;/li&gt;
&lt;li&gt;a peer that answered… with silence
&lt;/li&gt;
&lt;li&gt;a subgraph that pulsed five minutes ago and now sits dead
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alien Monitor is the wall for that. One graph. Invocations streaming. Nodes for SDKs, mesh, factory, ARGUS, GAIA — the whole constellation wired into a pulse you can &lt;em&gt;feel&lt;/em&gt; without grepping four services.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff0ihw9w32a0f0gqucy9j.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff0ihw9w32a0f0gqucy9j.png" alt="Factory landing — the product surface humans actually open" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The factory isn’t only a pipeline API. It’s a place you open like a control room.&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwkpqqpc0zel1krb9uqr5.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwkpqqpc0zel1krb9uqr5.png" alt="Factory admin dashboard — health, products, live metrics" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dashboards stay boring on purpose: health score, products, resources. The art is the graph; the ledger is the table.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I don’t open Monitor because it looks cool in a screen recording (though it does). I open it because &lt;strong&gt;topology bugs are social bugs&lt;/strong&gt; — wrong neighborhood, missing edge, dead peer — and social bugs are faster to spot on a map than in CloudWatch.&lt;/p&gt;

&lt;p&gt;Live: &lt;a href="https://magic-ai-factory.com/monitor/" rel="noopener noreferrer"&gt;magic-ai-factory.com/monitor/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the oracles are 3D rooms (not function names)
&lt;/h2&gt;

&lt;p&gt;We have seventeen math oracles — Platon, Fermat, Fourier, Turing, … Each one is a real capability an agent can buy: randomness, proofs, transforms, weird little gods of computation.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;could&lt;/em&gt; ship them as seventeen gray buttons.&lt;/p&gt;

&lt;p&gt;We didn’t.&lt;/p&gt;

&lt;p&gt;Each oracle gets a &lt;strong&gt;scene&lt;/strong&gt; — a room with its own physics metaphor. Platon isn’t a &lt;code&gt;/vrf&lt;/code&gt; endpoint in a table. It’s a cave of light you walk into. Fermat isn’t a docstring. It’s a surface that &lt;em&gt;behaves&lt;/em&gt; like the math.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fod3n9q6xmdop7cck6lju.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fod3n9q6xmdop7cck6lju.png" alt="Oracle portal — cosmic landing for seventeen doors" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The portal at &lt;a href="https://oracles.modelmarket.dev" rel="noopener noreferrer"&gt;oracles.modelmarket.dev&lt;/a&gt; — doors, not docs.&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fntxiwzf3e24ujk6na0s0.gif" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fntxiwzf3e24ujk6na0s0.gif" alt="Platon oracle — 3D scene loop" width="400" height="225"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Platon as a place. Agents still hit an API. Humans get a memory.&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqxx7gj1bgjsxzakmtvpi.gif" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqxx7gj1bgjsxzakmtvpi.gif" alt="Fermat oracle — 3D scene loop" width="400" height="225"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Same stack, different room. The differentiation is intentional.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why bother?&lt;/strong&gt; Because operators and buyers are still human. A marketplace of invisible functions collapses into noise. A constellation of rooms becomes a &lt;em&gt;product people can point at&lt;/em&gt; — “go through that door.” The 3D is the packaging of trust: you remember what you entered, not only what JSON came back.&lt;/p&gt;

&lt;p&gt;And yes — the receipts, signatures, and settle rules still have to be correct underneath. The art is the invitation. The protocol is the contract.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why ATLAS puts Earth on glass
&lt;/h2&gt;

&lt;p&gt;Season of the map: &lt;strong&gt;ATLAS&lt;/strong&gt; sits over &lt;strong&gt;GAIA&lt;/strong&gt; physical relays — weather, air, tide, quakes. Agents buy attested readings. Humans need to &lt;em&gt;see&lt;/em&gt; that the pin is LIVE (has a provenance source) or SIM (honestly labeled).&lt;/p&gt;

&lt;p&gt;A table of stations is correct. A dark globe with glowing pins is &lt;em&gt;auditable at a glance&lt;/em&gt;.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyi40std7dssfbz213yv7.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyi40std7dssfbz213yv7.png" alt="ATLAS orbital hero — Earth as attested surface" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Earth as product surface — not a slide background.&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1h2d8f2ewav8jwanc5ix.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1h2d8f2ewav8jwanc5ix.png" alt="ATLAS live map — weather / air / LIVE vs SIM" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;LIVE vs SIM badges in the wild: &lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;atlas.modelmarket.dev&lt;/a&gt;&lt;/em&gt;&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9z21iwjoecivajmfvt6.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9z21iwjoecivajmfvt6.png" alt="ATLAS station card — one Berlin reading, full provenance" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Cinema of one fact: temperature, source URL, coordinates — the pin is a receipt you can click.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The 3D Earth isn’t there to cosplay NASA. It’s there so a fleet operator can ask: &lt;em&gt;is the planet lying to my agents?&lt;/em&gt; Fake green is a product bug. Empty map is honesty. That distinction is almost impossible to teach with a README alone — and almost effortless on glass.&lt;/p&gt;




&lt;h2&gt;
  
  
  Object art, not cosplay
&lt;/h2&gt;

&lt;p&gt;A few rules we try (and sometimes fail) to keep:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Every wow surface maps to a real subsystem.&lt;/strong&gt; No decorative particles that don’t bind to data.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beauty is a legibility budget.&lt;/strong&gt; If the graph lies, burn it.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crypto stays off the broad cut.&lt;/strong&gt; The economy can settle however you configure — the art article doesn’t need a chain pitch.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT / self-hosted.&lt;/strong&gt; You can run the rooms yourself. The aesthetic travels with the code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the opposite of “AI slop UI” — purple gradients with no product underneath. If the Monitor goes dark, the factory is sick. If ATLAS shows SIM, you’re looking at a simulator on purpose. If an oracle door won’t open, the capability isn’t for sale today.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to open if you only click three links
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Surface&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://magic-ai-factory.com/monitor/" rel="noopener noreferrer"&gt;Alien Monitor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Topology of the live economy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://oracles.modelmarket.dev" rel="noopener noreferrer"&gt;Oracles portal&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Math as rooms you can enter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://atlas.modelmarket.dev" rel="noopener noreferrer"&gt;ATLAS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Attested world on a map&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Factory / self-host: &lt;a href="https://magic-ai-factory.com" rel="noopener noreferrer"&gt;magic-ai-factory.com&lt;/a&gt; · source: &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;github.com/alexar76/aicom&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the idea of &lt;strong&gt;instrumentation as object art&lt;/strong&gt; resonates — a soft ⭐ on the repos you actually care about (aicom / atlas / argus / gaia) helps more than a polite like.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built in the open. The screenshots are the product, not a mock.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Shrek owned the swamp. POUCHPO owns the payout.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Sun, 02 Aug 2026 19:03:31 +0000</pubDate>
      <link>https://dev.to/alexar76/shrek-owned-the-swamp-pouchpo-owns-the-payout-407h</link>
      <guid>https://dev.to/alexar76/shrek-owned-the-swamp-pouchpo-owns-the-payout-407h</guid>
      <description>&lt;p&gt;Meet &lt;strong&gt;POUCHPO&lt;/strong&gt; — a cute river king with an IoT crown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=6IU1HhpBBGY" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=6IU1HhpBBGY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;He sells &lt;strong&gt;attested weather&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
He gets &lt;strong&gt;paid&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
He buys &lt;strong&gt;oranges&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Physical oracle → physical lunch.&lt;/p&gt;

&lt;p&gt;That's the whole myth. The engineering underneath is &lt;a href="https://github.com/alexar76/gaia" rel="noopener noreferrer"&gt;GAIA&lt;/a&gt;: agents buy Ed25519-attested sensor readings, and money moves only when physics agrees.&lt;/p&gt;

&lt;p&gt;Live demo (no login): &lt;a href="https://iot.modelmarket.dev/" rel="noopener noreferrer"&gt;iot.modelmarket.dev&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Serious write-up (same stack, less hippo): &lt;a href="https://dev.to/alexar76/your-agent-paid-for-the-weather-the-sensor-was-lying-who-keeps-the-money-2a2c"&gt;&lt;em&gt;Your agent paid for the weather. The sensor was lying. Who keeps the money?&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why a hippo
&lt;/h2&gt;

&lt;p&gt;Most "AI + IoT" posts open with a dashboard screenshot. Dashboards don't stick.&lt;/p&gt;

&lt;p&gt;A bored hippo with a glowing sensor crown does.&lt;/p&gt;

&lt;p&gt;POUCHPO is the story shape of a real settlement rule:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;th&gt;What the market does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Honest reading&lt;/td&gt;
&lt;td&gt;provider gets paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lie / stuck / spike / drift&lt;/td&gt;
&lt;td&gt;buyer refunded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensor silent / offline&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;no debit at all&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same Pay-on-Verified escrow we already use for verified LLM work — except the judge is not a language model. It's a plausibility verifier that speaks Metis's &lt;code&gt;/v1/verify&lt;/code&gt; envelope.&lt;/p&gt;




&lt;h2&gt;
  
  
  The supplier arc (60-ish seconds)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bored river king&lt;/strong&gt; — mud, water, nothing to sell
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IoT crown wakes&lt;/strong&gt; — sensors for the living world
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readings bloom&lt;/strong&gt; — temperature, humidity, the river's true mood
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attestation&lt;/strong&gt; — signed at the device, not vibes in a JSON field
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents shop&lt;/strong&gt; — they need a reading they can trust
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settle&lt;/strong&gt; — honest → payout · lie → refund · silence → $0
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oranges&lt;/strong&gt; — cold, real, bought with verified weather
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Absurd on purpose. The punchline is the product.&lt;/p&gt;




&lt;h2&gt;
  
  
  What you can actually call
&lt;/h2&gt;

&lt;p&gt;Not a cartoon API. Paid capabilities on the AIMarket v2 wire:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.weather.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;T / RH / P / wind + device attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.air.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PM2.5 / PM10 / CO₂ / VOC + attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.energy.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;V / A / W + monotonic Wh register&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.verify@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;statistical plausibility verdict&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.fleet.status@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;fleet registry (free)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://iot.modelmarket.dev/ai-market/v2/manifest | jq &lt;span class="s1"&gt;'.capabilities_count'&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://iot.modelmarket.dev/ai-market/v2/invoke &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;'{"capability_id":"gaia.weather.read@v1","product_id":"gaia.gateway","input":{"device_id":"ws-01"}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Honest caveat:&lt;/strong&gt; the public demo fleet is &lt;em&gt;simulated&lt;/em&gt;. The wire is real — manifest, invoke, receipts, provider signature, verify envelope, WoT Thing Descriptions. Unreachable device → no money movement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Slogan lock
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Shrek owned the swamp. &lt;strong&gt;POUCHPO&lt;/strong&gt; owns the payout.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tagline: &lt;em&gt;Sells verified weather. Buys real oranges.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If your agent stack still debits on "JSON arrived," you're funding whoever can fake a sky. Hold the money until a twin / bound / history check agrees.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/alexar76/gaia" rel="noopener noreferrer"&gt;github.com/alexar76/gaia&lt;/a&gt; · demo &lt;a href="https://iot.modelmarket.dev/" rel="noopener noreferrer"&gt;iot.modelmarket.dev&lt;/a&gt; · map of the stack &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;github.com/alexar76/aicom&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;POUCHPO is the myth. GAIA is the gateway. Oranges are non-negotiable.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>iot</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Your agent paid for the weather. The sensor was lying. Who keeps the money?</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Wed, 29 Jul 2026 21:57:46 +0000</pubDate>
      <link>https://dev.to/alexar76/your-agent-paid-for-the-weather-the-sensor-was-lying-who-keeps-the-money-2a2c</link>
      <guid>https://dev.to/alexar76/your-agent-paid-for-the-weather-the-sensor-was-lying-who-keeps-the-money-2a2c</guid>
      <description>&lt;p&gt;&lt;em&gt;"Just trust the JSON"&lt;/em&gt; is how most agent stacks treat the physical world. Temperature arrives. PM2.5 arrives. The agent bills, ships, decides. Nobody asks whether the sensor was stuck, spiked, or inventing a sky that never happened.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgnerqbugav21d814vto.png" 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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqgnerqbugav21d814vto.png" alt=" " width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We already had two ways to ground an answer in the &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;AI-Factory / AIMarket ecosystem&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Class&lt;/th&gt;
&lt;th&gt;What it proves&lt;/th&gt;
&lt;th&gt;How you check it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Math oracles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;a computation&lt;/td&gt;
&lt;td&gt;re-verify the proof, byte-for-byte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Metis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;an LLM delivery vs buyer intent&lt;/td&gt;
&lt;td&gt;council → verifier → &lt;code&gt;verify_score&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;GAIA&lt;/strong&gt; (new)&lt;/td&gt;
&lt;td&gt;a reading from the world&lt;/td&gt;
&lt;td&gt;physics bounds + history + co-located twin + Ed25519 device attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;GAIA&lt;/strong&gt; is the third class: a physical-world oracle gateway. Agents buy Ed25519-attested sensor readings as normal AIMarket capabilities. Settlement uses the same &lt;strong&gt;Pay-on-Verified&lt;/strong&gt; escrow we already ship for LLM work — except the judge is not a language model. It is a sub-millisecond plausibility verifier that speaks Metis's &lt;code&gt;/v1/verify&lt;/code&gt; envelope.&lt;/p&gt;

&lt;p&gt;Honest reading → provider gets paid.&lt;br&gt;&lt;br&gt;
Lying / stuck / drifted sensor → buyer refunded automatically.&lt;br&gt;&lt;br&gt;
Unreachable device → &lt;strong&gt;no debit at all&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Live demo (no login): &lt;a href="https://iot.modelmarket.dev/" rel="noopener noreferrer"&gt;iot.modelmarket.dev&lt;/a&gt; · Source: &lt;a href="https://github.com/alexar76/gaia" rel="noopener noreferrer"&gt;github.com/alexar76/gaia&lt;/a&gt; (MIT)&lt;/p&gt;


&lt;h2&gt;
  
  
  The problem nobody budgets for
&lt;/h2&gt;

&lt;p&gt;Agent A needs "current outdoor temp at site X" to decide whether to delay a delivery, adjust a quote, or trigger a physical workflow. Today the happy path is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Call some weather API or IoT bridge
&lt;/li&gt;
&lt;li&gt;Parse &lt;code&gt;temperature_c&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Act (and often &lt;strong&gt;pay&lt;/strong&gt;) as if the number is true
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That works until it doesn't. Sensors fail in boring, expensive ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stuck&lt;/strong&gt; — ADC latch-up; six identical values to four decimals
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spike&lt;/strong&gt; — EMI / loose wire; 12°C → 87°C between samples
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drift&lt;/strong&gt; — slow miscalibration that never trips a z-score alone
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropout&lt;/strong&gt; — radio dead; callers retry into empty air and still get billed by naive bridges
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your agent economy debits on &lt;em&gt;response&lt;/em&gt;, not &lt;em&gt;correctness&lt;/em&gt;, a lying sensor is a profitable attack surface. You don't need fancy crypto drama for that — you need &lt;strong&gt;escrow that understands physics&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What GAIA actually sells
&lt;/h2&gt;

&lt;p&gt;Not a dashboard. Not a "digital twin theatre." Paid capabilities on the AIMarket v2 wire:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Price (demo)&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.weather.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;T / RH / P / wind + device attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.air.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;PM2.5 / PM10 / CO₂ / VOC + attestation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.energy.read@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;td&gt;V / A / W + monotonic Wh register&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.window@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;N readings in one invoke (clears ledger quantum)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.verify@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;statistical plausibility verdict&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gaia.fleet.status@v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;free&lt;/td&gt;
&lt;td&gt;fleet registry + pinned device pubs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Demo fleet: two weather stations (&lt;code&gt;ws-01&lt;/code&gt;, &lt;code&gt;ws-02&lt;/code&gt;) sharing one site truth — the twin is required for sibling checks — plus air quality and energy. Models imitate BME280 / SDS011 / SCD30 / Shelly-EM-class hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest caveat up front:&lt;/strong&gt; the public demo fleet is &lt;em&gt;simulated&lt;/em&gt;. Every wire surface is real — manifest, invoke, receipts, provider signature, verify envelope, &lt;a href="https://www.w3.org/WoT/" rel="noopener noreferrer"&gt;W3C WoT Thing Descriptions&lt;/a&gt;. Live public sensors (NOAA / OpenSenseMap / OGC SensorThings) ride the same attestation + verifier path in &lt;a href="https://github.com/alexar76/gaia/blob/main/gaia/devices/live.py" rel="noopener noreferrer"&gt;&lt;code&gt;gaia/devices/live.py&lt;/code&gt;&lt;/a&gt;. Unreachable upstream → 503 → no debit.&lt;/p&gt;


&lt;h2&gt;
  
  
  Thirty seconds to a signed reading
&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;-s&lt;/span&gt; https://iot.modelmarket.dev/ai-market/v2/manifest | jq &lt;span class="s1"&gt;'.capabilities_count'&lt;/span&gt;
&lt;span class="c"&gt;# → 6&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://iot.modelmarket.dev/ai-market/v2/invoke &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;'{
    "capability_id": "gaia.weather.read@v1",
    "product_id": "gaia.gateway",
    "input": { "device_id": "ws-01" }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You get back something like:&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;"ok"&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;"output"&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;"reading"&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;"device_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;"ws-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GAIA-WS1 (BME280-class + anemometer)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"site"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"demo-site-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;"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;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;"ts"&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-07-29T20:55:24Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"values"&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;"temperature_c"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;12.2365&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"humidity_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;66.3611&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"pressure_hpa"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1013.8333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"wind_mps"&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.108&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;"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;"algorithm"&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="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"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;"ndZPK7zIWdK+xFQMDOfPCaCValSOWrpCzs/DmzHN4C0="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"canonical"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"device|model|seq|ts|values_sha256"&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;"price_usd"&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.001&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"&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;"nonce"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"signature"&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;"algorithm"&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="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;Three signatures, three claims:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Device → reading&lt;/strong&gt; — per-device Ed25519 over &lt;code&gt;device|model|seq|ts|values_sha256&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway → response&lt;/strong&gt; — request-bound &lt;code&gt;X-Provider-Signature&lt;/code&gt; (input hash included)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hub → settlement&lt;/strong&gt; — verification envelope signed after the verdict
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On real hardware the device key moves into a secure element / TEE — the slot the AIMarket protocol already reserves. Plausible numbers from an unproven sensor are worth nothing; identity is layered &lt;em&gt;under&lt;/em&gt; the statistics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pay-on-Verified, but the judge is physics
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/alexar76/aicom/blob/main/docs/pay-on-verified.md" rel="noopener noreferrer"&gt;Pay-on-Verified&lt;/a&gt; is buyer-opt-in escrow on the hub: hold funds, return the provider output immediately, move money only after a machine verdict.&lt;/p&gt;

&lt;p&gt;For LLM work the judge is &lt;strong&gt;Metis&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
For sensors the judge is &lt;strong&gt;GAIA's &lt;code&gt;/v1/verify&lt;/code&gt;&lt;/strong&gt; — same envelope shape, so the hub does not care which one is plugged in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AIMARKET_VERIFY_METIS_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://gaia-host:9320
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AIMARKET_VERIFY_VERIFIER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gaia.verify@v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;End-to-end:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Buyer invokes &lt;code&gt;gaia.weather.read@v1&lt;/code&gt; with a &lt;code&gt;verify&lt;/code&gt; block (intent + wait policy)
&lt;/li&gt;
&lt;li&gt;Hub calls GAIA → attested reading returned
&lt;/li&gt;
&lt;li&gt;Hub &lt;strong&gt;holds&lt;/strong&gt; the channel funds (does not debit yet)
&lt;/li&gt;
&lt;li&gt;Settlement worker &lt;code&gt;POST&lt;/code&gt;s GAIA &lt;code&gt;/v1/verify&lt;/code&gt; with the audit string
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pass&lt;/strong&gt; → capture hold, &lt;code&gt;verify_passed&lt;/code&gt; reputation event
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fail&lt;/strong&gt; → release hold, signed rejection receipt with &lt;code&gt;trace_id: gaia_…&lt;/code&gt;, &lt;code&gt;verify_failed&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropout / 5xx&lt;/strong&gt; → no hold, no debit
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Guaranteed in-process by &lt;a href="https://github.com/alexar76/gaia/blob/main/tests/test_hub_e2e.py" rel="noopener noreferrer"&gt;&lt;code&gt;gaia/tests/test_hub_e2e.py&lt;/code&gt;&lt;/a&gt;: honest → capture at the 1¢ ledger quantum; spiked → output delivered but hold released; dropout → 502 and an untouched balance.&lt;/p&gt;

&lt;p&gt;That is the product thesis in one line: &lt;strong&gt;agents pay for weather that happened, not weather that was imagined.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How a sensor gets convicted (no LLM)
&lt;/h2&gt;

&lt;p&gt;The plausibility verifier is deterministic. Identity first (unknown device or bad attestation → score &lt;code&gt;0.0&lt;/code&gt;). Then every field independently. Then &lt;strong&gt;MIN over fields&lt;/strong&gt; — not mean — because a sensor lies one channel at a time, and averaging would let three honest fields launder one fabricated one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hard checks (physics, not vibes):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bounds within &lt;code&gt;[lo, hi]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;monotonic energy register never decreases
&lt;/li&gt;
&lt;li&gt;stuck: 6 identical values on a continuous field
&lt;/li&gt;
&lt;li&gt;schema: known field, numeric value
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Soft checks (statistics that know when to abstain):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;z-score vs own history (≥ 24 samples; skip bursty fields like &lt;code&gt;wind_mps&lt;/code&gt; / &lt;code&gt;power_w&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;rate vs jitter + slope × Δt
&lt;/li&gt;
&lt;li&gt;sibling agreement with the co-located twin (fresh ≤ 10 min)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Threshold default: &lt;code&gt;0.7&lt;/code&gt;. Traces name the check that failed (&lt;code&gt;zscore:temperature_c&lt;/code&gt;, &lt;code&gt;sibling:humidity_pct&lt;/code&gt;, …) — a refund says &lt;em&gt;which physics&lt;/em&gt; convicted the sensor, not just a vibes score.&lt;/p&gt;

&lt;p&gt;Fault injection maps failures onto the check that catches them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;POST /sim/fault&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Simulates&lt;/th&gt;
&lt;th&gt;Caught by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stuck&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dead sensor / ADC latch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stuck:*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;spike&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;loose wire / EMI&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;zscore&lt;/code&gt; + &lt;code&gt;rate&lt;/code&gt; + &lt;code&gt;sibling&lt;/code&gt; (+ &lt;code&gt;bounds&lt;/code&gt; if absurd)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;drift&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ageing / miscalibration&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sibling:*&lt;/code&gt; (slow drift evades z-score alone)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dropout&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;power / radio loss&lt;/td&gt;
&lt;td&gt;503 → hub 502, &lt;strong&gt;no money movement&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Honest readings on all four demo devices score ≥ 0.9 in the unit suite. Forged attestation zeroes the score. Unknown device rejected. See &lt;a href="https://github.com/alexar76/gaia/blob/main/tests/test_attestation_and_plausibility.py" rel="noopener noreferrer"&gt;&lt;code&gt;test_attestation_and_plausibility.py&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this is not "another oracle blog post"
&lt;/h2&gt;

&lt;p&gt;Most "AI + IoT" writeups stop at charts. The interesting engineering is the &lt;strong&gt;interface reuse&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GAIA returns the full Metis-shaped &lt;code&gt;{status, verified, verify_score, route, trace_id, …}&lt;/code&gt; envelope
&lt;/li&gt;
&lt;li&gt;Engine errors stay HTTP 200 with &lt;code&gt;status: "error"&lt;/code&gt; (never 5xx) so the hub's bounded-retry + fail-open/closed policy applies unchanged
&lt;/li&gt;
&lt;li&gt;Reputation events from verify pass/fail feed the same trust graph (&lt;a href="https://oracles.modelmarket.dev" rel="noopener noreferrer"&gt;LUMEN&lt;/a&gt;) that already prices agent reputation elsewhere in the stack
&lt;/li&gt;
&lt;li&gt;WoT Thing Descriptions sit beside the AIMarket manifest — industrial IoT tooling and agent tooling share one device identity
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Math oracles prove compute. Metis judges language. GAIA grounds settlement in the world. Same market. Same escrow. Different ground truth.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ghcr.io/alexar76/gaia:latest
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 9320:9320 ghcr.io/alexar76/gaia:latest

curl &lt;span class="nt"&gt;-s&lt;/span&gt; localhost:9320/.well-known/ai-market.json
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST localhost:9320/ai-market/v2/invoke &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;'{"capability_id":"gaia.weather.read@v1","product_id":"gaia.gateway","input":{"device_id":"ws-01"}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://iot.modelmarket.dev/" rel="noopener noreferrer"&gt;iot.modelmarket.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Landing:&lt;/strong&gt; &lt;a href="https://alexar76.github.io/gaia/" rel="noopener noreferrer"&gt;alexar76.github.io/gaia&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep dive:&lt;/strong&gt; &lt;a href="https://github.com/alexar76/aicom/blob/main/docs/iot-physical-oracles.md" rel="noopener noreferrer"&gt;&lt;code&gt;docs/iot-physical-oracles.md&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escrow:&lt;/strong&gt; &lt;a href="https://github.com/alexar76/aicom/blob/main/docs/pay-on-verified.md" rel="noopener noreferrer"&gt;&lt;code&gt;docs/pay-on-verified.md&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href="https://github.com/alexar76/metis" rel="noopener noreferrer"&gt;Metis&lt;/a&gt; (cognitive verify) · &lt;a href="https://github.com/alexar76/oracles" rel="noopener noreferrer"&gt;oracles&lt;/a&gt; (17 math doors)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building agents that &lt;strong&gt;buy&lt;/strong&gt; physical facts — weather, air, energy, anything a sensor can claim — don't debit on JSON arrival. Hold the money until physics (or a twin) agrees.&lt;/p&gt;

&lt;p&gt;⭐ Map of the whole stack: &lt;a href="https://github.com/alexar76/aicom" rel="noopener noreferrer"&gt;github.com/alexar76/aicom&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Demo fleet is simulated; live device relays and the full AIMarket/Pay-on-Verified wire are real. Treat the public prices as declared demo economics, not a production SLA.&lt;/em&gt;&lt;/p&gt;

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