What LLM Guard security risks look like after the archive
No new fixes will arrive for LLM Guard, so the security task now is to reduce and document exposure while a replacement is planned. The protectai/llm-guard repository was archived by its owner on 9 July 2026, and the README states that the project and its associated models on Hugging Face are no longer under active development or maintained. For an LLM application that sends prompts and model responses through these scanners, that statement changes the question from whether to upgrade to how long the current deployment can be defended. Security leads now need to justify running code that will not receive patches.
The exposure sits in three places at once. The first is the Python code in the installed package, where any vulnerability found after archival stays open. The second is the model artifacts that scanners load from Hugging Face, which the README also places outside maintenance, so a model file can be pinned but not refreshed if a weakness turns up in it. The third is the dependency tree, including the libraries LLM Guard pulls in, which keeps aging independently of the project. A review that examines only one of these layers will miss the others, and an auditor is likely to ask about all three.
Teams usually need this work at a specific trigger: an audit cycle that asks which controls address prompt injection or data leakage, a vendor security questionnaire that asks whether every component is still supported, or a new finding against one of the 15 input or 20 output scanners the project documents. Each trigger asks for a different answer. Start by listing which scanners the application actually calls, the package version and model revision each one loads, and the owner of each decision. An inventory limited to scanners in production gives a clearer answer than one covering the full catalogue.
This work is harder than it looks because the scanners sit on the request path. Every prompt and response may pass through them before reaching the model or the user, so a change to a scanner, a model or a threshold can alter what gets blocked, what gets redacted and how quickly requests return. Interim controls, such as restricting outbound network access from the scanner host, limiting who can change model files, and logging scanner decisions, can reduce exposure without touching the scanning logic. Each control still needs a test in staging, a rollback path and a named approver before it reaches production.
Migration and version pinning are covered in the sibling guides on moving to a maintained guardrail and on supporting existing deployments, so this section does not repeat them. What remains here is the risk picture and the evidence to collect. Ask your internal team or your vendor to confirm the exact package version and model revisions in use, and record the date each control was last reviewed. Useful evidence includes a dated inventory, a written risk acceptance signed by the owner of the application, scanner decision logs, and a list of findings that remain open. This evidence shows an auditor that the exposure is known and watched. It does not, on its own, show that the system is secure, and an independent assessor decides what the evidence supports.
Where LLM Guard security risks sit in your stack
LLM Guard exposure is spread across several layers: the scanner catalog, the models those scanners load, the Python package and its dependencies, and the server that may wrap them. Each layer can fail differently, and each leaves different evidence for an auditor to review.
Input scanners
LLM Guard documents 15 input scanners, including Prompt Injection, Secrets, Anonymize, Ban Topics, Invisible Text, Token Limit and Toxicity. Each one parses untrusted prompt text, so a flaw in its parsing or model code is reachable from any user-facing input path. Check which scanners are enabled in each deployment, since the set in use is what defines your attack surface. Auditors will look for the configuration that lists active scanners and the thresholds set for each.
Output scanners
LLM Guard documents 20 output scanners, including Sensitive, Malicious URLs, JSON, Deanonymize, Factual Consistency, No Refusal and Toxicity. These run on model responses before they reach users or downstream systems, so a failed or bypassed output scanner can pass data leakage or unsafe content through. Confirm which output scanners are active and whether any run in a fail-open mode. The enabled configuration and scanner logs are the evidence to retain.
Hugging Face model weights
Several scanners load models from Hugging Face. The project and its associated models are no longer maintained, so weights will not receive security fixes. Risks include upstream repositories being removed or changed, and unverified model files being loaded at runtime. Pin specific model revisions, record their hashes, and mirror the files into your own controlled storage so that the model in use is known and can be reproduced.
Python library installed with pip
LLM Guard is installed as a Python package from PyPI. The last release is 0.3.16, uploaded on 19 May 2025, and it requires Python 3.10 or newer but below 3.13. Any environment that upgrades Python beyond that ceiling may fail to install or run it. Record the exact installed version and interpreter in your software bill of materials, and confirm the package hash in your build pipeline.
API server deployment
LLM Guard can run as an API server in front of your applications. The server adds its own network listener, authentication choices, request handling and container or host configuration. Exposure depends on where it is reachable and whether callers must authenticate. Review network policies, TLS termination and access logs, and confirm which team owns patching of the server image.
Python dependency tree
LLM Guard pulls in a transitive tree of Python packages for parsing, machine learning and model loading. Without a lock file, rebuilds can silently pick up different versions, and unmaintained upstream packages can carry known vulnerabilities that nothing in LLM Guard will fix. Generate a lock file, scan the full tree for known vulnerabilities on a schedule, and keep the scan reports and dependency manifests as audit evidence.
Which interim control fits your exposure
This table compares five interim options for an archived LLM Guard deployment, showing when each fits, who takes on the operational work, and what it leaves unresolved. Read it by matching your exposure to the first column, then checking the cost and the gap before committing. No option removes the need for a maintained replacement.
| Option | When it fits | Operational cost and ownership | What it does not fix |
|---|---|---|---|
| Run as-is with added monitoring | Short bridge period with a funded migration already scheduled and low exposure to untrusted input | Your team watches scanner logs, alerts and error rates; nobody upstream patches the code or models, so your team reviews any new CVE against the pinned version | Known or future vulnerabilities in the scanner code and the Hugging Face model weights remain in place |
| Isolate the scanner service behind network and identity controls | Scanner runs as an API server that only the LLM gateway needs to reach | Your platform team owns network policy, service identity, egress rules and access reviews; a scanner outage can block all LLM traffic if the gateway fails closed | Does not stop a flaw in a scanner from being exploited through the traffic the gateway legitimately sends |
| Freeze and mirror the model artifacts | Deployment depends on specific Hugging Face models that may become unavailable or change | Your team stores verified copies of model files, records checksums and restricts who can update them; mirrors need storage and periodic integrity checks | Does not fix unpatched scanner code or the detection gaps of models trained before archival |
| Keep an internal fork with your own patches | You have engineers able to own security fixes in Python dependencies and scanner logic | Your team takes over patch ownership, dependency upgrades, Python version management and regression testing; this is ongoing work, not a one-time change | Patches cover only what your team finds and fixes; the fork inherits the original design and carries your team's maintenance load |
| Reduce the enabled scanner set while the replacement is built | Some scanners are not required by policy or can be replaced by simpler controls in the gateway | Your team reviews which scanners are enabled, documents the risk decision and retests the remaining set after each change | Removed scanners leave their detection categories uncovered, so the decision must be recorded and approved by the risk owner |
How to contain an unmaintained LLM Guard deployment in order
This sequence contains an archived LLM Guard deployment by showing what runs and where, freezing its code and model artifacts, limiting its exposure, and assigning ownership for future advisories. Each step ends with a check whose output becomes evidence for both the replacement project and auditors.
Inventory every caller and scanner in use
Start with a list of every application, service and environment that sends text to LLM Guard, whether through the pip library or the API server. For each caller, record which input and output scanners it enables, such as Prompt Injection, Secrets, Sensitive or Malicious URLs. Application owners should confirm the list, because scanners are often enabled in code that the platform team does not see. Closing check: the inventory is complete when a diff between it and the scanner configuration actually loaded in each running environment shows no unexplained differences.
Map each call path to input or output
For each call path in the inventory, record whether the scanner runs on the prompt before it reaches the model, on the model response before it reaches the user, or on both. Trace each path through retries, batch jobs and fallback branches, since a code path that skips the scanner leaves that traffic unguarded. Security engineers review the traces with the application owners. Closing check: every path has a documented direction, and each unguarded path is either marked as an accepted gap or scheduled for a code change, with the decision recorded against that path.
Freeze package and model artifacts
Pin the llm-guard version in the lock file used by each environment. The last PyPI release is 0.3.16, which requires Python 3.10 or newer but below 3.13, so confirm that every runtime falls inside that range. Download the Hugging Face model files the scanners load, then record a hash and the exact model revision for each one. Platform engineers should rebuild images from the pinned inputs and compare hashes with production. Closing check: a fresh build from the lock file produces identical package hashes, and the runtime loads only model files that match the recorded values.
Restrict egress and API server access
Run the scanner process in a network segment that can reach only the applications that call it and the internal logging endpoints, with outbound traffic denied by default. Model downloads should happen during controlled builds, not at runtime. Limit who can reach the API server through the network policy and authentication the platform already uses. Closing check: a test connection from the scanner host to an external address fails, and an access review lists only the named callers allowed to reach the API server.
Move scanner secrets to a secrets manager
Identify every credential that the scanners or their callers use, including provider API keys, database passwords for data-dependent scanners and tokens referenced in scanner configuration. Store each value in the client's secrets manager, grant each scanner workload read access only to the secrets it needs, and remove values from environment files, images and configuration repositories. Closing check: a search of images, repositories and deployment manifests finds no plaintext values, and the access policy lists one identity per workload.
Log scanner decisions and alert on errors
Record each scanner verdict with the scanner name, direction, calling application, decision and a request identifier. Keep prompt and response content out of logs unless the privacy review approves it. Route scanner exceptions, timeouts and model load failures to the alerting system the operations team already uses. Because upstream fixes will not arrive, a silent scanner failure becomes a control failure. Closing check: a deliberately malformed test request produces a log entry and an alert in the monitoring tool, and the on-call team confirms receipt.
Set a triage process for new advisories
Name one owner accountable for reviewing vulnerability reports that affect LLM Guard, its dependencies and its Hugging Face models. Write the path from report to decision: patch in-house, replace the component or accept the risk, with a named approver for each option. Subscribe the owner to the repository, the PyPI project and advisory feeds for the packages LLM Guard depends on. Closing check: the owner has a working alert subscription and a triage record template, and a tabletop walk through an illustrative advisory produces a documented decision.
Record a formal risk acceptance
Document the residual risk of running an archived scanner: no upstream fixes, no future model updates from the project, and the scanner gaps found while mapping call paths. List the compensating controls from the earlier steps and the replacement plan, then have the accountable business and security owner sign the record. Keep the signed record with the inventory, hash manifests and test results. DeployOpen can prepare this evidence, but independent auditors decide whether the controls are sufficient. Closing check: a signed record exists, names each open gap, and is linked to a review date the owner sets.
How to verify Hugging Face models before they run
Because the LLM Guard README states that its associated models on Hugging Face are no longer under active development or maintained, the model files your deployment loads are now a fixed risk surface. No upstream team will publish fixes, re-scan artifacts or announce a compromised revision, so the integrity checks must happen on your side. Start by writing down, for every scanner that downloads a model, the exact model identifier and the commit revision your deployment resolves to. A floating reference such as a branch name or an unpinned default can change without any notice, and an inventory built from identifiers alone will not show that change. Record the revisions in the same configuration repository that holds your LLM Guard version pins, so a reviewer can see both in one place. Once the revisions are recorded, download the files at those exact commits and compute a cryptographic checksum for each file, including the configuration, tokenizer and weight files. Store the hash manifest in a location your change control process protects, separate from the model files themselves, so that an attacker who can replace a model cannot also replace its record. Then mirror the files into an internal artifact store that your organization controls. Confirm with your own Hugging Face access method and internal artifact store whether revision pinning and offline loading work in your setup. Test this in a non-production environment, because some client libraries still attempt network calls at load time, and a mirror that appears to work in a quick test can fail when the network path changes. On each deployment, fetch the mirrored files, recompute the checksums and compare them with the stored manifest before the scanner loads anything. A mismatch should stop the rollout, not produce a warning in a log. Detecting silent changes at load time also means setting the offline mode so the process cannot pull a different revision from the public hub at startup, and logging the resolved revision and file hashes on every start. Treat any unexpected difference as an incident until you have explained it, and keep the failed manifest as evidence. Decide in advance what happens when a model cannot be fetched or verified. Options include keeping the last verified copy running, failing closed so the guarded endpoint refuses traffic, or routing requests to a documented fallback control. Each option has a different risk to the business, so the choice should be approved by the owner of the application, not left to the on-call engineer. Write the decision into the runbook with named roles, and rehearse it once so the team knows where the verified copies live and who can authorize a restore. Finally, plan for the models to outlive the scanner code. Keep the verified copies and the manifest under retention rules that match your audit requirements, and review them whenever you change the LLM Guard version or the Python runtime. The same manifests will help your team when it moves to a maintained guardrail, because they show exactly which model artifacts were in production and when each one was last verified.
What drives the effort of securing LLM Guard in place
This table lists the factors that move the effort and cost of keeping an archived LLM Guard deployment under control, with a way to reduce each one. Read it to see which items are one-time work and which recur, and what to ask for in a written scope.
| Driver | Why it changes effort | How to keep it down |
|---|---|---|
| Applications and environments calling the scanners | Each calling application, and each environment such as development, staging and production, needs its own inventory entry, configuration review and evidence trail. | Consolidate calls behind one scanner API server where the design allows, and retire unused environments before the scope is set. |
| Input and output scanners enabled | The documentation lists 15 input and 20 output scanners. Each enabled scanner adds a configuration to review, a model or dependency to track and a failure mode to test. | Enable only the scanners that map to a documented risk, and record why each one is on. Disable the rest and keep the reasoning in the control record. |
| Model artifacts to mirror and hash | Scanners load models from Hugging Face. Each model version needs a mirrored copy, a recorded hash and a check that the copy has not changed since it was approved. | Limit the model list to the scanners in use, pin exact versions, and mirror only those artifacts into a location you control. |
| Network topology and egress rules | If scanners fetch models or packages at runtime, egress rules must be opened, reviewed and later closed. Each new path needs a documented reason and an owner. | Pre-fetch and vendor all artifacts so the runtime needs no outbound access, then block egress at the network layer and test the block. |
| Secrets used by the scanners | Scanners that call external services or hold credentials add rotation, storage and access review work. Each secret needs a named owner and a rotation record. | Remove secrets from scanners that do not need them, use a managed secret store, and limit each secret to one scanner or service. |
| Size of the evidence set for the assessment | The client's assessor will ask for inventory, configuration, hash records, test results and exception approvals. A larger scope means more documents to produce and keep current. | Agree the audit scope and sampling approach in writing before collection starts. DeployOpen prepares evidence for assessors but does not issue audit reports or attestations. |
| Decisions that need a named risk owner | Keeping an unmaintained component in production is a risk acceptance. Each accepted risk, exception and compensating control needs a person who signs it and reviews it. | Group related risks under one owner and one review date, and set a retirement trigger tied to the replacement plan. |
| One-time work | Inventory, mirroring and hashing of artifacts, egress and network changes, and control design happen once at the start, though they must be redone after any version change. | Ask for the one-time items as a separate line in the quote, with the deliverables listed for each. |
| Recurring work | Triage of advisories and reports against an archived project, monitoring of scanner behavior, and refresh of evidence each assessment cycle continue for as long as the deployment runs. | Ask for the recurring cadence in writing, and agree which items the client team keeps in-house and which a retainer covers. |
How the controls change by deployment model
When LLM Guard runs as a Python library inside the application process, its scanners share memory, credentials and the interpreter with your application code. Controls therefore sit at the application boundary and in the build pipeline, not in a separate network tier. Because the project is archived, every package and model loaded into that process becomes part of your application's supply chain, and no upstream fixes will arrive automatically.
- Process isolation: Scanners inherit the application's permissions. Confirm whether the application runs them under a dedicated service account without write access to its configuration or secrets store.
- Artifact mirroring: Pin the PyPI version and copy it, with its dependencies, into your internal package repository so builds do not depend on a live index.
- Image scanning: Scan the application image after the scanner packages are installed, since the affected component is the combined image, not the library alone.
- Offline model loading: Pre-stage Hugging Face model files in your artifact store and configure the loader to read local paths so the application does not download models at startup.
- Evidence: A software bill of materials for the application that lists the scanner and its transitive dependencies, plus recorded hashes for each model file.
Ask the platform team whether the runtime user, egress rules and model cache paths match the design documents.
Running LLM Guard as a separate API server creates a network service that other components call over HTTP. The service receives untrusted prompts and model responses, holds models in memory and can be reached by anything that can reach its port. Controls move from the application into the service boundary, and the server becomes the place where you prove that only approved callers can use it.
- Network policy: Restrict ingress to the calling application's subnet or workload identity, and deny egress except to approved model sources and internal mirrors.
- Process isolation: Run the server as a non-root user in its own container or virtual machine, separate from the application that calls it.
- Artifact mirroring: Host the server package and model files in internal repositories, and record which mirror version each deployment uses.
- Image scanning: Scan the server image on every rebuild and on a fixed schedule, because this image tends to stay in service longest.
- Evidence: Access logs that show which callers reached the scanner, exported network rule configuration, and an inventory of server and model versions in production.
Confirm with the platform team how the endpoint authenticates callers and whether that setting is enforced in the deployed configuration, not only in the code.
In a cluster, the scanner runs as one or more pods, so controls move to Kubernetes primitives: namespaces, network policies, pod security settings, admission control and the container registry. Each added replica multiplies the places where an unpatched component runs, so consistency of the image and its configuration matters more than in a single host.
- Network policy: Use namespace-scoped policies that allow ingress only from labeled application pods and block egress except to the internal model mirror. Confirm that your cluster's network plugin enforces these policies.
- Process isolation: Apply the restricted pod security profile where your cluster supports it, with a read-only root filesystem and dropped Linux capabilities. Confirm the scanner image runs under those settings.
- Artifact mirroring: Pull images only from an internal registry and pin the image digest in each deployment manifest.
- Image scanning: Gate admission on registry scan results, and rescan running images on a schedule, because new findings appear after deployment.
- Evidence: Admission policy records, manifests stored in version control, and scan reports tied to image digests.
Ask the platform team which admission controller enforces the image rules and whether exceptions for the archived component are logged and reviewed.
Without outbound internet access, every control that depends on a live lookup must be replaced by a transfer you can inspect. Package indexes and model hubs cannot be queried at runtime, so each dependency, model file and vulnerability database enters the enclave through a controlled import path. That path becomes the main evidence trail, because it shows what entered the environment and who approved it.
- Offline model loading: Load model files only from an approved local path and disable any runtime download behavior. Confirm the loader fails closed when a file is missing or its hash does not match.
- Artifact mirroring: Import packages through a transfer process that verifies hashes, and keep a versioned record of each import.
- Network policy: Deny all egress at the host or cluster level so a misconfigured setting cannot reach an external model source.
- Image scanning: Scan images inside the enclave using a vulnerability database updated through the same controlled transfer, and record the database date with each scan.
- Evidence: Transfer logs with checksums, signed approval records for each import, and test results showing that blocked egress stayed blocked.
Confirm with the platform team how database updates reach the enclave and who approves each transfer.
How to test LLM Guard security controls without trusting the scanners
The test plan should show that the controls around LLM Guard hold even when the scanners themselves miss something, because an archived project cannot be assumed to still catch what it was built to catch. Run four checks against the deployed configuration, not a developer workstation: a fail-closed check, a regression set of known attack samples, an access check on the API server, and an artifact hash check against the internal mirror. Record who ran each check, against which build and configuration, and when. Define the expected result for every check before the first run so that a result cannot be reinterpreted afterward.
Fail-closed check. Confirm that a scanner error or timeout produces the outcome your written policy requires, either blocking the request or flagging it for review. Stop the scanner process or the service it depends on in a test environment that mirrors production, or send an input that forces a timeout, then submit a request the policy would normally stop. Test both the input and output paths, because output scanners such as Sensitive and Malicious URLs can fail independently of the input scanners. A request that reaches the model or the user unscanned is a failed result. Read the timeout value from your own configuration before the test begins.
Regression set and access checks. Build a regression set of known prompt injection samples, secret-leak samples that use clearly fake key-shaped strings, and invisible-text samples that exercise the Prompt Injection, Secrets and Invisible Text scanners. Store the set in a repository your security team controls and version it, so the team can show what was tested. Run it against the deployed scanner settings and compare each outcome with the threshold in policy. Then call the API server without credentials and from an address outside the approved network ranges. Both calls should be rejected, and the rejections should appear in logs.
Artifact hash check and failure handling. After deployment, compare the hashes of the installed packages and the Hugging Face model files with the hashes recorded in the internal mirror manifest. Any mismatch is a failed result until it is explained. When a check fails, open a finding with the test input, the log output and the configuration version. The service owner, with security sign-off, decides whether to roll back to the last passing build. The security lead decides whether to tighten the scanner set, such as enabling additional scanners or lowering thresholds. Rerun the full set after any model, package, configuration or scanner change, and keep the inputs outside the LLM Guard deployment's own write path.
Access control and secrets for the scanner service
An archived LLM Guard deployment will not receive upstream fixes, so the controls around it carry more weight. The cards below cover who can reach and change the scanner, how its configuration and credentials are kept under control, and what evidence the client should keep while a replacement is underway.
Restrict access to the API server
If LLM Guard runs as an API server, every application that calls it inherits its exposure. Limit callers to the specific services that need scanning, place the server on a private network segment, and require authenticated, network-restricted connections. Owner: platform engineering. Evidence: network policy exports, an access list of permitted callers, and change records for any edits to those rules.
Control who changes the server
Restrict deployment and administrative rights on the scanner host or container to a named group, separate from the team that changes the application. Confirm that only approved pipelines can publish a new image or alter the running service. Owner: infrastructure lead. Evidence: role assignments in the cloud or cluster, deployment pipeline logs, and a list of accounts with write access to the scanner's runtime.
Separate scanner configuration from application code
Scanner choices such as which input and output scanners are enabled, their thresholds and allowed topics should live in versioned configuration that goes through change review, not inside application code that developers edit freely. This keeps a change to a scanning rule visible and reversible. Owner: application security. Evidence: the configuration repository, approved pull requests, and a record of which configuration version was running at each date.
Keep credentials in the client's secrets manager
Any API keys for third-party services, model access tokens and service credentials used by the scanner should sit in the client's secrets manager, never in configuration files, images or environment variables baked into builds. Set a rotation schedule for each secret and confirm that rotation does not require rebuilding the image. Owner: security operations. Evidence: a secrets inventory, rotation logs, and access audit entries for each secret.
Limit outbound traffic from the scanner
Because the models in use are no longer updated, a scanner that can fetch new models or code from the internet adds unreviewed content to production. Block general egress and allow only the endpoints you have approved, and pin the model files you have tested by checksum. Owner: network security. Evidence: egress rule sets, the list of approved model artifacts with hashes, and blocked connection logs.
Log verdicts without sensitive content
Record each scanner decision with a timestamp, the scanner name, the verdict, a risk score if produced, and a request identifier that links back to the calling application. Do not write the raw prompt or response into the log, since that content may contain personal or regulated data. Owner: security operations with the data protection lead. Evidence: a log schema, sample log entries that show redaction, and retention settings.
Review the image on a fixed schedule
Scan the container or host image for known vulnerabilities on a set schedule and after any base image change, and record the results against the pinned LLM Guard version (0.3.16 is the last PyPI release). Confirm the Python runtime stays within the supported range of 3.10 or newer but below 3.13. Owner: platform engineering. Evidence: scan reports with dates, a remediation tracker, and the approved image digest in use.
What to monitor, document and hand over during the interim period
The interim period needs a monitoring set that shows whether the archived LLM Guard deployment still behaves as it did on the day it was accepted. Track scanner errors and latency for each input and output scanner the application calls, so a failing or slowing scanner is visible before users notice it. Track verdict rates per scanner as well. A sudden drop in flagged prompts from a scanner such as Prompt Injection or Invisible Text can mean the scanner has stopped working, and a sudden rise can mean the traffic has changed. Record model load failures at startup and after every restart, because the Hugging Face models will not receive fixes. Watch for unexpected egress from the scanner host too. A model or dependency that reaches an unknown endpoint is a security event, so it belongs in the incident queue alongside other security alerts.
Back up three things so the deployment can be rebuilt from a known state. First, the configuration: scanner selection, thresholds, the pinned LLM Guard version (the last PyPI release is 0.3.16, uploaded on 19 May 2025), the Python interpreter version, which must be 3.10 or newer and below 3.13, and the API server settings if the service runs in that mode. Second, a mirror of every model the enabled scanners load, stored in the client's own artifact store, so that a model changed or removed upstream cannot alter the running system without anyone noticing. Third, cryptographic hashes for the package files, model files and configuration bundle, recorded at acceptance and checked on every restore. Confirm with your engineers which models your chosen scanner set downloads at runtime, because that list depends on what you enabled.
Document the interim state in six artifacts that an assessor can read without a walkthrough. The system description states what the service does, which data it receives and where it runs. The inventory lists every host, container image, Python package, model and scanner in use, with versions. The risk acceptance records each known exposure from the archive, who accepted it, the compensating controls in place and the date of the next review. The test results show that the scanners were exercised against your own prompt and response samples after the most recent change. The change log records every configuration, version or model change with its approver. The replacement plan sets out the milestones toward a maintained guardrail, with dates the client sets and owns.
Assessors usually ask for the same evidence in a predictable order: who owns the system, what is in it, which risks were accepted and by whom, whether the controls operated over the period, and how the exposure will be removed. Have ready the monitoring exports for the period, the restore test records from the backup, the hash verification logs and the signed risk acceptance. DeployOpen prepares this evidence and the controls that generate it, and the support guide covers the routine checks that produce it day to day. The replacement schedule is set by the client, so the milestones should come from the client's governance and budget cycle. Independent auditors or certification bodies decide whether the evidence meets a given standard and issue any opinion or certificate. DeployOpen does not issue audit reports, attestations or certifications.
Questions teams ask before securing an archived LLM Guard
Can our own team secure an archived LLM Guard deployment without a partner?
Often yes, if the team has engineers who can manage Python packaging, container or host hardening, network segmentation and secrets handling, and if someone accepts ongoing ownership of the deployment. The work splits into a one-time hardening pass (pinning the library and models, restricting egress, isolating the API server, moving secrets out of configuration files) and recurring work (reviewing exposure, tracking the Python version ceiling and rebuilding images). Teams usually struggle less with the technical steps than with time: the work competes with feature delivery and needs an accountable owner. A useful internal test is whether the team can write down, for each deployed scanner, what it receives, what it returns and who can change it. If that answer takes days to assemble, a scoped outside review may be faster than building the inventory from scratch.
What drives the cost and effort of securing LLM Guard?
Cost follows the number of deployments and how much of LLM Guard each one uses. The main drivers are the number of input and output scanners enabled (LLM Guard documents 15 input scanners and 20 output scanners), whether models are downloaded from Hugging Face at runtime or mirrored internally, how many applications call the guardrail, and how much evidence an assessor will expect. Environment complexity matters too: cloud accounts, data centers and air-gapped networks each change how images are built and how models reach the system. Costs fall into staff time on your side, fees paid for scoped external work, and recurring effort for patch review and evidence refresh. When you request a quote, ask for line items separated into one-time and recurring work, the assumptions behind each item, and what changes if a scanner is added or removed.
How long does it take to secure an archived LLM Guard deployment?
The duration depends mainly on dependencies you do not control, so plan around those rather than a fixed number. The most common constraints are change windows for production, approvals from the network team for egress and segmentation changes, secrets rotation schedules, the time needed to mirror and verify model artifacts in an internal registry, and access to a test environment that matches production traffic. Each application team that calls the guardrail may also need to confirm how it handles blocked or altered content. Work usually moves fastest when access, owners and test data are ready on day one. Ask any provider to list each dependency as a milestone with the party responsible for it, so schedule risk is visible before work starts.
What does the work need from our side before it starts?
The engagement needs a small set of people and information to be available early. Inventory access covers every host, container, API endpoint and application that calls LLM Guard, including the scanners enabled on each. A named risk owner must have authority to accept residual risk and approve compensating controls. The network team must confirm current ingress and egress paths and approve changes. The secrets team must confirm where API keys and tokens are stored and who can rotate them. Application owners should describe how they use scanner results, and the platform team needs access to build pipelines and the deployment environment. Missing any of these usually shows up as paused work rather than as a technical failure, so confirm each name and access path in the written scope.
Is running archived LLM Guard as-is acceptable for an audit?
Usually not without documentation, and the final decision belongs to your auditor. The project's README states that LLM Guard and its models on Hugging Face are no longer under active development or maintained, so upstream fixes are not expected to arrive. An assessor will typically ask how you identified this, what you decided, who approved the decision, and what compensating controls reduce exposure in the meantime. A defensible record includes the risk assessment, a named owner, documented risk acceptance with an expiry date, interim controls (pinned versions, restricted network access, controlled model sources, logging) and a dated migration plan. Confirm the required format and control mapping with your auditor before you collect evidence, because expectations differ by framework and by organization.
Can DeployOpen issue an audit report or certification for our LLM Guard setup?
No. DeployOpen does not issue audit reports, attestations or certifications. Its role is to prepare the systems, controls and evidence that an assessment will examine, such as configuration records, access documentation, hardening baselines, test results and the risk acceptance file. Independent auditors and certification bodies perform the assessment and issue any report or certificate. Before engaging anyone, ask your auditor which evidence they need and in what format, then ask the provider to map deliverables to those requests. A provider that offers to certify your system or guarantee an assessment outcome is not describing this kind of work accurately, and you should treat that offer with caution.
What should a written scope for LLM Guard security work include?
A written scope should make the boundaries testable. Include the deployments in scope (environments, hosts, containers and API endpoints), the LLM Guard version and Python runtime in use (the last PyPI release, 0.3.16, supports Python 3.10 or newer but below 3.13), the scanners enabled on each deployment, the model sources and how they are mirrored, and the applications that depend on the guardrail. Then list deliverables, the evidence format, the responsibilities of each party, explicit exclusions, acceptance criteria, change control for scope shifts and the dependencies listed above. DeployOpen plans most engagements as fixed scope, with scope, deliverables and timelines agreed in writing before work starts. Ask for the same structure from any provider, and check that each deliverable can be verified by someone outside the project.
How DeployOpen works on this
DeployOpen approaches LLM Guard security risks after archival as a fixed-scope piece of work inside your own infrastructure. We start from the written scope, build interim controls and evidence around the existing deployment, and hand over documentation your team can run and audit.
How we scope
- Inventory every LLM Guard install, the Python version it runs on, and the scanners each application calls.
- Record which Hugging Face models are pulled, their pinned revisions, and where they are cached.
- Agree in writing which exposure reductions, tests and evidence items are in scope before work starts.
How we build
- Pin the package version and model artifacts, and mirror them into a registry your team controls.
- Place the scanning API behind network restrictions, authentication and logging suited to your environment.
- Test input and output scanner behavior against your own prompts to document where coverage is weaker.
How we hand over
- Deliver a runbook covering the pinned versions, model inventory, configuration and known limitations.
- Document the mapping from each in-use scanner to the controls it supports, so gaps stay visible to auditors.
- Provide a dated plan for moving to a maintained guardrail, with the decision points your team still owns.
How we support
- Ongoing support, periodic review and continuous testing are available as retainers after the handover.
- Ask any support provider to confirm response scope, since the upstream project no longer receives fixes.
- Confirm with your own security team how interim controls will be reviewed and retired during the replacement.

