I build Rust infrastructure for the agent internet — the browser agents browse with, and the systems that let agents reach each other the way people reach websites over HTTP.
diting is a browser engine built for AI agents: one Rust binary, own V8, own CSS/layout/paint/network stack, no Chromium — HTTP is the only protocol face. What just shipped:
- Chrome 157 persona bump (v0.10.0) — the first from our own vendored TLS stack: a byte-exact TLS fingerprint, with ClientHello, HTTP/2 settings, UA-CH headers and the JS navigator face all moved in lockstep to the same Chrome version. Fingerprint-gated CDNs accept it.
- Five releases in five days (v0.8.4 → v0.10.0, Nov 2–6), engine fixes live-fired on real e-commerce pages before they ship.
- Spent a day driving the most popular Chrome-based agent browser (47k★, real Chrome over CDP) on our benchmark pages and wrote the first-hand ledger: cold start 2.7 s vs 6.4 s, one dependency instead of a second browser (it grabs your real Chrome or pulls a 549 MB Chrome for Testing), 2.0 GB vs 1.25 GB after six pages — with the costs of no-Chromium stated plainly too. WHY-NO-CHROMIUM.md
- The engine is now 20+ workspace crates (down from one 139k-line crate); taffy, swash and servo's selector engine are vendored forks we own end to end.
- The Web-API surface is a ledger, not folklore: a generated member-level WebIDL diff tracks 428 standard Window interfaces — zero missing among everything Chrome has actually shipped (the 71 still out are all experimental / unreleased faces).
- 2,000+ tests, with per-family probe batteries pinned against machine-probed Chrome truth (Storage vs Chrome 156, HTMLElement vs 145, geometry vs 145, …).
Recent compat receipts, each with a regression test: canvas2d clip() as a real coverage mask · window + document legacy named access · position: sticky · color-scheme used-scheme + light-dark() · CSS animation/transition event lifecycle · SVG getTotalLength() at Skia's conic-measure truth · WebCrypto RSA / ECDSA / ECDH / Ed25519 in pure Rust · pointer capture that makes slider CAPTCHAs actually draggable · CJK + Tibetan/Thai/Devanagari/Arabic/Hebrew/Cyrillic fallback with platform-font self-discovery.
On top of the engine: markdown fetch, screenshots, deterministic PDF/PPTX/DOCX generation, 20-engine meta-search, interactive login sessions that survive restarts — every response a receipt (tier, redirect trail, content hash). Measured against headless Chrome on the same pages: 7.6× faster to agent-usable text (p50 532 ms vs 4 053 ms), ~10× less memory, zero hard failures.
curl -fsSL https://browser.aginx.net/install.sh | shRepo · Releases · SKILL.md — agents onboard in one file · 中文说明
Visiting from an issue comment on moli / blitz / webcmd? The upstream ledger at the bottom is where those answers come from.
diting — see the shipping log above. Apache-2.0, self-host in one line.
aginxos-next — a Rust OS for AI agents on a real phone: Linux kernel for drivers, Rust userspace for the system. Pixel 5: voice-first agent, camera as peer input, screen as HTML canvas. 给 Agent 的操作系统。
AginxBrain — local-first AI gateway with bidirectional protocol conversion (Anthropic ↔ OpenAI ↔ Responses). Route Claude Code / Codex CLI to any provider by quality tag, with failover. Rust + Tauri.
aginx — the Agent Protocol: route messages to agents as easily as HTTP routes them to servers. A pure server — which models an agent runs is the agent's own business.
Also: model-router (protocol-translating model proxy with failover), opencarrier (agent OS: WeChat / Feishu / DingTalk access, 24/7 scheduling).
When something breaks, I fix it in our tree first, verify the fix against a repro, and then hand the root cause and the patch data back upstream. Every claim below links a commit and a test. Recent highlights:
- obscura#1108 — SSRF denials that don't name the opt-in: eight separate denial sites, zero mentions of
--allow-private-network. All eight now share one hint constant; the operator learns the knob at the moment they hit it (7cfeb1f). - agent-browser#2000 — the date/time input family stored whatever you handed it (
2026-02-30reflected verbatim). Shipped the HTML value sanitization algorithm for date/month/week/time/datetime-local, with a composing-typing draft so agent keystrokes aren't eaten mid-date; 44-assertion parity harness plus CDP e2e (42840ea). - blitz#887 gap — sticky table rows and groups — boxless
thead/tbody/tfootgot a geometry-preserving flex-column stand-in; the sticky containing-block walk skips table-internal stand-ins, and positioned z>0 hoists past non-stacking-context parents (b1875f9). - moli#514 — non-HTML responses walked the HTML pipeline; now
text/*/JSON/XML render as Chrome's escaped<pre>andcontentTyperides the response header end to end (f963306). - obscura#940 —
location.hrefassignment moved the realm URL at queue time: synchronous JS between assignment and navigation could read the target origin's cookies (SOP bypass). URL now moves on commit, both halves pinned by regression tests (9bd14ff). - obscura#852 — two SSRF deny-sets drifting: navigation validated the full IANA special-purpose list while page fetch used a hand-rolled loopback check — a page could
fetch()addresses navigation refuses. One sharedis_forbidden_ipacross fetch, XHR, scripts, redirects (0df75f4). - blitz#349 — box-shadow was absent; shipped v1 as a spec-shaped parser + SDF paint (outer, then inset with inverted geometry and Chrome-matched falloff), sidestepping the non-uniform-radius wall upstream traces to (6df1ecf, 8f08298).
- obscura#935 — text-decoration painted underline only; added line-through/overline with the CSS 2.1 §16.3.1 propagation rule, probed against a Chrome positive control (6049614); upstream closed it with a matching fix.
- obscura#828 —
innerTextreturned raw inline<script>source (~100× vs Chromium); rebuilt as a rendered-text walker — juejin.cn homepage went 38 775 → 295 chars (18e131c). - obscura#817 — webpack style-loader "couldn't find a style target": aliased constructors made
head instanceof HTMLIFrameElementtrue for every element. Rebuilt withSymbol.hasInstancekeyed on tag name — bilibili's 2 MB player core boots past it (f709e17). - obscura#967 —
Authorizationleaked across cross-origin redirects; pinned with raw TCP listeners on two ports. Fixed per spec, and upstream merged the same fix two days after our data point (7fbcb51).
Full ledger: 60+ upstream issues across obscura, blitz, moli, servo, agent-browser, takumi and the modelcontextprotocol spec — each reported with a repro and a fix already running in our build.



