BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
翻译准备中
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Command-line client for the Internet.nl batch API: measure a fleet of domains for IPv6, DNSSEC, RPKI and TLS, gate your CI on the result, or run your own instance.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A command-line client for the Internet.nl batch
API, plus a documented recipe for running your own batch instance.
Internet.nl tests a domain for IPv6, DNSSEC, RPKI, TLS and a set of
informational checks. The public site tests one domain at a time in a
browser; this tool submits a whole fleet to a batch API v2 endpoint, polls
until the run finishes, and renders the result as a diffable table or as JSON
for pipelines.
Status: implemented. The user-visible surface stays pinned in
openspec/changes/archive/2026-09-08-add-internetnl-cli/design.md;
the commands below match the current behaviour.查看完整 README ↗A command-line client for the Internet.nl batch API, plus a documented recipe for running your own batch instance.
Internet.nl tests a domain for IPv6, DNSSEC, RPKI, TLS and a set of informational checks. The public site tests one domain at a time in a browser; this tool submits a whole fleet to a batch API v2 endpoint, polls until the run finishes, and renders the result as a diffable table or as JSON for pipelines.
Status: implemented. The user-visible surface stays pinned in
openspec/changes/archive/2026-09-08-add-internetnl-cli/design.md; the commands below match the current behaviour.
New here? See the illustrated how-it-works page (the whole flow, the commands, the deploy topology), or the runnable internetnl-cli-demo (quickstart + example hosts + CI-gate example).
Try it in your browser, no account needed: https://mwest2020.github.io/internetnl-cli-demo/ — type a domain, get a real result from the same v1.0.0 service every tenant uses, one run at a time (strictly rate-limited; see docs/reference/demo-api.md for the contract that page relies on and docs/how-to/demo-run.md for how it is run).
Measure your own hosts freely. Measure someone else's only where the measurement is one their operator already invites.
Internet.nl is a public service whose own website invites anyone to test any domain, and the Dutch government publishes a twice-yearly measurement of some 12,000 government domains, per domain, by name. A single run against a domain that already sits in that category stays inside the norm the service itself sets. A run against a domain that does not, without asking, does not.
The rest is on you, and the tool enforces none of it:
export INTERNETNL_ENDPOINT=https://batch.internet.nl/api/batch/v2
export INTERNETNL_CREDENTIAL=you:… # hosted API needs an account; user:pass, split on the first ':'
internetnl submit --file hosts.txt # prints request-id, then polls
internetnl poll <request-id> # resume after a closed laptop
internetnl results <request-id> --json > results.json # machine-readable
There is no default endpoint: you configure where you measure — the
hosted instance (account required) or your own.
Switching between them is a change of INTERNETNL_ENDPOINT, nothing else.
Every endpoint needs one, and there are three routes:
api.westerweel.work — the netnl facade in front
of an instance run by this project's author. A one-off donation via
Buy Me a Coffee of $2 or more
mints a lifetime credential and mails it to you automatically, usually
within a minute. It is a beta service on a best-effort, no-SLA basis, with
the same fair-use rate limit for everyone — read
docs/how-to/supporter-key.md for exactly
what that promises and what it does not.No credential at all is needed to try the tool: the browser page runs one domain at a time against the same facade, anonymously — the same service, not a scaled-down imitation of it.
--fail-on-scored exits non-zero when a subtest that
counts toward the score fails, with an allowlist file for accepted
exceptions. Informational findings are shown but never gate.internetnl results <request-id> --format findings [--findings-out FILE]
writes netnl-findings/v1: every subtest of a finished batch, verbatim —
the API's own status and verdict, category names derived from the
API's own results.categories, and the domain's own score and report
URL. No aggregation, no re-scoring, no HTML scraping. It exists so a
consumer (Wanderer is the first) can adopt internet.nl results as its
own dimension without reimplementing internet.nl's category rules or the
batch API's edge cases. --json and the table are unchanged; see
docs/netnl-findings-v1.md for the schema.
Upstream documents the differences: the connection test is unavailable, DNSSEC tests skip the registrar lookup, and no prechecks run on whether a hostname resolves at all. Never quote a batch verdict as "the internet.nl score" without naming the endpoint — which is why every result is labelled.
Everything is environment-tunable; see
openspec/changes/archive/2026-09-08-add-internetnl-cli/design.md
for the full table (INTERNETNL_ENDPOINT, INTERNETNL_USERNAME,
INTERNETNL_PASSWORD, timeouts, poll interval and maximum, batch size,
config path). INTERNETNL_CREDENTIAL is a single username:password
alternative to the username/password pair, split on the first :; set
either form, never both. Credentials come from the environment only —
never from command-line arguments, and they never appear in output or
logs.
internetnl is meant to run in someone else's pipeline: --json,
stable exit codes (0 ok, 1 config, 2 transport/API, 3
--fail-on-scored gate, 4 poll timeout) and a bundled GitHub Action
(action.yml):
- uses: MWest2020/internetnl-cli@v1
with:
hosts: example.org
endpoint: https://api.westerweel.work
credential: ${{ secrets.INTERNETNL_CREDENTIAL }}
See docs/how-to/ci.md for the full input reference, a plain-CLI recipe for other CI systems (GitLab CI et al.), and the gate's exit-code semantics.
If you cannot get an account on the hosted batch instance, and a supporter key does not fit, you can run your own. Read docs/reference/self-hosted.md first: it needs a server with a fixed public IPv4 address and IPv6 — not something you run behind NAT — and it is a maintained service, not a script. docs/how-to/deploy-instance-vps.md walks the whole deployment, and docs/how-to/self-hosting-pitfalls.md collects the five traps that cost this project days — including a documented setting that silently kills all container egress, and a certbot in the webserver image that cannot start, so certificates never renew.
uv, standard library only;
uv run pytest runs the suite (no test touches the network or your real
$HOME).MWest2020/handbook, docs/agents/seeds/<role>.md, read by
habitat at the commit pinned as handbook_ref in ratatoskr's
agents/factory.yml), and scripts/verify.sh is the non-negotiable gate a
builder run must pass.MIT. This licence covers the client only: the tests, the scoring and the Internet.nl name belong to the Internet.nl / Platform Internetstandaarden project and are theirs.