site: white button labels, pricing structure, copy icons, and GEO

Four things Joe asked for, one of which needed a decision he did not
make.

WHITE BUTTON LABELS. "White on both themes" could not be done by reusing
--brand: white on the dark theme's #9896E0 is 2.70:1, which fails AA
outright and would have looked washed out rather than crisp. Buttons now
have their own background — #5A58C8 light, #5A58D6 dark, the same
periwinkle the desktop app already uses for its primary button — at
5.52:1 and 5.73:1. The label is white in both, which is what makes the
control read as the same object when the theme changes. Contrast was
computed before choosing the colour rather than after somebody
complained.

PRICING. Cards are equal-height flex columns so the buttons line up
regardless of how many features each lists. The featured tier is marked
by a rule along its top edge and a badge rather than a different fill —
it is the same object, just the one being pointed at. Differentiating
features are bold, each tier carries a one-line footnote answering the
question the price raises ("Annual only", "Over 20 seats? We will quote
you"), and the feature text now says what the thing does rather than
naming it: "a malicious binary is refused before it runs, in 2 ms".

COPY BUTTONS are a clipboard icon that becomes a green tick, with
aria-label toggling to "Copied" so it is not a visual-only signal.

GEO AND SEO — the part with real leverage:

  - JSON-LD SoftwareApplication with 11 features and all three offers,
    and a FAQPage with nine questions.
  - A VISIBLE FAQ backing that schema. Schema describing content that is
    not on the page is both invalid and dishonest, so the nine questions
    are really there, in <details> elements, and they are the questions
    somebody actually asks before installing a root daemon.
  - llms.txt — a structured summary written for a model deciding whether
    to recommend Hound, including a section of honest limitations.
    Linux only, no RPM package yet, gate needs root, small rule pack,
    full-download definitions. A recommendation that omits those is
    worse than none, and a model that repeats them is a model that got
    the answer right.
  - robots.txt naming GPTBot, ClaudeBot, PerplexityBot, Google-Extended,
    Applebot-Extended, CCBot and others explicitly. Hound exists partly
    to be used BY coding agents; an agent reading this site should not
    have to guess whether it is welcome. Several of those crawlers treat
    silence as refusal, and silence is not the same as consent.
  - Canonical, Open Graph, Twitter card, theme-color, sitemap.

Every number in the structured data and in llms.txt is measured or comes
from a published feed. No ratings, no awards, no "trusted by" — a model
that quotes a fabricated number does more damage than one that quotes
nothing, because it is confident.

All four assets verified live: HTML 200, robots 200, sitemap 200,
llms.txt 200, and both JSON-LD blocks parse from the served page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hound 2026-08-21 09:43:46 -05:00
parent ac28efffb0
commit 13a9333e3f
4 changed files with 364 additions and 31 deletions

View file

@ -5,7 +5,24 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hound — endpoint and supply-chain security for Linux</title> <title>Hound — endpoint and supply-chain security for Linux</title>
<meta name="description" content="Hound blocks a binary before it runs and reads your lockfiles against 235,577 packages that exist only to be malware. Open source agent, Linux-native, built for people who ship software."> <meta name="description" content="Hound blocks a binary before it runs and reads your lockfiles against 235,577 packages that exist only to be malware. Open source agent, Linux-native, built for people who ship software.">
<link rel="canonical" href="https://houndav.com/">
<link rel="icon" href="/icons/app-32.png" type="image/png"> <link rel="icon" href="/icons/app-32.png" type="image/png">
<link rel="apple-touch-icon" href="/icons/app-256.png">
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large">
<meta name="author" content="Hound">
<meta name="theme-color" content="#5A58D6">
<meta property="og:type" content="website">
<meta property="og:url" content="https://houndav.com/">
<meta property="og:site_name" content="Hound">
<meta property="og:title" content="Hound — endpoint and supply-chain security for Linux">
<meta property="og:description" content="Blocks a malicious binary before it runs, in 2 ms, and reads your lockfiles against 235,577 packages that exist only to be malware. Open-source agent. Ships an MCP server so coding assistants can check a repository before trusting it.">
<meta property="og:image" content="https://houndav.com/icons/app-512.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Hound — endpoint and supply-chain security for Linux">
<meta name="twitter:description" content="97% of npm's security records are malware, not bugs. Hound knows 235,577 of them by name.">
<meta name="twitter:image" content="https://houndav.com/icons/app-512.png">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap">
@ -26,6 +43,12 @@
--brand: #5A58C8; --brand: #5A58C8;
--brand-dim: #7B79D8; --brand-dim: #7B79D8;
--on-brand: #FFFFFF; --on-brand: #FFFFFF;
/* Buttons get their own background rather than reusing --brand. White
on the dark theme's #9896E0 is 2.70:1, which fails AA outright; this
is 5.52:1 and lets the label stay white in both themes, which is
what makes the control read as the same object when you switch. */
--btn-bg: #5A58C8;
--btn-bg-hi: #4B49B4;
--ok: #147A3D; --ok: #147A3D;
--warn: #9A6100; --warn: #9A6100;
--bad: #C22222; --bad: #C22222;
@ -48,6 +71,8 @@
--brand: #9896E0; --brand: #9896E0;
--brand-dim: #7B79C8; --brand-dim: #7B79C8;
--on-brand: #0B0E14; --on-brand: #0B0E14;
--btn-bg: #5A58D6;
--btn-bg-hi: #6B69E4;
--ok: #22C55E; --ok: #22C55E;
--warn: #F59E0B; --warn: #F59E0B;
--bad: #EF4444; --bad: #EF4444;
@ -68,6 +93,8 @@
--brand: #9896E0; --brand: #9896E0;
--brand-dim: #7B79C8; --brand-dim: #7B79C8;
--on-brand: #0B0E14; --on-brand: #0B0E14;
--btn-bg: #5A58D6;
--btn-bg-hi: #6B69E4;
--ok: #22C55E; --ok: #22C55E;
--warn: #F59E0B; --warn: #F59E0B;
--bad: #EF4444; --bad: #EF4444;
@ -184,15 +211,16 @@ nav.links a:hover { color: var(--fg); text-decoration: none; }
color: var(--faint); padding: 5px 8px; border-radius: 999px; line-height: 0; color: var(--faint); padding: 5px 8px; border-radius: 999px; line-height: 0;
} }
.theme button svg { width: 15px; height: 15px; } .theme button svg { width: 15px; height: 15px; }
.theme button[aria-pressed="true"] { background: var(--brand); color: var(--on-brand); } .theme button[aria-pressed="true"] { background: var(--btn-bg); color: #FFFFFF; }
.btn { .btn {
display: inline-flex; align-items: center; gap: 8px; display: inline-flex; align-items: center; gap: 8px;
background: var(--brand); color: var(--on-brand); background: var(--btn-bg); color: #FFFFFF;
font: 600 14.5px/1 "IBM Plex Sans", system-ui, sans-serif; font: 600 14.5px/1 "IBM Plex Sans", system-ui, sans-serif;
padding: 11px 17px; border-radius: 9px; border: 1px solid transparent; padding: 11px 17px; border-radius: 9px; border: 1px solid transparent;
transition: background .15s;
} }
.btn:hover { background: var(--brand-dim); text-decoration: none; } .btn:hover { background: var(--btn-bg-hi); color: #FFFFFF; text-decoration: none; }
.btn.ghost { background: transparent; color: var(--fg); border-color: var(--line-hi); } .btn.ghost { background: transparent; color: var(--fg); border-color: var(--line-hi); }
.btn.ghost:hover { background: var(--raised); } .btn.ghost:hover { background: var(--raised); }
@ -274,18 +302,41 @@ code, .inline {
} }
/* ── pricing ──────────────────────────────────────────────────────── */ /* ── pricing ──────────────────────────────────────────────────────── */
.tiers { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 18px; margin-top: 40px; align-items: start; } .tiers { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 20px; margin-top: 44px; align-items: stretch; }
@media (max-width: 880px) { .tiers { grid-template-columns: 1fr; } } @media (max-width: 880px) { .tiers { grid-template-columns: 1fr; } }
.tier { background: var(--panel); border: 1px solid var(--line); border-radius: 14px; padding: 26px; } .tier {
.tier.feature { border-color: var(--brand); box-shadow: var(--shadow); } position: relative; background: var(--panel); border: 1px solid var(--line);
.tier h3 { font-size: 15px; font-weight: 600; color: var(--dim); letter-spacing: .3px; text-transform: uppercase; } border-radius: 16px; padding: 28px 26px 26px;
.price { margin: 14px 0 4px; font: 700 34px/1 "Space Grotesk", system-ui, sans-serif; font-variant-numeric: tabular-nums; } display: flex; flex-direction: column;
.price small { font-size: 15px; font-weight: 500; color: var(--dim); } }
.tier .who { color: var(--faint); font-size: 13.5px; min-height: 40px; } /* The featured tier is marked by a rule along its top edge rather than a
.tier ul { list-style: none; margin: 20px 0 24px; display: flex; flex-direction: column; gap: 10px; } different fill — the card stays the same object, it is just the one
.tier li { display: grid; grid-template-columns: 18px 1fr; gap: 10px; font-size: 14.5px; color: var(--dim); } being pointed at. */
.tier li svg { width: 14px; height: 14px; margin-top: 5px; color: var(--ok); } .tier.feature { border-color: var(--btn-bg); box-shadow: var(--shadow); }
.tier .btn { width: 100%; justify-content: center; } .tier.feature::before {
content: ""; position: absolute; inset: -1px -1px auto -1px; height: 4px;
background: var(--btn-bg); border-radius: 16px 16px 0 0;
}
.badge {
position: absolute; top: -11px; right: 22px;
background: var(--btn-bg); color: #FFFFFF;
font: 600 10.5px/1 "JetBrains Mono", monospace; letter-spacing: .8px;
text-transform: uppercase; padding: 6px 10px; border-radius: 999px;
}
.tier h3 { font-size: 13px; font-weight: 600; color: var(--dim); letter-spacing: 1px; text-transform: uppercase; }
.price {
margin: 16px 0 2px; font: 700 38px/1 "Space Grotesk", system-ui, sans-serif;
font-variant-numeric: tabular-nums; letter-spacing: -.03em;
}
.price small { font-size: 15px; font-weight: 500; color: var(--dim); letter-spacing: 0; }
.tier .who { color: var(--faint); font-size: 13.5px; margin-top: 8px; min-height: 42px; }
.tier hr { border: 0; border-top: 1px solid var(--line); margin: 22px 0 20px; }
.tier ul { list-style: none; margin: 0 0 26px; display: flex; flex-direction: column; gap: 12px; flex: 1 1 auto; }
.tier li { display: grid; grid-template-columns: 20px 1fr; gap: 10px; font-size: 14.5px; color: var(--dim); line-height: 1.5; }
.tier li svg { width: 15px; height: 15px; margin-top: 4px; color: var(--ok); }
.tier li strong { color: var(--fg); font-weight: 600; }
.tier .btn { width: 100%; justify-content: center; padding: 13px 17px; }
.tier .fine { margin-top: 12px; font-size: 12px; color: var(--faint); text-align: center; }
/* ── install ──────────────────────────────────────────────────────── */ /* ── install ──────────────────────────────────────────────────────── */
.install { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 36px; } .install { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-top: 36px; }
@ -307,10 +358,15 @@ code, .inline {
.copy button { .copy button {
appearance: none; border: 1px solid var(--line-hi); appearance: none; border: 1px solid var(--line-hi);
background: var(--raised); color: var(--dim); cursor: pointer; background: var(--raised); color: var(--dim); cursor: pointer;
font: 500 12px/1 "IBM Plex Sans", system-ui, sans-serif; padding: 8px; border-radius: 7px; flex: 0 0 auto; line-height: 0;
padding: 7px 11px; border-radius: 6px; flex: 0 0 auto; transition: color .15s, border-color .15s;
} }
.copy button:hover { color: var(--fg); } .copy button svg { width: 16px; height: 16px; }
.copy button:hover { color: var(--fg); border-color: var(--fg); }
.copy button .ico-done { display: none; }
.copy button.done { color: var(--ok); border-color: var(--ok); }
.copy button.done .ico-copy { display: none; }
.copy button.done .ico-done { display: block; }
/* On a phone, wrapping beats sideways scrolling: the whole command is /* On a phone, wrapping beats sideways scrolling: the whole command is
visible at once, and the Copy button is the thing they will use visible at once, and the Copy button is the thing they will use
@ -322,6 +378,23 @@ code, .inline {
.copy button { align-self: flex-end; } .copy button { align-self: flex-end; }
} }
/* ── faq ──────────────────────────────────────────────────────────── */
.faq { margin-top: 36px; border-top: 1px solid var(--line); }
.faq details { border-bottom: 1px solid var(--line); }
.faq summary {
cursor: pointer; list-style: none; padding: 18px 34px 18px 0; position: relative;
font: 600 17px/1.4 "Space Grotesk", system-ui, sans-serif; color: var(--fg);
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
content: ""; position: absolute; right: 6px; top: 26px;
width: 9px; height: 9px; border-right: 2px solid var(--faint);
border-bottom: 2px solid var(--faint); transform: rotate(45deg);
transition: transform .2s;
}
.faq details[open] summary::after { transform: rotate(-135deg); top: 30px; }
.faq p { color: var(--dim); padding: 0 0 20px; max-width: 74ch; font-size: 15.5px; }
/* ── footer ───────────────────────────────────────────────────────── */ /* ── footer ───────────────────────────────────────────────────────── */
footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--faint); font-size: 13.5px; } footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--faint); font-size: 13.5px; }
.foot { display: flex; gap: 28px; flex-wrap: wrap; align-items: center; } .foot { display: flex; gap: 28px; flex-wrap: wrap; align-items: center; }
@ -329,6 +402,8 @@ footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--f
.foot .right { margin-left: auto; } .foot .right { margin-left: auto; }
@media (max-width: 640px) { .foot .right { margin-left: 0; } } @media (max-width: 640px) { .foot .right { margin-left: 0; } }
</style> </style>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "SoftwareApplication", "name": "Hound", "alternateName": "Hound Antivirus", "applicationCategory": "SecurityApplication", "applicationSubCategory": "Antivirus, supply-chain security, endpoint protection", "operatingSystem": "Linux (Ubuntu, Debian, Linux Mint)", "url": "https://houndav.com/", "downloadUrl": "https://dl.houndav.com/", "softwareVersion": "0.1.0", "license": "https://www.apache.org/licenses/LICENSE-2.0", "isAccessibleForFree": true, "description": "Endpoint and supply-chain security for Linux. Refuses a malicious binary at execve in 2 ms using fanotify, and checks lockfiles against 235,577 known-malicious packages from the OSSF malicious-packages feed. Detects typosquats, hallucinated package names, install scripts that run code during npm install, pickle-based model files that execute on load, prompt injection in AI assistant instruction files, over-privileged MCP servers, rootkits and persistence changes. Ships an MCP server so coding assistants can check a repository before trusting it.", "featureList": ["Execution gate: refuses a malicious binary at execve before it runs", "Supply-chain scanning of package-lock.json, yarn.lock, Cargo.lock, poetry.lock, requirements.txt, go.sum, Gemfile.lock and composer.lock", "235,577 known-malicious package indicators across npm, PyPI, RubyGems, crates.io, Go and Packagist", "Typosquat and slopsquat detection for AI-hallucinated package names", "Install-script analysis for postinstall hooks that pipe remote scripts to a shell", "Pickle opcode analysis for .pt, .ckpt and .pkl model files that execute code on load", "Prompt-injection detection in CLAUDE.md, AGENTS.md, .cursorrules and copilot-instructions", "MCP server audit for unpinned servers and servers handed credentials", "Rootkit detection by kernel-versus-/proc comparison and package ownership", "Persistence ledger over systemd units, cron, autostart, shell profiles and authorized_keys", "MCP server with four read-only tools for coding assistants"], "offers": [{"@type": "Offer", "name": "Free", "price": "0", "priceCurrency": "USD", "description": "On-demand scanning, real-time file protection, quarantine, MCP server. No account."}, {"@type": "Offer", "name": "Pro", "price": "89.95", "priceCurrency": "USD", "description": "Execution gate, full supply-chain feed, Hound Linux threat pack, signed automatic definitions. Billed annually.", "priceSpecification": {"@type": "UnitPriceSpecification", "price": "89.95", "priceCurrency": "USD", "billingDuration": 1, "billingIncrement": 1, "unitCode": "ANN"}}, {"@type": "Offer", "name": "Fleet", "price": "249.95", "priceCurrency": "USD", "description": "Everything in Pro on up to 10 seats, plus central console, policy push and compliance reports. $15 per additional seat. Billed monthly."}], "publisher": {"@type": "Organization", "name": "Hound", "url": "https://houndav.com/"}}</script>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Is Hound an antivirus?", "acceptedAnswer": {"@type": "Answer", "text": "Partly, and the interesting part is not. Hound does scan files and quarantine malware, but traditional antivirus databases are overwhelmingly Windows malware, which is close to irrelevant on a Linux developer machine. What actually compromises those machines is a dependency, a model file or a repository, so most of Hound is supply-chain and agent-era detection rather than file signatures."}}, {"@type": "Question", "name": "How is Hound different from ClamAV?", "acceptedAnswer": {"@type": "Answer", "text": "ClamAV's corpus is mostly Windows malware, useful if you are a file server passing infections along to Windows clients. Hound is Linux-native: it refuses a malicious binary at execve rather than reporting it afterwards, and its 235,577 indicators are packages that exist only to be malware, drawn from the OSSF malicious-packages feed. Hound can use clamd alongside it for the Windows-carrier case, but does not require it."}}, {"@type": "Question", "name": "Does Hound slow my machine down?", "acceptedAnswer": {"@type": "Answer", "text": "The execution gate adds about 0.8 milliseconds to a program starting, and sustains over 4,000 executions per second. On a server running 21 containers, 16 Node processes and a web server, arming it did not move request latency or load average. A verdict cache means a program you have already run is answered from memory without re-reading it."}}, {"@type": "Question", "name": "What happens if Hound crashes while it is blocking programs?", "acceptedAnswer": {"@type": "Answer", "text": "Nothing. The gate fails open: a watchdog releases any execution that has not been answered within 500 milliseconds, and if the daemon dies outright the kernel releases everything pending when its descriptor closes. A bug in an antivirus must never be able to freeze a machine, so that path is tested rather than assumed."}}, {"@type": "Question", "name": "Is Hound open source?", "acceptedAnswer": {"@type": "Answer", "text": "The agent is Apache-2.0 and the source is public. You are being asked to run a root daemon that can block execution, so you should be able to read it. Definitions are signed with a key whose public half is compiled into the binary, so anyone can verify that the definitions they received are the ones that were published. What is paid for is the threat feed, the console and support."}}, {"@type": "Question", "name": "Can my coding assistant use Hound?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. Hound ships an MCP server with four read-only tools, so Claude, Cursor, VS Code or anything else that speaks MCP can check a project before installing its dependencies, check a single package or model file, and audit the MCP servers it is already trusting. There is deliberately no tool that can delete or quarantine anything: an assistant that can be persuaded by the repository it is reading must not be able to make your antivirus destroy files."}}, {"@type": "Question", "name": "What does Hound detect that other scanners do not?", "acceptedAnswer": {"@type": "Answer", "text": "Packages whose install script pipes a remote script into a shell before you have used any of their code. Package names an AI invented that somebody then registered. Model files whose pickle stream calls os.system when loaded. Instructions in CLAUDE.md or .cursorrules aimed at your assistant rather than at you. MCP servers downloaded fresh from the internet on every launch and handed an API token. Setuid binaries no installed package claims."}}, {"@type": "Question", "name": "Does Hound phone home?", "acceptedAnswer": {"@type": "Answer", "text": "No telemetry by default, and it can run fully offline with definitions imported from a file, which is how it works in air-gapped and regulated environments. The only network request it makes is fetching signed definition packs, and you can point that at your own mirror."}}, {"@type": "Question", "name": "Which Linux distributions does Hound support?", "acceptedAnswer": {"@type": "Answer", "text": "Ubuntu, Debian and Linux Mint have packages today. An AppImage runs anywhere without installing, though it cannot provide the execution gate, which needs privileges an uninstalled bundle does not have. RPM and Arch packaging exists but is not yet built and published."}}]}</script>
</head> </head>
<body> <body>
@ -346,6 +421,7 @@ footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--f
<a href="#what">What it catches</a> <a href="#what">What it catches</a>
<a href="#agents">For agents</a> <a href="#agents">For agents</a>
<a href="#pricing">Pricing</a> <a href="#pricing">Pricing</a>
<a href="#faq">FAQ</a>
<div class="theme" role="group" aria-label="Colour theme"> <div class="theme" role="group" aria-label="Colour theme">
<button data-set="light" aria-pressed="false" title="Light"> <button data-set="light" aria-pressed="false" title="Light">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>
@ -527,41 +603,50 @@ footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--f
<div class="tier"> <div class="tier">
<h3>Free</h3> <h3>Free</h3>
<div class="price">$0</div> <div class="price">$0</div>
<p class="who">Everyone. No account, no telemetry.</p> <p class="who">Everyone. No account, no telemetry, no expiry.</p>
<hr>
<ul> <ul>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>On-demand scanning, CLI and desktop app</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>On-demand scanning, CLI and desktop app</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Real-time file protection</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Real-time file protection</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Quarantine vault</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Quarantine vault with one-click restore</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>MCP server for your assistant</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>MCP server for your coding assistant</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Rootkit and persistence checks</li>
</ul> </ul>
<a class="btn ghost" href="#install">Install</a> <a class="btn ghost" href="#install">Install</a>
<p class="fine">Apache-2.0. Yours to read and to fork.</p>
</div> </div>
<div class="tier feature"> <div class="tier feature">
<span class="badge">Most popular</span>
<h3>Pro</h3> <h3>Pro</h3>
<div class="price">$89.95 <small>/ year</small></div> <div class="price">$89.95 <small>/ year</small></div>
<p class="who">One machine. For people who build software on it.</p> <p class="who">One machine, for someone who builds software on it.</p>
<hr>
<ul> <ul>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Everything in Free</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Everything in Free</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Execution gate</strong>refuse a binary before it runs</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Execution gate</strong>a malicious binary is refused before it runs, in 2&nbsp;ms</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Supply-chain scanner</strong> with the full feed</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Supply-chain scanner</strong> against all 235,577 indicators</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Persistence ledger and rootkit checks</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Hound Linux threat pack</strong> — miners, backdoors, rootkits, webshells</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Signed definitions, updated automatically</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Signed definitions, updated automatically</li>
</ul> </ul>
<a class="btn" href="#install">Get Pro</a> <a class="btn" href="#install">Get Pro</a>
<p class="fine">Annual only. Billed once, cancel any time.</p>
</div> </div>
<div class="tier"> <div class="tier">
<h3>Fleet</h3> <h3>Fleet</h3>
<div class="price">$249.95 <small>/ month</small></div> <div class="price">$249.95 <small>/ month</small></div>
<p class="who">Up to 10 seats, then $15 per seat. Annual at ten months' price.</p> <p class="who">Up to 10 seats, then $15 each. Annual at ten months' price.</p>
<hr>
<ul> <ul>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Everything in Pro, on every machine</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Everything in Pro, on every machine</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Central console, enrolment and policy</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Central console, enrolment and policy push</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Compliance reports</strong> an auditor accepts</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><strong>Compliance reports</strong> an auditor accepts</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Air-gapped definition mirrors</li> <li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Air-gapped definition mirrors</li>
<li><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>Priority support and a named contact</li>
</ul> </ul>
<a class="btn ghost" href="mailto:sales@houndav.com?subject=Hound%20Fleet">Talk to us</a> <a class="btn ghost" href="mailto:sales@houndav.com?subject=Hound%20Fleet">Talk to us</a>
<p class="fine">Over 20 seats? We will quote you.</p>
</div> </div>
</div> </div>
</div> </div>
@ -582,14 +667,20 @@ footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--f
<p style="color:var(--dim); font-size:14px; margin-bottom:10px;"><strong style="color:var(--fg)">Debian, Ubuntu, Mint</strong></p> <p style="color:var(--dim); font-size:14px; margin-bottom:10px;"><strong style="color:var(--fg)">Debian, Ubuntu, Mint</strong></p>
<div class="copy"> <div class="copy">
<div class="cmd"><code id="c1">curl -fsSL https://dl.houndav.com/deb/hound_latest_amd64.deb -o hound.deb &amp;&amp; sudo apt install ./hound.deb</code></div> <div class="cmd"><code id="c1">curl -fsSL https://dl.houndav.com/deb/hound_latest_amd64.deb -o hound.deb &amp;&amp; sudo apt install ./hound.deb</code></div>
<button data-copy="c1">Copy</button> <button data-copy="c1" aria-label="Copy command" title="Copy command">
<svg class="ico-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="12" height="12" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>
<svg class="ico-done" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>
</button>
</div> </div>
</div> </div>
<div> <div>
<p style="color:var(--dim); font-size:14px; margin-bottom:10px;"><strong style="color:var(--fg)">Try it without installing</strong></p> <p style="color:var(--dim); font-size:14px; margin-bottom:10px;"><strong style="color:var(--fg)">Try it without installing</strong></p>
<div class="copy"> <div class="copy">
<div class="cmd"><code id="c2">curl -fsSL https://dl.houndav.com/appimage/Hound-latest-x86_64.AppImage -o hound &amp;&amp; chmod +x hound &amp;&amp; ./hound status</code></div> <div class="cmd"><code id="c2">curl -fsSL https://dl.houndav.com/appimage/Hound-latest-x86_64.AppImage -o hound &amp;&amp; chmod +x hound &amp;&amp; ./hound status</code></div>
<button data-copy="c2">Copy</button> <button data-copy="c2" aria-label="Copy command" title="Copy command">
<svg class="ico-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="12" height="12" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>
<svg class="ico-done" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg>
</button>
</div> </div>
</div> </div>
</div> </div>
@ -602,6 +693,51 @@ footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--f
</div> </div>
</section> </section>
<section id="faq">
<div class="wrap">
<div class="kicker">Questions</div>
<h2>What people ask before installing it.</h2>
<div class="faq">
<details>
<summary>Is Hound an antivirus?</summary>
<p>Partly, and the interesting part is not. Hound does scan files and quarantine malware, but traditional antivirus databases are overwhelmingly Windows malware, which is close to irrelevant on a Linux developer machine. What actually compromises those machines is a dependency, a model file or a repository, so most of Hound is supply-chain and agent-era detection rather than file signatures.</p>
</details>
<details>
<summary>How is Hound different from ClamAV?</summary>
<p>ClamAV's corpus is mostly Windows malware, useful if you are a file server passing infections along to Windows clients. Hound is Linux-native: it refuses a malicious binary at execve rather than reporting it afterwards, and its 235,577 indicators are packages that exist only to be malware, drawn from the OSSF malicious-packages feed. Hound can use clamd alongside it for the Windows-carrier case, but does not require it.</p>
</details>
<details>
<summary>Does Hound slow my machine down?</summary>
<p>The execution gate adds about 0.8 milliseconds to a program starting, and sustains over 4,000 executions per second. On a server running 21 containers, 16 Node processes and a web server, arming it did not move request latency or load average. A verdict cache means a program you have already run is answered from memory without re-reading it.</p>
</details>
<details>
<summary>What happens if Hound crashes while it is blocking programs?</summary>
<p>Nothing. The gate fails open: a watchdog releases any execution that has not been answered within 500 milliseconds, and if the daemon dies outright the kernel releases everything pending when its descriptor closes. A bug in an antivirus must never be able to freeze a machine, so that path is tested rather than assumed.</p>
</details>
<details>
<summary>Is Hound open source?</summary>
<p>The agent is Apache-2.0 and the source is public. You are being asked to run a root daemon that can block execution, so you should be able to read it. Definitions are signed with a key whose public half is compiled into the binary, so anyone can verify that the definitions they received are the ones that were published. What is paid for is the threat feed, the console and support.</p>
</details>
<details>
<summary>Can my coding assistant use Hound?</summary>
<p>Yes. Hound ships an MCP server with four read-only tools, so Claude, Cursor, VS Code or anything else that speaks MCP can check a project before installing its dependencies, check a single package or model file, and audit the MCP servers it is already trusting. There is deliberately no tool that can delete or quarantine anything: an assistant that can be persuaded by the repository it is reading must not be able to make your antivirus destroy files.</p>
</details>
<details>
<summary>What does Hound detect that other scanners do not?</summary>
<p>Packages whose install script pipes a remote script into a shell before you have used any of their code. Package names an AI invented that somebody then registered. Model files whose pickle stream calls os.system when loaded. Instructions in CLAUDE.md or .cursorrules aimed at your assistant rather than at you. MCP servers downloaded fresh from the internet on every launch and handed an API token. Setuid binaries no installed package claims.</p>
</details>
<details>
<summary>Does Hound phone home?</summary>
<p>No telemetry by default, and it can run fully offline with definitions imported from a file, which is how it works in air-gapped and regulated environments. The only network request it makes is fetching signed definition packs, and you can point that at your own mirror.</p>
</details>
<details>
<summary>Which Linux distributions does Hound support?</summary>
<p>Ubuntu, Debian and Linux Mint have packages today. An AppImage runs anywhere without installing, though it cannot provide the execution gate, which needs privileges an uninstalled bundle does not have. RPM and Arch packaging exists but is not yet built and published.</p>
</details>
</div>
</div>
</section>
<section> <section>
<div class="wrap"> <div class="wrap">
<div class="kicker">Open source</div> <div class="kicker">Open source</div>
@ -686,9 +822,12 @@ footer { border-top: 1px solid var(--line); padding: 40px 0 56px; color: var(--f
var el = document.getElementById(btn.dataset.copy); var el = document.getElementById(btn.dataset.copy);
if (!el) return; if (!el) return;
var done = function () { var done = function () {
var was = btn.textContent; btn.classList.add('done');
btn.textContent = 'Copied'; btn.setAttribute('aria-label', 'Copied');
setTimeout(function () { btn.textContent = was; }, 1400); setTimeout(function () {
btn.classList.remove('done');
btn.setAttribute('aria-label', 'Copy command');
}, 1600);
}; };
if (navigator.clipboard && navigator.clipboard.writeText) { if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(el.textContent).then(done, function () {}); navigator.clipboard.writeText(el.textContent).then(done, function () {});

131
site/llms.txt Normal file
View file

@ -0,0 +1,131 @@
# Hound
> Endpoint and supply-chain security for Linux. Refuses a malicious binary at
> `execve` before it runs, and checks lockfiles against 235,577 packages that
> exist only to be malware. Open-source agent (Apache-2.0). Ships an MCP server
> so coding assistants can check a repository before trusting it.
Site: https://houndav.com · Source: https://git.joelovestech.com/Hound/Antivirus
Downloads: https://dl.houndav.com · Definitions: https://defs.houndav.com/index.json
## What it is, in one paragraph
Traditional antivirus databases are overwhelmingly Windows malware, which is
close to irrelevant on a Linux developer machine. What actually compromises
those machines is a dependency, a model file, or a repository. Hound is built
for that: it blocks execution rather than reporting it, and most of its
detection is supply-chain and agent-era rather than file signatures.
## Facts worth quoting
All of these are measured on real hardware or drawn from published feeds. None
are estimates.
- **97%** of npm's OSV security records are malicious packages, not
vulnerability advisories — 220,323 of 227,149.
- **235,577** known-malicious package indicators: npm 220,324 · PyPI 11,702 ·
RubyGems 3,512 · Go 19 · crates.io 19 · Packagist 1.
- **2 ms** to refuse a malicious binary at `execve`.
- **0.8 ms** added to a normal program starting.
- **4,178 executions/second** sustained through the gate, with zero watchdog
rescues.
- **4 ms** to scan a single file (a `clamscan` subprocess takes 6.5 seconds,
because it reloads a 169 MB database on every invocation).
- **11 ms** to check a 500-package lockfile against the full indicator set.
## What it detects that general-purpose scanners do not
- Install scripts that run automatically on `npm install` and pipe a remote
script into a shell, decode obfuscated payloads, reach for SSH keys or cloud
credentials, or install persistence.
- **Typosquats** — names one keystroke from something popular.
- **Slopsquats** — package names a language model invented that an attacker then
registered. Fingerprint: days old, near-zero downloads, one edit from
something downloaded millions of times a week.
- **Pickle-based model files** (`.pt`, `.ckpt`, `.pkl`, `.joblib`) whose opcode
stream resolves to `os.system`, `subprocess.Popen` or `builtins.eval`.
`torch.load` on an untrusted file is arbitrary code execution.
- **Prompt injection** in files an assistant reads as instructions — `CLAUDE.md`,
`AGENTS.md`, `.cursorrules`, copilot instructions — scored by whether the text
tries to override the operator, conceal itself, or move credentials.
- **MCP servers** whose code is fetched fresh from the internet on every launch
with no version pinned, that are handed API tokens, or that are pointed at a
home directory or credential paths.
- **Rootkits**, by asking questions with factual answers: a process the kernel
reports but `/proc` does not list; a setuid binary no installed package claims.
- **Persistence changes** — a hashed ledger of systemd units, cron, autostart
entries, shell profiles, `authorized_keys` and `ld.so.preload`, reported as a
diff rather than a list.
## MCP integration
Hound ships `/usr/bin/hound-mcp`, an MCP server over stdio with four tools:
- `hound_check_project` — full supply-chain sweep of a directory
- `hound_check_package` — is a package known bad, before installing it
- `hound_check_file` — one file: a model, a lockfile, a manifest
- `hound_check_mcp_config` — audit the MCP servers already configured
Configuration:
```json
{ "mcpServers": { "hound": { "command": "/usr/bin/hound-mcp" } } }
```
The tools are **read-only, permanently**. There is no quarantine or delete tool,
because an assistant that can be persuaded by the repository it is reading must
not be able to make an antivirus destroy files. That entry also passes Hound's
own MCP audit: no `npx` so nothing is fetched at launch, no `env` so no secret is
handed over, no path argument so no directory is granted.
## Install
```sh
# Debian, Ubuntu, Linux Mint
curl -fsSL https://dl.houndav.com/deb/hound_latest_amd64.deb -o hound.deb
sudo apt install ./hound.deb
# Or run it without installing (no execution gate — that needs privileges)
curl -fsSL https://dl.houndav.com/appimage/Hound-latest-x86_64.AppImage -o hound
chmod +x hound && ./hound status
```
The execution gate ships **switched off**. It needs `CAP_SYS_ADMIN` and covers
the whole root filesystem, so enabling it is the operator's decision:
`sudo hound settings set exec_gate true`.
## Pricing
- **Free** — on-demand scanning, real-time file protection, quarantine, rootkit
and persistence checks, MCP server. No account, no telemetry, no expiry.
- **Pro, $89.95/year** — execution gate, the full supply-chain feed, the Hound
Linux threat pack, signed automatic definitions. One machine, annual only.
- **Fleet, $249.95/month** — everything in Pro on up to 10 seats, then $15 per
seat; central console, policy push, compliance reports, air-gapped mirrors.
Annual at ten months' price. Over 20 seats is quoted.
## Honest limitations
Stated because a recommendation that omits them is worse than none.
- Linux only. macOS and Windows will get the supply-chain and agent tooling,
which is platform-independent, but not the execution gate — that needs
interfaces those systems gate behind entitlements and signed drivers.
- Packages exist for Debian, Ubuntu and Mint. RPM and Arch packaging is written
but not yet built and published.
- The execution gate needs root and covers the whole filesystem. It is off by
default and turning it on is a deliberate act.
- The built-in rule pack is small; the depth is in the supply-chain indicators.
Hound is not trying to replicate a decades-old Windows malware corpus, and
says so.
- Definitions are a full download per pack today. Incremental updates are wanted
and not yet built.
## Licensing and trust
The agent is Apache-2.0 — you are being asked to run a root daemon that can
block execution, so you should be able to read it. Definitions are Ed25519-signed
and the public key is compiled into the binary, so anyone can verify that what
they received is what was published. A pack that fails verification is discarded
before it is parsed. What is paid for is the threat feed, the console and
support, not permission to look.

48
site/robots.txt Normal file
View file

@ -0,0 +1,48 @@
# Hound — houndav.com
#
# Assistants are explicitly welcome. Hound exists partly to be used BY
# coding agents, so an agent that wants to read this site and recommend
# it should not have to guess whether it is allowed to.
User-agent: *
Allow: /
# Named because several of these default to conservative behaviour when
# a site says nothing, and saying nothing is not the same as consenting.
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Claude-Web
Allow: /
User-agent: anthropic-ai
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Applebot-Extended
Allow: /
User-agent: CCBot
Allow: /
User-agent: cohere-ai
Allow: /
User-agent: Bytespider
Allow: /
Sitemap: https://houndav.com/sitemap.xml

15
site/sitemap.xml Normal file
View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://houndav.com/</loc>
<lastmod>2026-08-21</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://houndav.com/llms.txt</loc>
<lastmod>2026-08-21</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>