3.8 KiB
Prompts System
Overview
Prompts are the core user-facing feature of ThunderAI. Each prompt defines an AI instruction and how it behaves. There are two kinds:
- Built-in prompts — defined in
js/mzta-prompts.js - Custom prompts — created by the user and stored in
browser.storage.local
Prompt Properties
Base Properties (built-in only)
| Property | Type | Description |
|---|---|---|
id |
string | Unique identifier |
name |
string | __MSG_key__ i18n reference or plain text |
prompt |
string | The prompt template text (may contain {%placeholder%} tokens) |
type |
number | 0 = always visible, 1 = reading email only, 2 = composing only |
action |
number | 0 = close, 1 = reply (open compose), 2 = substitute text in-place |
need_selected |
number | 0 = use full message body, 1 = requires text selection |
need_signature |
number | 0 = no signature, 1 = include signature |
need_custom_text |
number | 0 = no custom input, 1 = show custom text input field |
define_response_lang |
number | 0 = no language hint, 1 = append response language instruction |
use_diff_viewer |
number | 0 = normal output, 1 = show diff viewer (ChatGPT Web only) |
User Properties (stored per-prompt in storage)
| Property | Type | Description |
|---|---|---|
enabled |
number | 0 = hidden, 1 = shown in popup |
position_display |
number | Sort order in reading view |
position_compose |
number | Sort order in compose view |
Per-Prompt API Override Properties
Each prompt can override the global API connection. These mirror the keys in integration_options_config and prefs_default:
| Property | Description |
|---|---|
connection_type |
Override API type for this prompt |
chatgpt_web_model |
Override ChatGPT Web model |
chatgpt_web_project |
Override ChatGPT Web project |
chatgpt_web_custom_gpt |
Override custom GPT |
All chatgpt_*, ollama_*, openai_comp_*, google_gemini_*, anthropic_* keys |
Override specific API settings |
Special Prompts
Some prompts trigger additional Thunderbird actions beyond just sending text to the AI. They are identified by their id:
| ID | Feature |
|---|---|
add_tags |
Auto-tag the email after AI response |
spamfilter |
Classify as spam and optionally move email |
summarize |
Summarize email content |
get_calendar_event |
Extract and create a calendar event |
get_task |
Extract and create a task |
These special prompts can have their own dedicated API integration settings (configured in the Options page). The list of these special prompts is in options/mzta-options-default.js as special_prompts_with_integration.
Prompt Types Reference
type 0 → shown when reading AND composing
type 1 → shown only when reading an email (message display)
type 2 → shown only when composing an email
Action Types Reference
action 0 → no output, just close (e.g. for tag/spam actions handled in background)
action 1 → open a reply compose window with AI response
action 2 → replace selected text (or insert) in compose window
Adding a New Built-in Prompt
- Add the prompt object to the
defaultPromptsarray injs/mzta-prompts.js - Add the
namestring key to_locales/en/messages.json - If the prompt text needs a localized string, add it to
_locales/en/messages.jsonas well - Reference any needed placeholders using
{%placeholder_id%}syntax in thepromptfield
Custom Prompts
Custom prompts are stored in browser.storage.local and managed via pages/customprompts/. They follow the same property structure as built-in prompts but are created/edited/deleted by the user through the UI. Custom placeholders can also be referenced in custom prompt text.