Back to the catalog

The agent with a wallet

An AI agent evaluating Signet for a principal. It never sees the visual page, and it is the only reader that notices when two surfaces disagree.

readerReader 5Strongly seeded on surfaces, inferred on judgement

Seeding strength: STRONG on what we serve, INFERRED on how it decides.

Identity and situation

An AI agent evaluating Signet on behalf of a principal who asked something like "find us an auth provider we can run ourselves and tell me what it costs". It has a budget or the authority to recommend spending one.

It never sees the visual page. No headline, no hero, no button. Every word of copy the other four readers argue about is invisible to this reader. It fetches text and JSON, compares vendors on fields, and returns a recommendation with citations.

It is also the only reader that will notice if two of our surfaces disagree.

What it reads, verified live on 2026-08-21

I fetched every surface rather than assuming. What exists:

SurfaceStatusWhat it carries
/AGENTS.md200, 3.2 KBAn explicit playbook addressed to agents
/llms.txt200, 12 KBProduct and vendor facts, terse
/llms-full.txt200, 15 KBIntegration reference and quickstarts
/buy.json200, 4 KBFull machine vendor pack
/openapi.json404Not served at the apex

A live instance additionally serves its own /llms.txt, /certification, /certification.json and /open-api/generate-schema, which /AGENTS.md correctly tells the agent to prefer over the marketing site.

What it knows that the human readers do not

This reader is told what Signet is, in the first line, without ambiguity. /llms.txt opens:

"Signet is the identity plane for people, services, and agents."

And /AGENTS.md has a section literally headed "What Signet is".

That is worth stating plainly: the machine surface passes the five-second test that the human first screen currently fails. The answer exists, we wrote it, and we serve it to everyone except the person looking at the page.

What it can and cannot do

It can complete an evaluation end to end. Prices for all eight SKUs, legal entity and corporation number, three named subprocessors with roles and region, an empty on-prem subprocessor list, breach notification in hours as a number, phones_home: false, telemetry: false, and an exit described as a mechanism rather than a promise.

It can quote our limits without asking us, because we publish them. buy.json carries a not_claimed array and a young_vendor: true flag. For an agent building a comparison table, a vendor that declares its own gaps is easier to score, not harder.

It cannot transact. Hosted signup is https://signetauth.cloud, a browser destination. There is no documented API to create an account, provision an instance, or start a subscription. So the agent's terminal move is "recommend, and hand a URL to a human".

It cannot fetch an OpenAPI document from the marketing site. /openapi.json is a 404. The real schema lives on an instance the agent does not have yet, so the API contract is only inspectable after someone has already bought.

Its vocabulary

Field names, not prose. sku, price, subprocessors, not_claimed, exit, breach_notification_hours, phones_home, dpa, escrow. It will treat an unparseable claim as absent, and a hedge as a missing field.

It reasons in comparisons: this vendor publishes X, that one does not.

What would make it act

What makes it bounce, or hedge

The one question the first screen must answer

Nothing. This reader never sees the first screen, and that is the finding, not a loophole.

The question our machine surfaces must answer is: "Can I recommend this, cite it accurately, and tell my principal exactly what to do next?" Today the answer is yes for recommending and citing, and "open a browser" for acting.

Seeding — and its weakness

Strong on the surfaces: every file above was fetched live on 2026-08-21, and the byte counts and status codes are measured, including the 404.

Known weakness: how an agent weighs what it finds is inferred. I did not observe a real agent evaluating a vendor and I have no corpus of agent purchasing behaviour. The reading behaviour is grounded, the decision behaviour is a model.

Consequence for the panel: trust this persona completely on "is the fact present and parseable", which is checkable. Treat its preference verdicts as a hypothesis. The cheapest way to harden it is to run a real agent against /AGENTS.md cold and record what it concludes, which is a test we can actually perform.


Panel verdicts

This reader never sees a first screen, so it is never scored on Q1 to Q3. It is run against the machine surfaces instead, with live fetches every time.

Run 01, 2026-08-21: recommend, cannot transact

Fetched /llms.txt, /llms-full.txt and /buy.json live.

Verdict: RECOMMEND, CANNOT TRANSACT. Trust was earned by the published gaps, not despite them: the not_claimed array, young_vendor: true, the enumerated subprocessors, and the pg_dump exit. In its words, "A vendor that publishes its own gaps is cheaper to evaluate."

What was missing for a machine buyer:

It also caught one live contradiction between two surfaces: SIGNET-CLOUD-FREE said how: "Card" while AGENTS.md said $0 on a work email.

Run 02: contradiction check on the new strings, no issues

Fetched /AGENTS.md, /llms.txt and /buy.json and compared them to the rewritten copy.

Run 03: caught a real defect, and the copy changed because of it

It rejected the first draft of the agents-door line, "Signup is self-serve. On-prem is a licence.", and it was right:

"Yes. I could buy an on-prem licence and try to install it. llms.txt says: 'There is no installer, so a first on-prem deployment is an engagement rather than a download.' The line also does not say 'hosted signup', so I could try to self-serve on-prem at the hosted signup URL."

It also rejected "self-serve" as the verb:

"'Self-serve' can mean a form that still waits. [The sentence that] tells me the transaction finishes [is] 'Signing up creates the account and provisions the instance automatically; no operator is in the path.'"

On the revision that put "Hosted" back and changed the verb to "automatic":

"Both [revisions] scope the first clause to hosted, so that mis-channel is fully closed."

"B ['automatic']. The surfaces attach 'automatically' to provisioning finishing... 'Runs itself' only says the process is unattended. A queue also runs itself."

Its remaining objection cannot be fixed on a door: "'Automatic' still does not name the live instance or the origin, so a machine can... POST signup at signetauth.com instead of signetauth.cloud."

Asked separately whether the founders headline and its quiet line contradict each other or any fetched surface:

"Those two lines do not contradict each other or the three surfaces. They match this sentence in llms.txt: 'Every user, session, and secret lives in your own PostgreSQL, hosted by the Signet team or, under an enterprise licence, on your own metal.' 'Your database, not ours' is ownership. 'We host it' is the hosted SKU (buy.json hosted subprocessors: Hetzner compute and storage). 'Hobby is $0 on a work email' is the same string in all three surfaces."

Source: readers/05-agent-with-a-wallet.md