🏠 English documentation
日本語 →

🏠Aegis Voice Firewall — System Overview

AI answers the main line first — spam is blocked, legitimate calls reach a person. The big picture and how to navigate this site.

Aegis is a “call control tower”: AI answers the calls coming into a company’s main line first, blocks sales and solicitation, and hands business partners and urgent matters off to the right person.

New here? Start with → Getting Started — The Big Picture

The big picture (Route A / Route C)

📞 Inbound (caller) Main line / Hikari Denwa HGW Raspberry Pi 3B (edge, on-premises) Asterisk 22 Voice Edge / Layer 1 bridge.py chan_audiosocket :9092 to be ported (32→64bit, see Remaining Issues) RTS RDS Arrowfone Route A: Retell (primary today) Route C: OpenAI Realtime (Phase A/C) Retell AI (SIP / inbound webhook) Custom LLM webhook /llm/* OpenAI Realtime GA gpt-realtime Aegis Cloud (Layer 3) classify_call → tools_core → verdict spam → Hangup fail-safe (block) allow → forward ALLOW_DESTINATION unknown → to a human fail-open (stay in business)
Diagram: Route A (Retell) and Route C (OpenAI Realtime) merge at Aegis Cloud and branch three ways on the verdict (spam / allow / unknown). spam is blocked via fail-safe; unknown is handed to a human via fail-open. The solid purple box is the Raspberry Pi 3B device boundary (on-premises: Asterisk 22 + chan_audiosocket + bridge.py); the HGW, Retell, OpenAI, and Aegis Cloud (NAS) sit outside it. Dotted = existing Rhodium features that will co-locate on the Pi after the 64-bit port.

Two stories, two gates (the SIP / real-phone-number path)

Think of the real-phone-number path (Phase C) as a two-story building: the 1st floor is the on-site edge (Pi: voice-edge = Asterisk 22 + bridge.py) and the 2nd floor is the brain (NAS: aegis-platform). There are two gates:

  • Gate 1 (at ring time, pre-call): the dialplan asks the route-decision API over curl and branches three ways — block (hang up) / human (put it through) / ai (AI answers). If the API is unreachable it falls back statically (leaning fail-open, toward a human).
  • Gate 2 (in-call): when the AI judges spam, the bridge actively hangs up via AMI Hangup (plan B / D-1), guarded by the termination safety valve (only when spam_score ≥ 0.8; otherwise fail-open to a human). route-decision (pre-call) and verdict-based termination (in-call) are separate layers (see the SSoT).
2F — Brain (NAS): aegis-platform / Aegis Cloud route-decision API pre-call verdict: block / human / ai Verdict engine (classify_call → tools_core) in-call spam_score / should_terminate 1F — Edge (Pi): voice-edge = Asterisk 22 + bridge.py Raspberry Pi 3B (edge, on-premises) HGW (Hikari Denwa) Asterisk 22 dialplan Gate 1 (pre-call) curl → route-decision, 3-way branch to be ported (32→64bit, see Remaining Issues) RTS RDS Arrowfone block → hang up Hangup(21) / blocklisted human → to a person Dial / fail-open ai → AI answers AudioSocket :9092 bridge.py audio relay + tools Gate 2 (in-call) — AMI Status → Hangup (plan B / D-1) safety valve: spam_score ≥ 0.8 only (else fail-open)
Diagram: the two-story layout. 1F is the on-site edge (Pi: Asterisk 22 + bridge.py); 2F is the brain (NAS: aegis-platform). Gate 1 fires before the call is answered: the dialplan asks route-decision over curl and branches block / human / ai. Gate 2 fires during the call: when the AI judges spam, the bridge looks the channel up via AMI Status and hangs it up (plan B), guarded by the termination safety valve (spam_score ≥ 0.8; otherwise fail-open to a human). The solid purple box is the Raspberry Pi 3B device boundary (on-premises); the HGW and the 2F NAS (aegis-platform) sit outside it. This shows the design structure only — on-device verification is still ahead. Dotted = existing Rhodium features that will co-locate on the Pi after the 64-bit port.
⚠️This shows the design structure

The code is implemented and verified in Docker, but on-device verification (real phone numbers, the HGW, the Pi) is still ahead. No performance figures or operational guarantees here — the “can / cannot” spec gets finalized after hardware testing.

Repository layout

RepoRole
aegis-platformCloud core (dashboard / API / DB)
aegis-sip-bridgebridge.py (audio relay)
voice-edgeThe Pi’s Asterisk 22 + dialplan + connection points (main)
aegis-docsThis documentation site

Where things stand, in numbers

🧩 18/20 implemented

Aegis Cloud features

The Layer 3 feature map

🖥️ 30 pages

Dashboard

Three roles: operator / reseller / client

🔀 92 total

Pull requests

Merged 72 / Open 17 / Draft 2

🔍 19 fixed

Review findings

out of 26 total (6 remaining)

Key features (selected)

📞

Answering inbound calls first (Route A: Retell / Route C: OpenAI Realtime)

🛡️

spam = block / unknown = hand to a human (fail-safe + fail-open)

🔐

Item A non-bypassable gate + 4-eyes approval + audit log

🔌

MCP server (28 tools) / Realtime / recording encryption / monitoring v0.1

How to navigate this site

ℹ️Where to look
  • Want the architecture → “Layer 1–4” in the left menu
  • Progress, PRs, review results → “Phases”, “PR Timeline”, “Reviews & Findings”
  • Business and pricing → “Strategy & Pricing”
  • Don’t know a term → “Glossary” (fail-safe / fail-open / verdict, etc.)
📌How to update it (no engineering needed)

This site keeps data separate from pages. Most changes are a single line added to src/data/*.ts. See the README.md at the repo root for details (add a PR to prs.ts, a feature to features.ts, a term to glossary.ts).