Skip to main content
Renderers control how Attesta presents risk assessments, challenges, and results to human operators. Attesta ships with two built-in renderers and supports custom implementations through the Renderer protocol.

Built-in Renderers


TerminalRenderer

The TerminalRenderer uses the Rich library to create a polished, interactive terminal UI with colored panels, formatted tables, progress bars, and real-time prompts.

Features

  • Colored risk panels — Green (LOW), Yellow (MEDIUM), Orange (HIGH), Red (CRITICAL)
  • Risk bar visualization — Filled/empty bar showing the score position
  • Formatted action details — Function name, arguments, docstring, agent ID
  • Interactive prompts — Y/N, multiple choice, free-text input
  • Timer display — Shows elapsed review time
  • Auto-approve notification — Brief flash for low-risk actions

Example Output

Usage

If the Rich library is not installed, Attesta automatically falls back to PlainRenderer. Install Rich with pip install attesta[terminal] or pip install attesta[all] to enable the terminal UI.

PlainRenderer

The PlainRenderer uses Python’s built-in print() and input() functions. No external dependencies are required. This renderer is ideal for environments where Rich is unavailable or where structured output is preferred over visual formatting.

Example Output

Usage


The Renderer Protocol

All renderers implement the Renderer protocol with four methods:

Custom Renderer Examples

Web UI Renderer

Build a renderer that sends challenges to a web dashboard:

Slack Renderer

Send approval requests to a Slack channel:
Custom renderers are the primary extension point for integrating Attesta into non-terminal environments. Web dashboards, mobile apps, Slack/Teams bots, and email-based approvals can all be implemented as custom renderers.

Renderer Selection Logic

Attesta selects a renderer using this priority:
  1. Explicit — If you pass a renderer parameter, it is used
  2. Rich available — If Rich is installed and stdout is a TTY, TerminalRenderer is used
  3. FallbackPlainRenderer is used in all other cases

Configuration via YAML

attesta.yaml

Custom Renderer Guide

Step-by-step guide to building a custom renderer

Challenge System

The challenges that renderers present to operators