
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
agentability-audit
Advanced tools
Local-first Agentability Audit toolkit for testing whether web flows are ready for trusted AI agents.
Local-first Agentability Audit toolkit for testing whether web flows expose enough structured semantics, executable actions, state feedback, and evidence for trusted AI agents.
It is not a browser agent and it does not bypass sites that block automation. It is intended for owned websites, staging apps, internal tools, and agent-friendly flows where teams want consent-based AI-agent access.
npm install -D agentability-audit playwright
npx playwright install chromium
npx agentability audit http://localhost:3000 --task page,search --fail-below 80
agentability-audit is the package name. agentability is the primary CLI binary.
For one-off package execution without a local install:
npx agentability-audit audit http://localhost:3000 --task page,search --fail-below 80
Write reports:
npx agentability audit http://localhost:3000 \
--task page,search,auth_form,modal,filter,pagination \
--backend auto \
--viewport 1280x900 \
--header "X-Agentability: audit" \
--out reports/agentability.json \
--html reports/agentability.html \
--markdown reports/agentability.md \
--sarif reports/agentability.sarif \
--junit reports/agentability.junit.xml \
--open
Write a complete artifact set with one flag:
npx agentability audit http://localhost:3000 --task page,search --artifact-dir reports/agentability
Explore rules and render reports:
npx agentability init
npx agentability rules
npx agentability explain actionability/duplicate-button-labels
npx agentability report reports/agentability.json --html reports/agentability.html
npx agentability diff reports/base.json reports/head.json
npx agentability validate-config
Use a config file:
// agentability.config.mjs
export default {
tasks: ["page", "search", "auth_form", "modal", "filter", "pagination"],
searchQuery: "Richmond ramen",
observationBackend: "auto",
failBelow: 80,
storageState: "playwright/.auth/user.json",
viewport: { width: 1280, height: 900 },
deviceScaleFactor: 1,
userAgent: "agentability-audit",
locale: "en-US",
timezoneId: "America/Vancouver",
colorScheme: "light",
reducedMotion: "no-preference",
include: [],
exclude: ["footer", "[aria-hidden='true']", "[data-agentability-ignore]"],
retries: 1,
output: {
json: "reports/agentability.json",
html: "reports/agentability.html",
sarif: "reports/agentability.sarif",
junit: "reports/agentability.junit.xml"
},
rules: {
severity: {
"state_feedback/task-probe-skipped": "info"
},
suppress: []
}
};
Named targets are supported through config:
npx agentability audit --target search
import { auditUrl, hasBlockingIssues, writeAuditReports } from "agentability-audit";
const report = await auditUrl("http://localhost:3000", {
tasks: ["page", "search"],
searchQuery: "Richmond ramen",
observationBackend: "auto",
onEvent(event) {
console.log(event.type, event.task ?? "", event.message ?? "");
},
rules: {
severity: {
"agent_safety/prompt-injection-like-text": "high"
}
}
});
console.log(report.scores.overall);
await writeAuditReports(report, { artifactDir: "reports/agentability" });
process.exitCode = hasBlockingIssues(report, 80) ? 1 : 0;
Use an existing Playwright page:
import { auditPage } from "agentability-audit";
import { test, expect } from "@playwright/test";
test("agentability", async ({ page }) => {
await page.goto("http://localhost:3000");
const report = await auditPage(page, { tasks: ["page"] });
expect(report.scores.overall).toBeGreaterThanOrEqual(80);
});
Run multiple targets:
import { auditProject, defineConfig } from "agentability-audit";
const result = await auditProject(defineConfig({
targets: [
{ name: "home", url: "http://localhost:3000", tasks: ["page"] },
{ name: "search", url: "http://localhost:3000/search", tasks: ["page", "search"] }
]
}));
console.log(result.summary.averageScore);
semanticDiscoverability: agents can find labels, roles, headings, forms, and intent regions.actionability: executable controls are exposed with unambiguous labels and target identity.stateFeedback: task probes can observe URL, title, text, dialog, or region changes after actions.recoverability: exposed elements have stable semantic IDs, locator fingerprints, and lineage.agentSafety: risky content such as ads or instruction-like page text is structurally distinguishable.The package runs locally and does not upload page data. Reports may include visible page text and labels. Use redact patterns to remove sensitive values from output:
await auditUrl("http://localhost:3000", {
redact: [/customer-\d+/g, "secret-project-name"]
});
The current execution backend is Playwright-controlled Chromium. Observation can use auto, cdp_ax_tree, playwright_aria, or dom_semantic. Reports record the requested backend, selected backend, fallback chain, and a compact observation evidence summary. Structured state is still normalized into semantic elements, action graph, intent regions, state IDs, and task replay evidence.
scores.overall; use --fail-below 80 as a CI gate.issues in severity order. Each issue has a stable ruleId, category, evidence, and recommendation.observations to confirm whether the run used native CDP Accessibility, Playwright ARIA/AI snapshot, or DOM semantic fallback.replay.steps for task evidence: state IDs before/after, DOM delta summary, network summary, console summary, and duration.GitHub Actions:
- run: npx playwright install --with-deps chromium
- run: npm run preview -- --host 127.0.0.1 --port 4173 &
- run: npx wait-on http://127.0.0.1:4173
- run: npx agentability audit http://127.0.0.1:4173 --task page,search --fail-below 80 --artifact-dir reports/agentability
Vercel or Netlify preview:
npx agentability audit "$DEPLOY_PRIME_URL" --task page,form,modal --fail-below 80 --artifact-dir reports/agentability
Generic npm script:
{
"scripts": {
"agentability": "agentability audit http://localhost:3000 --task page,search --fail-below 80 --artifact-dir reports/agentability"
}
}
Next.js:
npm run build
npm run start &
npx agentability audit http://localhost:3000 --task page,form
Vite:
npm run build
npm run preview -- --host 127.0.0.1 --port 4173 &
npx agentability audit http://127.0.0.1:4173 --task page,search
npx playwright install chromium.storageState, configured cookies, or an authenticated preview environment.--timeout, check your local preview server, and use --header if the preview needs a routing hint.exclude selectors or data-agentability-ignore.redact patterns and avoid uploading authenticated artifacts publicly.Reports include metadata.reportVersion and metadata.scoreModelVersion. Treat rule additions, severity changes, and score weighting changes as changelog-worthy release notes. See docs/release-checklist.md in the repository for publish checks.
FAQs
Local-first Agentability Audit toolkit for testing whether web flows are ready for trusted AI agents.
The npm package agentability-audit receives a total of 1 weekly downloads. As such, agentability-audit popularity was classified as not popular.
We found that agentability-audit demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.