Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# These are supported funding model platforms

github: rennf93
github: Guard-Core
# patreon: # Replace with a single Patreon username
# open_collective: # Replace with a single Open Collective username
# ko_fi: # Replace with a single Ko-fi username
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
blank_issues_enabled: false
contact_links:
- name: Guard Agent Documentation
url: https://rennf93.github.io/guard-agent/
url: https://guard-core.github.io/guard-agent/
about: Check the documentation for usage information and tutorials
- name: Usage Questions
url: https://github.com/rennf93/guard-agent/discussions
url: https://github.com/Guard-Core/guard-agent/discussions
about: Please ask and answer questions in GitHub Discussions
- name: Discord
url: https://discord.gg/ZW7ZJbjMkK
Expand Down
57 changes: 57 additions & 0 deletions .github/workflows/container-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Publish Containerized Demo

on:
release:
types: [created]
push:
branches:
- master
paths:
- 'examples/**'
- 'guard_agent/**'
- 'pyproject.toml'
- '.github/workflows/container-release.yml'
workflow_dispatch:

jobs:
publish-container:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read

steps:
- name: Checkout code
uses: actions/checkout@v7

- name: Set version tag
id: set_version
run: |
if [[ "${{ github.event_name }}" == "release" ]]; then
echo "VERSION=${{ github.event.release.tag_name }}" >> $GITHUB_ENV
echo "IS_RELEASE=true" >> $GITHUB_ENV
else
echo "VERSION=latest" >> $GITHUB_ENV
echo "IS_RELEASE=false" >> $GITHUB_ENV
fi

- name: Log in to GHCR
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build image
run: |
docker build -f examples/demo_app/Dockerfile -t guard-agent-demo .

- name: Tag and Push to GHCR
run: |
docker tag guard-agent-demo ghcr.io/guard-core/guard-agent:latest
docker push ghcr.io/guard-core/guard-agent:latest

if [[ "${{ env.IS_RELEASE }}" == "true" ]]; then
docker tag guard-agent-demo ghcr.io/guard-core/guard-agent:${{ env.VERSION }}
docker push ghcr.io/guard-core/guard-agent:${{ env.VERSION }}
fi
14 changes: 7 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ uv run pytest tests/test_buffer.py::test_name -v

## Related Projects

- **guard-core** - Framework-agnostic security engine (telemetry models live here too): <https://github.com/rennf93/guard-core>
- **fastapi-guard** - FastAPI/Starlette adapter: <https://github.com/rennf93/fastapi-guard>
- **flaskapi-guard** - Flask extension adapter: <https://github.com/rennf93/flaskapi-guard>
- **djapi-guard** - Django middleware adapter: <https://github.com/rennf93/djapi-guard>
- **tornadoapi-guard** - Tornado handler/middleware adapter: <https://github.com/rennf93/tornadoapi-guard>
- **guard-core-mcp** - MCP server for config validation and docs search: <https://github.com/rennf93/guard-core-mcp>
- **guard-core-app** - SaaS platform this agent reports to (ingestion API, dashboard, playground): <https://github.com/rennf93/guard-core-app>
- **guard-core** - Framework-agnostic security engine (telemetry models live here too): <https://github.com/Guard-Core/guard-core>
- **fastapi-guard** - FastAPI/Starlette adapter: <https://github.com/Guard-Core/fastapi-guard>
- **flaskapi-guard** - Flask extension adapter: <https://github.com/Guard-Core/flaskapi-guard>
- **djapi-guard** - Django middleware adapter: <https://github.com/Guard-Core/djapi-guard>
- **tornadoapi-guard** - Tornado handler/middleware adapter: <https://github.com/Guard-Core/tornadoapi-guard>
- **guard-core-mcp** - MCP server for config validation and docs search: <https://github.com/Guard-Core/guard-core-mcp>
- **guard-core-app** - SaaS platform this agent reports to (ingestion API, dashboard, playground): <https://github.com/Guard-Core/guard-core-app>
14 changes: 7 additions & 7 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ uv run pytest tests/test_buffer.py::test_name -v

## Related Projects

- **guard-core** - Framework-agnostic security engine (telemetry models live here too): <https://github.com/rennf93/guard-core>
- **fastapi-guard** - FastAPI/Starlette adapter: <https://github.com/rennf93/fastapi-guard>
- **flaskapi-guard** - Flask extension adapter: <https://github.com/rennf93/flaskapi-guard>
- **djapi-guard** - Django middleware adapter: <https://github.com/rennf93/djapi-guard>
- **tornadoapi-guard** - Tornado handler/middleware adapter: <https://github.com/rennf93/tornadoapi-guard>
- **guard-core-mcp** - MCP server for config validation and docs search: <https://github.com/rennf93/guard-core-mcp>
- **guard-core-app** - SaaS platform this agent reports to (ingestion API, dashboard, playground): <https://github.com/rennf93/guard-core-app>
- **guard-core** - Framework-agnostic security engine (telemetry models live here too): <https://github.com/Guard-Core/guard-core>
- **fastapi-guard** - FastAPI/Starlette adapter: <https://github.com/Guard-Core/fastapi-guard>
- **flaskapi-guard** - Flask extension adapter: <https://github.com/Guard-Core/flaskapi-guard>
- **djapi-guard** - Django middleware adapter: <https://github.com/Guard-Core/djapi-guard>
- **tornadoapi-guard** - Tornado handler/middleware adapter: <https://github.com/Guard-Core/tornadoapi-guard>
- **guard-core-mcp** - MCP server for config validation and docs search: <https://github.com/Guard-Core/guard-core-mcp>
- **guard-core-app** - SaaS platform this agent reports to (ingestion API, dashboard, playground): <https://github.com/Guard-Core/guard-core-app>
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
@rennf93.
contact@guard-core.com.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
Expand Down
73 changes: 38 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<p align="center">
<a href="https://rennf93.github.io/guard-agent/latest/">
<img src="https://rennf93.github.io/guard-agent/latest/assets/guard_agent_legend.svg" alt="Guard Agent">
<a href="https://guard-core.github.io/guard-agent/latest/">
<img src="https://guard-core.github.io/guard-agent/latest/assets/guard_agent_legend.svg" alt="Guard Agent">
</a>
</p>

Expand All @@ -14,28 +14,31 @@
<a href="https://badge.fury.io/py/guard-agent">
<img src="https://badge.fury.io/py/guard-agent.svg?cache=none&icon=si%3Apython&icon_color=%23008cb4" alt="PyPiVersion">
</a>
<a href="https://github.com/rennf93/guard-agent/actions/workflows/release.yml">
<img src="https://github.com/rennf93/guard-agent/actions/workflows/release.yml/badge.svg" alt="Release">
<a href="https://github.com/Guard-Core/guard-agent/actions/workflows/release.yml">
<img src="https://github.com/Guard-Core/guard-agent/actions/workflows/release.yml/badge.svg" alt="Release">
</a>
<a href="https://opensource.org/licenses/MIT">
<img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License">
</a>
<a href="https://github.com/rennf93/guard-agent/actions/workflows/ci.yml">
<img src="https://github.com/rennf93/guard-agent/actions/workflows/ci.yml/badge.svg" alt="CI">
<a href="https://github.com/Guard-Core/guard-agent/actions/workflows/ci.yml">
<img src="https://github.com/Guard-Core/guard-agent/actions/workflows/ci.yml/badge.svg" alt="CI">
</a>
<a href="https://github.com/rennf93/guard-agent/actions/workflows/code-ql.yml">
<img src="https://github.com/rennf93/guard-agent/actions/workflows/code-ql.yml/badge.svg" alt="CodeQL">
<a href="https://github.com/Guard-Core/guard-agent/actions/workflows/code-ql.yml">
<img src="https://github.com/Guard-Core/guard-agent/actions/workflows/code-ql.yml/badge.svg" alt="CodeQL">
</a>
</p>

<p align="center">
<a href="https://github.com/rennf93/guard-agent/actions/workflows/pages/pages-build-deployment">
<img src="https://github.com/rennf93/guard-agent/actions/workflows/pages/pages-build-deployment/badge.svg?branch=gh-pages" alt="PagesBuildDeployment">
<a href="https://github.com/Guard-Core/guard-agent/actions/workflows/pages/pages-build-deployment">
<img src="https://github.com/Guard-Core/guard-agent/actions/workflows/pages/pages-build-deployment/badge.svg?branch=gh-pages" alt="PagesBuildDeployment">
</a>
<a href="https://github.com/rennf93/guard-agent/actions/workflows/docs.yml">
<img src="https://github.com/rennf93/guard-agent/actions/workflows/docs.yml/badge.svg" alt="DocsUpdate">
<a href="https://github.com/Guard-Core/guard-agent/actions/workflows/docs.yml">
<img src="https://github.com/Guard-Core/guard-agent/actions/workflows/docs.yml/badge.svg" alt="DocsUpdate">
</a>
<img src="https://img.shields.io/github/last-commit/rennf93/guard-agent?style=flat&amp;logo=git&amp;logoColor=white&amp;color=0080ff" alt="last-commit">
<a href="https://guard-core.github.io/guard-agent/latest/">
<img src="https://img.shields.io/badge/docs-latest-0080ff?style=flat&amp;logo=readthedocs&amp;logoColor=white" alt="Docs">
</a>
<img src="https://img.shields.io/github/last-commit/Guard-Core/guard-agent?style=flat&amp;logo=git&amp;logoColor=white&amp;color=0080ff" alt="last-commit">
</p>

<p align="center">
Expand All @@ -48,7 +51,7 @@

<p align="center">
<a href="https://guard-core.com">Website</a> &middot;
<a href="https://rennf93.github.io/guard-agent/latest/">Docs</a> &middot;
<a href="https://guard-core.github.io/guard-agent/latest/">Docs</a> &middot;
<a href="https://playground.guard-core.com">Playground</a> &middot;
<a href="https://app.guard-core.com">Dashboard</a> &middot;
<a href="https://discord.gg/ZW7ZJbjMkK">Discord</a>
Expand All @@ -69,7 +72,7 @@ Documentation & Platform
========================

- 🌐 **[guard-core.com](https://guard-core.com)** — marketing site & product overview
- 📚 **[Documentation](https://rennf93.github.io/guard-agent/latest/)** — full technical documentation
- 📚 **[Documentation](https://guard-core.github.io/guard-agent/latest/)** — full technical documentation
- 🎮 **[Playground](https://playground.guard-core.com)** — try the Guard stack in-browser, no install required
- 📊 **[Dashboard](https://app.guard-core.com)** — real-time security events, metrics, and dynamic rules for your projects
- 💬 **[Discord](https://discord.gg/ZW7ZJbjMkK)** — community & maintainer support
Expand All @@ -85,42 +88,42 @@ Guard Agent is the Python telemetry agent for the Guard ecosystem. It pairs with

| Package | Role | PyPI |
|---|---|---|
| [guard-core](https://github.com/rennf93/guard-core) | Framework-agnostic security engine | [![PyPI](https://img.shields.io/pypi/v/guard-core)](https://pypi.org/project/guard-core/) |
| [guard-agent](https://github.com/rennf93/guard-agent) | Telemetry agent (this package) | [![PyPI](https://img.shields.io/pypi/v/guard-agent)](https://pypi.org/project/guard-agent/) |
| [fastapi-guard](https://github.com/rennf93/fastapi-guard) | FastAPI / Starlette adapter | [![PyPI](https://img.shields.io/pypi/v/fastapi-guard)](https://pypi.org/project/fastapi-guard/) |
| [flaskapi-guard](https://github.com/rennf93/flaskapi-guard) | Flask adapter | [![PyPI](https://img.shields.io/pypi/v/flaskapi-guard)](https://pypi.org/project/flaskapi-guard/) |
| [djapi-guard](https://github.com/rennf93/djapi-guard) | Django adapter | [![PyPI](https://img.shields.io/pypi/v/djapi-guard)](https://pypi.org/project/djapi-guard/) |
| [tornadoapi-guard](https://github.com/rennf93/tornadoapi-guard) | Tornado adapter | [![PyPI](https://img.shields.io/pypi/v/tornadoapi-guard)](https://pypi.org/project/tornadoapi-guard/) |
| [guard-core](https://github.com/Guard-Core/guard-core) | Framework-agnostic security engine | [![PyPI](https://img.shields.io/pypi/v/guard-core)](https://pypi.org/project/guard-core/) |
| [guard-agent](https://github.com/Guard-Core/guard-agent) | Telemetry agent (this package) | [![PyPI](https://img.shields.io/pypi/v/guard-agent)](https://pypi.org/project/guard-agent/) |
| [fastapi-guard](https://github.com/Guard-Core/fastapi-guard) | FastAPI / Starlette adapter | [![PyPI](https://img.shields.io/pypi/v/fastapi-guard)](https://pypi.org/project/fastapi-guard/) |
| [flaskapi-guard](https://github.com/Guard-Core/flaskapi-guard) | Flask adapter | [![PyPI](https://img.shields.io/pypi/v/flaskapi-guard)](https://pypi.org/project/flaskapi-guard/) |
| [djapi-guard](https://github.com/Guard-Core/djapi-guard) | Django adapter | [![PyPI](https://img.shields.io/pypi/v/djapi-guard)](https://pypi.org/project/djapi-guard/) |
| [tornadoapi-guard](https://github.com/Guard-Core/tornadoapi-guard) | Tornado adapter | [![PyPI](https://img.shields.io/pypi/v/tornadoapi-guard)](https://pypi.org/project/tornadoapi-guard/) |

### TypeScript / JavaScript

Published under the [`@guardcore`](https://www.npmjs.com/org/guardcore) npm scope. Source in the [guard-core-ts](https://github.com/rennf93/guard-core-ts) monorepo. **Production-ready.**
Published under the [`@guardcore`](https://www.npmjs.com/org/guardcore) npm scope. Source in the [guard-core-ts](https://github.com/Guard-Core/guard-core-ts) monorepo. **Production-ready.**

| Package | Role | npm |
|---|---|---|
| [@guardcore/core](https://github.com/rennf93/guard-core-ts/tree/master/packages/core) | Core engine | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fcore)](https://www.npmjs.com/package/@guardcore/core) |
| [@guardcore/express](https://github.com/rennf93/guard-core-ts/tree/master/packages/express) | Express adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fexpress)](https://www.npmjs.com/package/@guardcore/express) |
| [@guardcore/nestjs](https://github.com/rennf93/guard-core-ts/tree/master/packages/nestjs) | NestJS adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fnestjs)](https://www.npmjs.com/package/@guardcore/nestjs) |
| [@guardcore/fastify](https://github.com/rennf93/guard-core-ts/tree/master/packages/fastify) | Fastify adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Ffastify)](https://www.npmjs.com/package/@guardcore/fastify) |
| [@guardcore/hono](https://github.com/rennf93/guard-core-ts/tree/master/packages/hono) | Hono adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fhono)](https://www.npmjs.com/package/@guardcore/hono) |
| [@guardcore/core](https://github.com/Guard-Core/guard-core-ts/tree/master/packages/core) | Core engine | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fcore)](https://www.npmjs.com/package/@guardcore/core) |
| [@guardcore/express](https://github.com/Guard-Core/guard-core-ts/tree/master/packages/express) | Express adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fexpress)](https://www.npmjs.com/package/@guardcore/express) |
| [@guardcore/nestjs](https://github.com/Guard-Core/guard-core-ts/tree/master/packages/nestjs) | NestJS adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fnestjs)](https://www.npmjs.com/package/@guardcore/nestjs) |
| [@guardcore/fastify](https://github.com/Guard-Core/guard-core-ts/tree/master/packages/fastify) | Fastify adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Ffastify)](https://www.npmjs.com/package/@guardcore/fastify) |
| [@guardcore/hono](https://github.com/Guard-Core/guard-core-ts/tree/master/packages/hono) | Hono adapter | [![npm](https://img.shields.io/npm/v/%40guardcore%2Fhono)](https://www.npmjs.com/package/@guardcore/hono) |

### Rust

Published on crates.io. **🚧 Placeholder crates — implementation in progress.**

| Package | Role | crates.io |
|---|---|---|
| [guard-core](https://github.com/rennf93/guard-core-rs) | Core engine | [![crates.io](https://img.shields.io/crates/v/guard-core)](https://crates.io/crates/guard-core) |
| [actix-guard-rs](https://github.com/rennf93/actix-guard-rs) | Actix adapter | [![crates.io](https://img.shields.io/crates/v/actix-guard-rs)](https://crates.io/crates/actix-guard-rs) |
| [axum-guard-rs](https://github.com/rennf93/axum-guard-rs) | Axum adapter | [![crates.io](https://img.shields.io/crates/v/axum-guard-rs)](https://crates.io/crates/axum-guard-rs) |
| [rocket-guard-rs](https://github.com/rennf93/rocket-guard-rs) | Rocket adapter | [![crates.io](https://img.shields.io/crates/v/rocket-guard-rs)](https://crates.io/crates/rocket-guard-rs) |
| [tower-guard-rs](https://github.com/rennf93/tower-guard-rs) | Tower adapter | [![crates.io](https://img.shields.io/crates/v/tower-guard-rs)](https://crates.io/crates/tower-guard-rs) |
| [guard-core](https://github.com/Guard-Core/guard-core-rs) | Core engine | [![crates.io](https://img.shields.io/crates/v/guard-core)](https://crates.io/crates/guard-core) |
| [actix-guard-rs](https://github.com/Guard-Core/actix-guard-rs) | Actix adapter | [![crates.io](https://img.shields.io/crates/v/actix-guard-rs)](https://crates.io/crates/actix-guard-rs) |
| [axum-guard-rs](https://github.com/Guard-Core/axum-guard-rs) | Axum adapter | [![crates.io](https://img.shields.io/crates/v/axum-guard-rs)](https://crates.io/crates/axum-guard-rs) |
| [rocket-guard-rs](https://github.com/Guard-Core/rocket-guard-rs) | Rocket adapter | [![crates.io](https://img.shields.io/crates/v/rocket-guard-rs)](https://crates.io/crates/rocket-guard-rs) |
| [tower-guard-rs](https://github.com/Guard-Core/tower-guard-rs) | Tower adapter | [![crates.io](https://img.shields.io/crates/v/tower-guard-rs)](https://crates.io/crates/tower-guard-rs) |

### AI Coding Agents

| Package | Role | PyPI |
|---|---|---|
| [guard-core-mcp](https://github.com/rennf93/guard-core-mcp) | MCP server — config validation, docs search, detection sandbox | [![PyPI](https://img.shields.io/pypi/v/guard-core-mcp)](https://pypi.org/project/guard-core-mcp/) |
| [guard-core-mcp](https://github.com/Guard-Core/guard-core-mcp) | MCP server — config validation, docs search, detection sandbox | [![PyPI](https://img.shields.io/pypi/v/guard-core-mcp)](https://pypi.org/project/guard-core-mcp/) |

An MCP server that answers questions about Guard Agent from the version **installed in your project**, rather than from a model's memory of it. It validates a config against the real `AgentConfig` model — catching typos pydantic would otherwise ignore silently — looks up any field's type, default and description, and searches the bundled docs for all three Python packages.

Expand Down Expand Up @@ -222,7 +225,7 @@ async def root() -> dict[str, str]:
return {"message": "Hello World"}
```

Flask is synchronous and handles start/stop internally; Tornado uses `await security_middleware.initialize()` / `reset()`; Django wires the middleware via settings. See [docs/adapters](https://rennf93.github.io/guard-agent/latest/adapters/fastapi/) for the canonical pattern per framework.
Flask is synchronous and handles start/stop internally; Tornado uses `await security_middleware.initialize()` / `reset()`; Django wires the middleware via settings. See [docs/adapters](https://guard-core.github.io/guard-agent/latest/adapters/fastapi/) for the canonical pattern per framework.

With `enable_agent=True`, the agent automatically:

Expand Down Expand Up @@ -334,7 +337,7 @@ This project is licensed under the MIT License. See the [LICENSE](LICENSE) file
Author
------

Renzo Franceschini - [rennf93@users.noreply.github.com](mailto:rennf93@users.noreply.github.com)
Renzo Franceschini - [contact@guard-core.com](mailto:contact@guard-core.com)

---

Expand Down
Loading
Loading