llms.txt Content
<!doctype html>
<html lang="en">
<head>
<!-- 0. THEME — apply saved theme before first paint (default: light).
Runs on every page (incl. public homepage) so a refresh never
falls back to the CSS :root dark default. -->
<script>
(function () {
try {
var t = localStorage.getItem("agent9-theme") || "light";
document.documentElement.setAttribute("data-theme", t);
} catch (e) {
document.documentElement.setAttribute("data-theme", "light");
}
})();
</script>
<!-- 1. GOOGLE ANALYTICS
GA is NOT loaded here. It loads at runtime only on public
(marketing / docs / legal) routes via src/utils/analytics.ts — the
authenticated product (/platform, /onboarding) never loads GA, so we
don't send customers' dashboard activity to Google. -->
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Positioning: IAM for AI agents (see · govern · prove) -->
<title>node9 — IAM for your AI agents</title>
<meta
name="description"
content="See every tool your AI agents can call — Slack, GitHub, email, your database — and allow, review, or block each one, on every machine, with an audit trail. Free posture scan to start. Works with Claude Code, Cursor, Codex & every agent."
/>
<link rel="canonical" href="https://node9.ai/" />
<!-- 4. LOGO & FAVICON -->
<link rel="icon" type="image/png" href="/favicon.png" />
<link rel="apple-touch-icon" href="/favicon.png" />
<!-- 5. SOCIAL CARDS (OpenGraph + Twitter/X) -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://node9.ai/" />
<meta property="og:title" content="node9 — IAM for your AI agents" />
<meta
property="og:description"
content="Your AI agents already have access to Slack, GitHub, email — and your database. node9 decides wh