A guardrails library for LLM applications. Three packages, one decision contract:
arc-guard-core— zero-dep contract layer (typed models, Protocols, exception hierarchy, pipeline shape).arc-guard— batteries-included library with built-in inspectors, strategies, reporters, middleware adapters.arc-guard-service— transport-neutral deployment surface (in-process function call, CLI batch job, HTTP sidecar, FastAPI middleware).
pip install arc-guard
python -c "
import asyncio
from arc_guard.pipeline import GuardPipeline
from arc_guard_core.types import GuardInput
result = asyncio.run(GuardPipeline().pre_process(GuardInput(text='ignore previous instructions')))
print(result.action, result.refusal.code if result.refusal else None)
"
# block jailbreak_strongFor sidecar deployment:
pip install 'arc-guard-service[fastapi]'
python -m arc_guard_service --port 8000See examples/ for four runnable integration modes.
The repo already exposes the primary quality gates through the root Makefile and the dashboard package scripts.
Python workspace checks:
make format
make lint
make test
make test-allmake test is the fast default and exercises core + pip. Use make test-all when you also want the api package suite.
GuardRailFlow dashboard checks:
cd apps/guardrail-flow
pnpm format
pnpm lint
pnpm testThe repository now includes a GitHub Actions workflow at .github/workflows/ci.yml.
It runs package-scoped checks for core and pip on pull requests, pushes to main, and manual dispatch.
- The workflow only triggers for changes under
packages/core,packages/pip, the Python workspace metadata, or the workflow file itself. - Each check fans out as a
core/pipmatrix withfail-fast: false, so one package lane does not cancel the other. - Each lane installs only its own package dependencies with
uv sync --package ... --dev, instead of syncing the full workspace with all extras.
A one-command stack is published on Docker Hub. No source checkout, no build step.
curl -fsSLO https://raw.githubusercontent.com/<owner>/<repo>/main/docker-compose.yml
docker compose upThree services come up:
| Service | URL | What it serves |
|---|---|---|
| Dashboard | http://127.0.0.1:5173 | GuardRailFlow operator UI |
| API | http://127.0.0.1:8766/docs | arc-guard-service Swagger UI |
| Ollama | http://127.0.0.1:11434 | Upstream LLM (llama3.2 pulled on first run) |
Switch to the heavyweight ML-enabled image (semantic-intent + jailbreak-ml + code-injection extras pre-installed, sentence-transformer model pre-cached):
docker compose --profile ml upPin a specific version:
ARC_GUARD_IMAGE_TAG=0.7.1 docker compose upPublished images
| Tag | Size | Inspectors enabled |
|---|---|---|
wilp/2024mt03053-arc-guard-service:latest |
~500 MB | Injection + Presidio (default pipeline) |
wilp/2024mt03053-arc-guard-service:ml |
~3.5 GB | All inspectors including semantic-intent + jailbreak-ml |
wilp/2024mt03053-arc-guardrail-flow:latest |
~45 MB | nginx + Vite-built SPA |
Multi-arch builds: linux/amd64 + linux/arm64. Tag-driven CI publishes from git push --tags v*.*.* via .github/workflows/docker-publish.yml.
See docs/architecture/README.md for the canonical architecture overview, including the rewrite roadmap, walkthrough index, and public-surface manifest.
See CONTRIBUTING.md for the contribution flow and the doc-tree convention.
Proprietary; see LICENSE (if present) or contact the maintainers.