Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add liarjsdev/liarjs-skills --skill fingerprint-ci-gategit clone --depth 1 https://github.com/liarjsdev/liarjs-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/liarjsdev/liarjs-skills/fingerprint-ci-gate)<a href="https://agentmods.dev/skills/liarjsdev/liarjs-skills/fingerprint-ci-gate"><img src="https://agentmods.dev/badge/skills/liarjsdev/liarjs-skills/fingerprint-ci-gate/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/liarjsdev/liarjs-skills/fingerprint-ci-gate"><img src="https://agentmods.dev/badge/skills/liarjsdev/liarjs-skills/fingerprint-ci-gate.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Socket pass
- Snyk pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00095 | $0.00951 |
| Opus 5 | $0.00048 | $0.00476 |
| Sonnet 5 | $0.00019 | $0.00190 |
| Haiku 4.5 | $0.00010 | $0.00095 |
Grade A, and why
fingerprint-ci-gate scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 91 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Fail the build, not the ban rate
A fingerprint regression is invisible until something starts rejecting the traffic weeks later.
liarjs turns it into a diff in a pull request: scan, save the JSON, compare the next run against
the saved baseline.
Node 22 or newer, a Chromium in the image, zero runtime dependencies.
Runner note: give the container enough shared memory (--shm-size=1g on Docker, or a /dev/shm
mount) and the capabilities Chrome's own sandbox needs. Leave the browser sandbox enabled; a scan
that will not start is an image problem to fix in the image.
The two mechanisms
Absolute floor. Exits 1 when the score is below the number given, so the job fails:
npx [email protected] --headless --min-score 60
Baseline diff. Prints only the checks whose status moved between two saved scans:
npx [email protected] --json scan.json # write the current result
npx [email protected] diff baseline.json scan.json # what changed since the known-good run
Prefer the diff in any environment where some checks can never pass. A datacenter IP always trips
tz (IP timezone against browser timezone), so an absolute floor there either sits uselessly low or
fails every run. The diff only speaks up when something actually moved.
Exit codes: 0 clean, 1 below --min-score, 2 an error such as no browser found.
GitHub Actions
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Fingerprint scan
run: npx [email protected] --headless --json scan.json --min-score 60
- name: Compare against the baseline
run: npx [email protected] diff baseline.json scan.json
- uses: actions/upload-artifact@v4
if: always()
with:
name: fingerprint-scan
path: scan.json
references/ci-recipes.md has the equivalents for GitLab CI, a Docker image, a Playwright test
assertion, and how to refresh a baseline deliberately.
Choosing the gate
- Pin the version (
[email protected]or a dev dependency in the lockfile). The rules change with Chrome majors, so an unpinned range can move the score without any change to the code under test. - A headless job scores lower than a headed one by design. Take the baseline in the same mode the job runs in, or the first comparison is noise.
- Commit
baseline.jsonand refresh it in its own commit, with the diff output in the message. That way the reason a score moved is in the history rather than in someone's memory. - Store
scan.jsonas a build artifact. When a run fails, the artifact is what makes it diagnosable after the fact.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 91 lines · 95 tokens per session scan A 5ad9306b2d68
fingerprint-ci-gate is a skill published in the GitHub repository liarjsdev/liarjs-skills (8 stars, last pushed 1mo ago), licensed MIT. It adds 95 tokens to every session and 951 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
setup-solution
Creates a Dataverse publisher and solution, then adds Power Pages site components to the solution for ALM and deployment management. Use when asked to: "create solution", "set up solution", "add to solution", "package site into solution", "create publisher", "solutionize my site", or "set up ALM for my site".
setup-pipeline
Sets up a Power Platform Pipeline for automated Power Pages deployments. Power Platform Pipelines is Microsoft's native CI/CD tool built into the Power Platform — no external infrastructure required. Use when asked to: "set up ci/cd", "create pipeline", "setup pipeline", "set up power platform pipelines", "create…
configure-env-variables
Configures environment variables for Power Pages site settings to support ALM across environments. Creates environment variable definitions in Dataverse, guides the user through linking site settings to those variables via the Power Pages Management app, adds the variables to the solution, and generates a…
force-link-environment
Force-links a development or target environment to a Power Platform Pipelines host, overriding any existing association with a previous host. Use when creating a deploymentenvironments record fails with "this environment is already associated with another pipelines host", or when intentionally migrating an environment…
diagnose-deployment
Surfaces PAC CLI upload errors and Dataverse async operation errors, pattern-matches against a known failure catalog, and optionally auto-fixes identified issues. Use when asked to: "diagnose deployment", "debug deployment", "deployment failed", "show deployment errors", "fix deployment issues", "show upload logs"…
add-azuredevops
Adds Azure DevOps connector to a Power Apps code app. Use when querying work items, creating bugs, managing pipelines, or making ADO API calls.