Overview
Tactical RMM (TRMM) is an open-source remote monitoring and management platform built on Django, Vue.js, and Go, with MeshCentral providing remote desktop/terminal/file browser capabilities. It uses NATS for real-time agent communication and PostgreSQL for data storage.
This skill provides expert-level answers from the complete TRMM documentation. When a user asks about TRMM, read the relevant reference file(s) listed in the navigation table below, then answer using that content.
Domain Concept Map
Organizational hierarchy: Client > Site > Agent. Every agent belongs to exactly one site, and every site belongs to exactly one client.
Check types: Disk Space, CPU Load, Memory, Script Check, Event Log, Ping, Windows Service (Winsvc). Each check runs at a configurable interval and produces a pass/fail result with a severity level (Info, Warning, Error).
Alert flow: Check fails or agent goes overdue → Alert created with severity → Alert Template determines notification actions (email, SMS, dashboard popup, webhook) → Optional failure script runs → When resolved, optional resolved script runs.
Task and Collector flow: Automated Tasks run scripts on schedules (time-based, check-failure, or manual). A Collector Task saves its last stdout line to a Custom Field, enabling dynamic data collection.
Custom Fields are user-defined fields on Agent, Site, or Client objects. They are referenced in scripts as {{agent.FieldName}}, {{site.FieldName}}, or {{client.FieldName}}. The Global Key Store provides {{global.key_name}} variables available to all scripts.
Automation Policy inheritance: Global → Client → Site → Agent. Each level can block inheritance from the level above. Policies deploy Checks, Tasks, Patch Policies, and Alert Templates in bulk. An Enforced policy overwrites conflicting agent-level checks.
Script variable syntax: {{model.field}} — e.g., {{agent.hostname}}, {{agent.site.name}}, {{client.name}}. Nested relations work. Everything between {{ }} is case-sensitive.
Reference Navigation
Read the reference file(s) matching the user's question topic before answering.
| Topic |
Reference File |
Key Contents |
| Architecture, server components, NATS, services, how agents work, installation, agent deployment, antivirus exclusions, MeshCentral setup |
references/architecture.md |
Server infrastructure, nginx/NATS/celery services, firewall rules, agent install methods, mesh integration, Windows Update management |
| Scripts, script languages, script variables, custom fields, collector tasks, keystore |
references/scripting-and-variables.md |
PowerShell/Python/Bash/Deno support, {{model.field}} syntax, all agent/client/site/alert variable fields, custom field types, collector tasks, global key store |
| Checks, automated tasks, task scheduling, automation policies, patch policies, maintenance mode |
references/checks-tasks-policies.md |
Check types and intervals, task triggers (time/check-failure/manual), policy inheritance (Global→Client→Site→Agent), enforced policies, maintenance mode |
| Alerts, alert templates, email/SMS setup, webhooks |
references/alerting-and-notifications.md |
Alert severities, alert template options, periodic re-notification, failure/resolve actions, email relay setup (MS 365, Gmail), SMS via Twilio, webhook configuration |
| REST API, authentication, endpoints, examples |
references/api.md |
API key creation, authentication headers, endpoint listing with curl/PowerShell/Python examples, rate limiting |
| Global settings, setting overrides, permissions, Django admin, URL actions, UI preferences, software management, web terminal, management commands, advanced/dangerous commands |
references/settings-and-admin.md |
General settings, email/SMS config, MeshCentral config, browser token expiry, SSL certs, RBAC roles, Django admin access, URL action variables, chocolatey/software, bulk agent operations, database maintenance |
| Reporting templates, data queries, variables, base templates, assets, examples (Enterprise) |
references/reporting.md |
Jinja templating, data_sources with model/filter/columns, template dependencies, base template inheritance, report assets, PDF/CSV output, example reports |
| SSO / Single Sign-On (Enterprise) |
references/sso.md |
OIDC setup, Google/Microsoft/custom provider configuration, role mapping, user provisioning |
| FAQ, tips and tricks, Bitdefender GravityZone, Zammad, getting started guide, serial number examples, BitLocker keys, SNMP checks, remote background, roadmap |
references/integrations-and-tips.md |
Common troubleshooting, AV exclusion patterns, monitoring endpoints, third-party deployment guides, SNMP with pysnmplib, BitLocker key collection, remote terminal/file browser, development roadmap |
Cross-Reference Guide
Some questions span multiple domains. Load files in the order shown:
| Question Pattern |
Files to Load (in order) |
| "How do I set up email/SMS alerts?" |
alerting-and-notifications.md → settings-and-admin.md (Global Settings section) |
| "How do I write a script using custom fields?" |
scripting-and-variables.md |
| "How do I create a report with agent data?" |
reporting.md → scripting-and-variables.md (for variable syntax) |
| "How do I deploy agents?" |
architecture.md (Agent Installation section) |
| "How do I automate patching?" |
checks-tasks-policies.md (Automation Policies section) → architecture.md (Windows Update Management) |
| "How do I set up webhooks for alerts?" |
alerting-and-notifications.md (Webhooks section) |
| "How do I use the API to manage agents?" |
api.md |
| "How do I configure SSO?" |
sso.md → settings-and-admin.md (Permissions section) |
| "How do I run scripts on check failure?" |
checks-tasks-policies.md → scripting-and-variables.md |
| "How do I collect data into custom fields?" |
scripting-and-variables.md (Custom Fields + Collector Tasks) → checks-tasks-policies.md (Automated Tasks) |
| "How do I set up SNMP monitoring?" |
integrations-and-tips.md (SNMP Checks section) |
| "How do I use maintenance mode?" |
checks-tasks-policies.md (Maintenance Mode section) |
Key Syntax Quick Reference
Agent variables (use in script arguments or env vars):
{{agent.hostname}}, {{agent.public_ip}}, {{agent.local_ips}}
{{agent.operating_system}}, {{agent.plat}}, {{agent.version}}
{{agent.site.name}}, {{agent.site.client.name}}
{{agent.logged_in_username}}, {{agent.needs_reboot}}
Custom fields (case-sensitive, spaces allowed):
{{agent.My Field Name}}, {{client.AV_KEY}}, {{site.no_patching}}
Global keystore: {{global.key_name}}
Alert template variables (only in failure/resolve actions):
{{alert.message}}, {{alert.severity}}, {{alert.alert_type}}
{{alert.agent.hostname}}, {{alert.site.name}}, {{alert.client.name}}
{{alert.get_result.stdout}}, {{alert.get_result.stderr}}
Reporting data queries (YAML in variables editor):
data_sources:
agents:
model: agent
filter:
site__client_id: '{{ client.id }}'
columns:
- hostname
- operating_system
- last_seen
Jinja loops in reports:
{% for item in data_sources.agents %}
{{ item.hostname }} - {{ item.operating_system }}
{% endfor %}
Searching Large References
For reporting.md (~1200 lines), use Grep to find specific topics:
- Data query filters: search for
filter: or model:
- Jinja syntax: search for
{% or {{
- Specific models: search for the model name (e.g.,
model: agent)
For settings-and-admin.md (~700 lines), search by section:
- Email setup: search for
Email or SMTP
- Permissions: search for
Role or Permission
- Management commands: search for the command name or
python manage.py
For architecture.md (~1100 lines):
- Services: search for
systemctl or the service name (e.g., nats, celery)
- Agent install: search for
install or deployment
Important Caveats
- Case sensitivity: Everything between
{{ }} in script variables is case-sensitive. {{agent.Hostname}} will NOT work; use {{agent.hostname}}.
- API trailing slashes: All TRMM API endpoints require a trailing slash (e.g.,
/agents/). Omitting it returns a redirect or error.
- Enterprise features: Reporting and SSO are Enterprise Edition features requiring a sponsor license.
- RunAsUser limitations: The RunAsUser option for scripts and tasks has limitations on Linux/macOS agents.
- MeshCentral domain: MeshCentral must be accessible on the same domain or with valid TLS. Agent communication depends on mesh connectivity.
- Check intervals vs task schedules: Checks run at regular intervals (default 120s). Tasks use cron-style schedules, check-failure triggers, or manual execution. Don't confuse the two.
- Backslash escaping: In custom fields,
\ is an escape character. Use \\ for literal backslashes.
- Policy inheritance blocking: Each level (Client, Site, Agent) can independently block policy inheritance from above. An "Enforced" policy overrides agent-level settings regardless.
1---2name: trmm-expert3description: Answer questions about Tactical RMM (TRMM) — an open-source remote monitoring and management platform. Covers architecture, installation, agent deployment (Windows/Linux/macOS), MeshCentral integration, scripting (PowerShell/Python/Bash/Deno), script variables, custom fields, keystore, automated checks, tasks, automation policies, maintenance mode, alerting, email/SMS notifications, webhooks, REST API, global settings, overrides, permissions, Django admin, URL actions, user interface, software management, web terminal, management commands, reporting (Enterprise), SSO (Enterprise), third-party integrations (Bitdefender, Zammad), SNMP checks, BitLocker key retrieval, remote background sessions, and troubleshooting FAQ.4---56## Overview78Tactical RMM (TRMM) is an open-source remote monitoring and management platform built on Django, Vue.js, and Go, with MeshCentral providing remote desktop/terminal/file browser capabilities. It uses NATS for real-time agent communication and PostgreSQL for data storage.910This skill provides expert-level answers from the complete TRMM documentation. When a user asks about TRMM, read the relevant reference file(s) listed in the navigation table below, then answer using that content.1112## Domain Concept Map1314**Organizational hierarchy:** Client > Site > Agent. Every agent belongs to exactly one site, and every site belongs to exactly one client.1516**Check types:** Disk Space, CPU Load, Memory, Script Check, Event Log, Ping, Windows Service (Winsvc). Each check runs at a configurable interval and produces a pass/fail result with a severity level (Info, Warning, Error).1718**Alert flow:** Check fails or agent goes overdue → Alert created with severity → Alert Template determines notification actions (email, SMS, dashboard popup, webhook) → Optional failure script runs → When resolved, optional resolved script runs.1920**Task and Collector flow:** Automated Tasks run scripts on schedules (time-based, check-failure, or manual). A **Collector Task** saves its last stdout line to a Custom Field, enabling dynamic data collection.2122**Custom Fields** are user-defined fields on Agent, Site, or Client objects. They are referenced in scripts as `{{agent.FieldName}}`, `{{site.FieldName}}`, or `{{client.FieldName}}`. The **Global Key Store** provides `{{global.key_name}}` variables available to all scripts.2324**Automation Policy inheritance:** Global → Client → Site → Agent. Each level can block inheritance from the level above. Policies deploy Checks, Tasks, Patch Policies, and Alert Templates in bulk. An **Enforced** policy overwrites conflicting agent-level checks.2526**Script variable syntax:** `{{model.field}}` — e.g., `{{agent.hostname}}`, `{{agent.site.name}}`, `{{client.name}}`. Nested relations work. Everything between `{{ }}` is case-sensitive.2728## Reference Navigation2930Read the reference file(s) matching the user's question topic before answering.3132| Topic | Reference File | Key Contents |33|---|---|---|34| Architecture, server components, NATS, services, how agents work, installation, agent deployment, antivirus exclusions, MeshCentral setup | `references/architecture.md` | Server infrastructure, nginx/NATS/celery services, firewall rules, agent install methods, mesh integration, Windows Update management |35| Scripts, script languages, script variables, custom fields, collector tasks, keystore | `references/scripting-and-variables.md` | PowerShell/Python/Bash/Deno support, `{{model.field}}` syntax, all agent/client/site/alert variable fields, custom field types, collector tasks, global key store |36| Checks, automated tasks, task scheduling, automation policies, patch policies, maintenance mode | `references/checks-tasks-policies.md` | Check types and intervals, task triggers (time/check-failure/manual), policy inheritance (Global→Client→Site→Agent), enforced policies, maintenance mode |37| Alerts, alert templates, email/SMS setup, webhooks | `references/alerting-and-notifications.md` | Alert severities, alert template options, periodic re-notification, failure/resolve actions, email relay setup (MS 365, Gmail), SMS via Twilio, webhook configuration |38| REST API, authentication, endpoints, examples | `references/api.md` | API key creation, authentication headers, endpoint listing with curl/PowerShell/Python examples, rate limiting |39| Global settings, setting overrides, permissions, Django admin, URL actions, UI preferences, software management, web terminal, management commands, advanced/dangerous commands | `references/settings-and-admin.md` | General settings, email/SMS config, MeshCentral config, browser token expiry, SSL certs, RBAC roles, Django admin access, URL action variables, chocolatey/software, bulk agent operations, database maintenance |40| Reporting templates, data queries, variables, base templates, assets, examples (Enterprise) | `references/reporting.md` | Jinja templating, data_sources with model/filter/columns, template dependencies, base template inheritance, report assets, PDF/CSV output, example reports |41| SSO / Single Sign-On (Enterprise) | `references/sso.md` | OIDC setup, Google/Microsoft/custom provider configuration, role mapping, user provisioning |42| FAQ, tips and tricks, Bitdefender GravityZone, Zammad, getting started guide, serial number examples, BitLocker keys, SNMP checks, remote background, roadmap | `references/integrations-and-tips.md` | Common troubleshooting, AV exclusion patterns, monitoring endpoints, third-party deployment guides, SNMP with pysnmplib, BitLocker key collection, remote terminal/file browser, development roadmap |4344## Cross-Reference Guide4546Some questions span multiple domains. Load files in the order shown:4748| Question Pattern | Files to Load (in order) |49|---|---|50| "How do I set up email/SMS alerts?" | alerting-and-notifications.md → settings-and-admin.md (Global Settings section) |51| "How do I write a script using custom fields?" | scripting-and-variables.md |52| "How do I create a report with agent data?" | reporting.md → scripting-and-variables.md (for variable syntax) |53| "How do I deploy agents?" | architecture.md (Agent Installation section) |54| "How do I automate patching?" | checks-tasks-policies.md (Automation Policies section) → architecture.md (Windows Update Management) |55| "How do I set up webhooks for alerts?" | alerting-and-notifications.md (Webhooks section) |56| "How do I use the API to manage agents?" | api.md |57| "How do I configure SSO?" | sso.md → settings-and-admin.md (Permissions section) |58| "How do I run scripts on check failure?" | checks-tasks-policies.md → scripting-and-variables.md |59| "How do I collect data into custom fields?" | scripting-and-variables.md (Custom Fields + Collector Tasks) → checks-tasks-policies.md (Automated Tasks) |60| "How do I set up SNMP monitoring?" | integrations-and-tips.md (SNMP Checks section) |61| "How do I use maintenance mode?" | checks-tasks-policies.md (Maintenance Mode section) |6263## Key Syntax Quick Reference6465**Agent variables** (use in script arguments or env vars):66- `{{agent.hostname}}`, `{{agent.public_ip}}`, `{{agent.local_ips}}`67- `{{agent.operating_system}}`, `{{agent.plat}}`, `{{agent.version}}`68- `{{agent.site.name}}`, `{{agent.site.client.name}}`69- `{{agent.logged_in_username}}`, `{{agent.needs_reboot}}`7071**Custom fields** (case-sensitive, spaces allowed):72- `{{agent.My Field Name}}`, `{{client.AV_KEY}}`, `{{site.no_patching}}`7374**Global keystore:** `{{global.key_name}}`7576**Alert template variables** (only in failure/resolve actions):77- `{{alert.message}}`, `{{alert.severity}}`, `{{alert.alert_type}}`78- `{{alert.agent.hostname}}`, `{{alert.site.name}}`, `{{alert.client.name}}`79- `{{alert.get_result.stdout}}`, `{{alert.get_result.stderr}}`8081**Reporting data queries** (YAML in variables editor):82```yaml83data_sources:84 agents:85 model: agent86 filter:87 site__client_id: '{{ client.id }}'88 columns:89 - hostname90 - operating_system91 - last_seen92```9394**Jinja loops in reports:**95```96{% for item in data_sources.agents %}97{{ item.hostname }} - {{ item.operating_system }}98{% endfor %}99```100101## Searching Large References102103For `reporting.md` (~1200 lines), use Grep to find specific topics:104- Data query filters: search for `filter:` or `model:`105- Jinja syntax: search for `{% ` or `{{ `106- Specific models: search for the model name (e.g., `model: agent`)107108For `settings-and-admin.md` (~700 lines), search by section:109- Email setup: search for `Email` or `SMTP`110- Permissions: search for `Role` or `Permission`111- Management commands: search for the command name or `python manage.py`112113For `architecture.md` (~1100 lines):114- Services: search for `systemctl` or the service name (e.g., `nats`, `celery`)115- Agent install: search for `install` or `deployment`116117## Important Caveats118119- **Case sensitivity:** Everything between `{{ }}` in script variables is case-sensitive. `{{agent.Hostname}}` will NOT work; use `{{agent.hostname}}`.120- **API trailing slashes:** All TRMM API endpoints require a trailing slash (e.g., `/agents/`). Omitting it returns a redirect or error.121- **Enterprise features:** Reporting and SSO are Enterprise Edition features requiring a sponsor license.122- **RunAsUser limitations:** The RunAsUser option for scripts and tasks has limitations on Linux/macOS agents.123- **MeshCentral domain:** MeshCentral must be accessible on the same domain or with valid TLS. Agent communication depends on mesh connectivity.124- **Check intervals vs task schedules:** Checks run at regular intervals (default 120s). Tasks use cron-style schedules, check-failure triggers, or manual execution. Don't confuse the two.125- **Backslash escaping:** In custom fields, `\` is an escape character. Use `\\` for literal backslashes.126- **Policy inheritance blocking:** Each level (Client, Site, Agent) can independently block policy inheritance from above. An "Enforced" policy overrides agent-level settings regardless.