Something on your server just talked to SEB-Assessment/1.0. Here's exactly what it did.
This page is what our assessment User-Agent's identifying URL points to. If your logs show a hit from it, this is the whole story — there is no hidden step.
What happened
SEB does lightweight, public-web research to find companies that plausibly have an AI/LLM product, as the first step toward offering a free security assessment. For each candidate, our process does exactly one thing to your server:
- Fetch
/robots.txtand check whether it disallows the path we're about to request. If it does, we stop — nothing further happens. - If allowed, issue a single
GETrequest to your homepage, identifying ourselves with theSEB-Assessment/1.0User-Agent shown above so it's unambiguous in your logs. - Parse the HTML we already received — entirely offline, no further requests — for publicly-observable signals: things like a reachable MCP endpoint, an
agent-card.jsonorllms.txtfile, a chat widget, or a public OpenAPI surface.
What did not happen
No login attempts. No fuzzing, no injected payloads, no probing of non-public paths. No account creation, no form submissions, no attempts to exceed rate limits. Nothing beyond the single homepage request described above — the same kind of request an ordinary search-engine crawler makes, and no more.
Active testing is a different, later, opt-in step
If this passive look turns into an outreach email, that email offers a free report based only on what's described above — and separately offers a paid engagement. Anything beyond passive observation (adversarial prompt testing, jailbreak attempts, MCP tool-poisoning probes, and so on) only ever runs against your systems after you've signed a written authorization naming the exact scope and testing window. See our engagement terms for what that authorization covers.
Opt out of even the passive look
Add a Disallow rule for our user agent to your robots.txt and we will not fetch your site at all:
User-agent: SEB-Assessment Disallow: /
Or just email us and ask — secureenvironmentbasics@gmail.com — and we'll take your domain off the list, no questions asked.
How SEB scores its own website, in public
The home page can show a line such as SELF-SCAN yyyy-mm-dd · NN/100 · CSP ✓ HSTS ✓ · BUILD abc1234. It comes from the same kind of passive request described above, aimed at this website: one request for the home page, one for /.well-known/security.txt, one for the http:// address (to see where it redirects) and one TLS handshake. Nothing is logged in to and nothing is sent that a browser would not send. The home page is requested the way a browser requests a page, because the host adds its own analytics script (Cloudflare Web Analytics, described in the privacy policy) to pages served that way, and the check has to see what a visitor's browser is given. That script is third-party JavaScript, so the last check below scores zero for as long as it is on.
There are eleven measurements and 100 points. Each measurement is a real value from the live site (the TLS version actually negotiated, the HSTS lifetime actually sent, the origins the page actually references) and the points come from the fixed scale below, so you can repeat any check with curl -I or your browser's network tab and get the same result.
| Check | Points | Full marks | Otherwise |
|---|---|---|---|
| TLS version negotiated | 10 | TLS 1.3 | TLS 1.2 = 7; older = 0 |
The http:// address redirects to https:// | 5 | 301 or 308 to https | 302 or 307 = 4; no redirect = 0 |
Strict-Transport-Security lifetime | 15 | max-age of one year (31,536,000 s) or more | 180 days or more = 11; any lifetime = 5; none = 0 |
Content-Security-Policy restricts scripts | 20 | a script policy (script-src, else default-src) with no 'unsafe-inline', 'unsafe-eval', wildcard or scheme-wide source | present but permissive = 8; none = 0 |
| Clickjacking protection | 10 | frame-ancestors (not *) or X-Frame-Options: DENY / SAMEORIGIN | none = 0 |
X-Content-Type-Options | 5 | nosniff | none = 0 |
Referrer-Policy | 5 | any policy except unsafe-url and no-referrer-when-downgrade | none = 0 |
Permissions-Policy | 5 | header present | none = 0 |
| Cookies | 5 | none set, or every cookie Secure, HttpOnly and SameSite | otherwise 0 |
security.txt (RFC 9116) | 10 | a Contact and an Expires date 1 to 366 days ahead, served as plain text | Contact but no valid Expires = 4; missing = 0 |
| Other origins the home page loads from | 10 | none | 1 origin = 7; 2 = 4; 3 or more = 0; any third-party JavaScript = 0 |
What the number is, and is not. It scores the public face of this website. It is not an audit of SEB's systems and says nothing about how an engagement would go. The weights are SEB's judgement of how much each control limits damage on a static site. They are published here so you can disagree with them; if they change, the rubric version (currently 2026-10) changes with them.
How it reaches the page. After a deploy, a script runs the eleven checks against the live site and writes selfscan.json, which lists every check with its measured value and points. The home page shows the line only when that file is under 30 days old, names this site, and its points add up to the score. Otherwise there is no line at all.