A Thunderbird add-on that augments the email filter engine with natural-language classification using a local LLM endpoint.
Find a file
2025-06-23 00:25:55 -05:00
_locales/en-US Fix logger import before resource registration 2025-06-21 02:59:22 -05:00
content Initial Commit 2025-06-15 21:55:35 -05:00
experiment Fix logger import to avoid SecurityError 2025-06-21 03:12:45 -05:00
modules Fix extension lookup 2025-06-21 23:58:30 -05:00
options Fix logger import before resource registration 2025-06-21 02:59:22 -05:00
prompt_templates Added strongly worded reminders 2025-06-17 22:16:13 -05:00
resources/img Manifest Housekeeping 2025-06-21 22:27:40 -05:00
.gitignore Initial commit 2025-06-15 16:53:26 -05:00
ai-filter.sln Manifest Housekeeping 2025-06-21 22:27:40 -05:00
background.js Fix logger import before resource registration 2025-06-21 02:59:22 -05:00
build-xpi.ps1 Initial Commit 2025-06-15 21:55:35 -05:00
LICENSE Initial commit 2025-06-15 16:53:26 -05:00
logger.js Fix logger import before resource registration 2025-06-21 02:59:22 -05:00
manifest.json Update manifest.json 2025-06-23 00:25:55 -05:00
README.md docs: update README and add changelog 2025-06-21 18:52:00 -05:00

logo

Sortana

Sortana is an experimental Thunderbird add-on that integrates an AI-powered filter rule. It allows you to classify email messages by sending their contents to a configurable HTTP endpoint. The endpoint should respond with JSON indicating whether the message meets a specified criterion.

Features

  • AI classification rule adds the "AI classification" term with matches and doesn't match operators.
  • Configurable endpoint set the classification service URL on the options page.
  • Prompt templates choose between several model formats or provide your own custom template.
  • Custom system prompts tailor the instructions sent to the model for more precise results.
  • Filter editor integration patches Thunderbird's filter editor to accept text criteria for AI classification.
  • Persistent result caching classification results are saved to disk so messages aren't re-evaluated across restarts.
  • Advanced parameters tune generation settings like temperature, topp and more from the options page.
  • Debug logging optional colorized logs help troubleshoot interactions with the AI service.
  • Packaging script build-xpi.ps1 builds an XPI ready for installation.

Architecture Overview

The extension relies on both WebExtension scripts and Thunderbird's experiment APIs:

  • background.js loads the saved endpoint, registers the UI patching script, and listens for test messages.
  • experiment/api.js exposes the aiFilter namespace. It loads modules/ExpressionSearchFilter.jsm which implements the custom filter term and performs the HTTP request.
  • experiment/DomContentScript/ registers content scripts for Thunderbird windows; content/filterEditor.js modifies the filter editor UI.
  • options/ contains the HTML and JavaScript for the options page.
  • _locales/ holds localized strings used throughout the UI.

Key Files

Path Purpose
manifest.json Extension manifest and entry points.
background.js Startup tasks and message handling.
modules/ExpressionSearchFilter.jsm Custom filter term and AI request logic.
experiment/api.js Bridges WebExtension code with privileged APIs.
content/filterEditor.js Patches the filter editor interface.
options/options.html and options.js Endpoint configuration UI.
logger.js and modules/logger.jsm Colorized logging with optional debug mode.

Building

  1. Ensure PowerShell is available (for Windows) or adapt the script for other environments.
  2. Run powershell ./build-xpi.ps1 from the repository root. The script reads the version from manifest.json and creates an XPI in the release folder.
  3. Install the generated XPI in Thunderbird via the Add-ons Manager. During development you can also load the directory as a temporary add-on.

Usage

  1. Open the add-on's options and set the URL of your classification service.
  2. Create or edit a filter in Thunderbird and choose the AI classification term. Enter the desired criterion (for example, a short description of the messages you want to match).
  3. When the filter runs, the add-on sends the message text to the service and checks the JSON response for a match.

License

This project is licensed under the terms of the GNU General Public License version 3. See LICENSE for the full text.

Acknowledgments

Sortana builds upon knowledge gained from open-source projects. In particular, FiltaQuilla and Expression-Search-NG clarified how Thunderbird's WebExtension and experiment APIs can be extended. Their code provided invaluable guidance during development.