Skip to main content

TESSERA

AI Security Scanner for Compound Attack Chain Detection

Version: 2.0.0
Date: April 2026

What

TESSERA detects compound attack chains in AI/Agent systems using CFPE Rules - rule-based detection of known vulnerability patterns. It also supports optional LLM-powered analysis for semantic vulnerability detection.

The primary production surface is the public Python package and CLI. The FastAPI service is supported as a secondary deployment target for container-on-VM environments behind a reverse proxy.

Features

  • 10 CFPE Detection Patterns - Comprehensive coverage of AI agent vulnerabilities
  • Multiple Output Formats - Text, JSON, SARIF, HTML
  • LLM Integration - Optional AI-powered analysis (OpenAI, Anthropic, Ollama)
  • CI/CD Ready - GitHub Actions, pre-commit hooks
  • MCP Server - Model Context Protocol support

Install

pip install tessera-security

From source:

git clone https://github.com/Devaretanmay/TESSERA.git
cd TESSERA
pip install -e .

Support Matrix

  • Supported Python versions: 3.10, 3.11, 3.12
  • Operational default: 3.11
  • Package + CLI are the primary supported production surface
  • FastAPI is a secondary production surface

Quick Start

CLI

# Scan a topology
tessera scan --config my_agent.yaml

# Output formats: text (default), json, sarif, html
tessera scan --config my_agent.yaml --format sarif

# List all detection rules
tessera list-rules

# Explain a specific rule
tessera explain CFPE-0001

Python API

from tessera import Tesseract, OutputFormat

# Simple usage
scanner = Tesseract()
result = scanner.scan("my_agent.yaml", OutputFormat.TEXT)

# JSON output
result = scanner.scan("my_agent.yaml", OutputFormat.JSON)
print(f"Found {result['summary']['total']} vulnerabilities")

# HTML report
result = scanner.scan("my_agent.yaml", OutputFormat.HTML)
with open("report.html", "w") as f:
    f.write(result)

# With LLM analysis (requires API key)
scanner.enable_llm({"provider": "openai"})
result = scanner.scan("my_agent.yaml", OutputFormat.JSON, llm_enabled=True)

Programmatic Topology

from tessera import Graph, Node, Edge, TrustBoundary, DataFlow, detect

graph = Graph(
    system="my_agent",
    nodes={
        "user": Node(id="user", type="user", trust_boundary=TrustBoundary.EXTERNAL),
        "llm": Node(id="llm", type="llm", trust_boundary=TrustBoundary.INTERNAL),
        "tool": Node(id="tool", type="tool", trust_boundary=TrustBoundary.INTERNAL),
    },
    edges=[
        Edge(from_node="user", to_node="llm", data_flow=DataFlow.API, trust_boundary=TrustBoundary.EXTERNAL),
        Edge(from_node="llm", to_node="tool", data_flow=DataFlow.TOOL_CALL, trust_boundary=TrustBoundary.INTERNAL),
    ]
)

findings = detect(graph)

for finding in findings:
    print(f"[{finding.severity.value.upper()}] {finding.id}: {finding.description}")

Output Formats

Text (CLI default)

TESSERA Security Scan
========================================
System: my_agent
Version: 1.0
Graph: 3 nodes, 2 edges
Scan time: 0.05ms

Summary:
  HIGH: 1

Findings:

1. [HIGH] CFPE-0001
   RAG to Tool execution chain detected
   Remediation:
   1. Validate RAG outputs before tool execution
   ...

JSON

{
  "tessera_version": "2.0.0",
  "scan": {
    "system": "my_agent",
    "version": "1.0",
    "scan_time_ms": 0.05,
    "graph": {"nodes": 3, "edges": 2}
  },
  "findings": [...],
  "summary": {"total": 1, "by_severity": {"critical": 0, "high": 1}}
}

SARIF (GitHub Code Scanning)

tessera scan --config my_agent.yaml --format sarif --output results.sarif

Results appear in GitHub Security tab under "Code Scanning".

HTML

Generate beautiful HTML reports:

tessera scan --config my_agent.yaml --format html --output report.html

CI/CD Integration

GitHub Actions

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: pip install -e ".[dev,api]"
      - run: python -m ruff check src tests
      - run: python -m pytest -q
      - run: python -m build
      - run: python -m twine check dist/*

Pre-commit Hook

Add to .pre-commit-config.yaml:

repos:
  - repo: https://github.com/Devaretanmay/TESSERA
    rev: v2.0.0
    hooks:
      - id: tessera-scan

LLM Analysis (Optional)

TESSERA supports optional LLM-powered analysis for deeper semantic understanding:

# OpenAI
scanner.enable_llm({"provider": "openai", "model": "gpt-4"})

# Anthropic
scanner.enable_llm({"provider": "anthropic", "model": "claude-3-opus"})

# Ollama (local)
scanner.enable_llm({"provider": "ollama", "model": "llama2"})

Set environment variables:

  • OPENAI_API_KEY
  • ANTHROPIC_API_KEY

CFPE Patterns (10 rules)

ID Pattern Severity Description
CFPE-0001 RAG to Tool HIGH LLM → RAG → Tool chain
CFPE-0002 Memory Poisoning CRITICAL Write to persistent memory
CFPE-0003 External to Database HIGH Untrusted → database
CFPE-0004 Trust Boundary Bypass HIGH Cross-boundary untrusted flow
CFPE-0005 Multi-hop Attack Chain HIGH 3+ edge attack path
CFPE-0006 Tool to Tool Chaining MEDIUM Tool calls tool
CFPE-0007 Sensitive Data Exfiltration CRITICAL LLM → external service
CFPE-0008 RAG Context Injection HIGH User → RAG injection
CFPE-0009 MCP Config Attack HIGH Malicious MCP server
CFPE-0010 Agent Skill Injection HIGH SKILL.md compromise

Node Types

  • user - Human input source
  • llm / model - Language model
  • api - API gateway
  • tool - External tool/service
  • database - Database
  • memory_store - Persistent memory
  • rag_corpus - Knowledge base (RAG)
  • external_service - External API/service
  • mcp_server - MCP server
  • skill - Agent skill definition

Trust Boundaries

external → user_controlled → partially_trusted → internal → privileged

Architecture

src/tessera/
├── core/                      # Domain logic
│   ├── topology/            # Graph models (Graph, Node, Edge)
│   ├── detection/            # CFPE rules (10 patterns)
│   └── findings/             # Finding models
├── engine/                   # Scanner engine (Tesseract)
├── infra/
│   ├── output/              # Formatters (JSON, SARIF, Text, HTML)
│   ├── llm/                 # LLM providers (OpenAI, Anthropic, Ollama)
│   └── mcp/                 # MCP server
└── interfaces/
    └── cli/                  # CLI commands

Production Docs

Testing

Run examples:

# All examples
tessera scan --config examples/*.yaml

# Specific example
tessera scan --config examples/complex_agent.yaml --format json

Environment Variables

Variable Description
OPENAI_API_KEY OpenAI API key for LLM analysis
ANTHROPIC_API_KEY Anthropic API key for LLM analysis

License

MIT

GitHub

https://github.com/Devaretanmay/TESSERA

Release files for tessera-security 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tessera-security 2.0.1
File Size Uploaded
tessera_security-2.0.1.tar.gz 50.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tessera-security 2.0.1
File Interpreter ABI Platform
tessera_security-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 112.7 kB

Release files / tessera_security-2.0.1.tar.gz

Download URL tessera_security-2.0.1.tar.gz
Size 50.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e740a9f124013bb8c1a6557c7951376bc6a25bde1259614e220ce1454c8a9c24
BLAKE2b-256 checksum
How to use checksums
0dd34ad6b360edf58d66690443091f17b7638fc5edac68430c3222fcefdbde95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / tessera_security-2.0.1-py3-none-any.whl

Download URL tessera_security-2.0.1-py3-none-any.whl
Size 62.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4bdd44b6a7764f971d84b08642d1f9f490ee81696cd800384298e66c3ad574b2
BLAKE2b-256 checksum
How to use checksums
b9220ec66fb3a10b899f17cb239b98d3be62d2b0f89ecefed331aa040cdcbf7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page