Glossary
NeoMind introduces many concepts. This page is the central definition for all core terminology. When you encounter a new term for the first time, check here.
If you want the overall system architecture and data flow (rather than individual terms), jump straight to Core Concepts.
- First time browsing: skim the categories below to build a mental model
- Hit an unfamiliar word: search the page (
Ctrl/Cmd + F) directly - Want to see how things connect: jump to the Concept Relationship Map at the end
Quick Category Overviewβ
Device Relatedβ
Deviceβ
A physical or virtual device that has been connected to NeoMind. Each device has a unique ID, a device type, a set of metrics (telemetry points), and commands (control actions).
Example: A temperature/humidity sensor whose metrics are temperature / humidity and whose command is reboot.
- Unique ID β used to reference it in the system (
sensor-01) - Device Type β determines which metrics / commands it has
- Connection method β one of MQTT / Webhook / BLE
Device Typeβ
The "template" for a class of devices, defining which metrics, commands, and connection parameters that kind of device exposes. Device types are defined in JSON and stored in the NeoMind-DeviceTypes repository.
When you create a device you pick a type and NeoMind generates the default metric / command schema from it.
Example β a temperature & humidity sensor type:
{
"device_type": "dht22_sensor",
"name": "Temperature & Humidity Sensor",
"description": "DHT22-based ambient environment sensor",
"categories": ["sensor", "environment"],
"metrics": [
{ "name": "temperature", "display_name": "Temperature", "data_type": "float", "unit": "Β°C", "min": -40, "max": 80 },
{ "name": "humidity", "display_name": "Humidity", "data_type": "float", "unit": "%", "min": 0, "max": 100 }
],
"commands": [
{ "name": "reboot", "display_name": "Reboot", "description": "Restart the sensor" }
]
}
Device Type is the contract between hardware and the platform. It serves three roles:
- Standardizes a device class β all DHT22 sensors share one type definition, regardless of manufacturer. 100 sensors of the same type all conform to the same metric / command schema.
- Gives the AI Agent a device standard β the Agent reads the metric definitions to understand what data a device produces and what operations it supports. When you ask "what's the temperature?", the Agent knows exactly which metric to query β no need to inspect raw payloads.
- Drives downstream configuration β dashboard widgets, automation rules, and data push configs all reference metrics by name. Those names originate from the Device Type definition.
Draftβ
When NeoMind auto-discovers an unknown device via MQTT or Webhook, it does not immediately create a device. Instead it produces a "draft". Only after an admin approves the draft does it become an official device.
This is a safety mechanism β it prevents unauthorized devices from joining your system automatically. Auto-discovered devices only enter the draft queue; they officially come online only after you confirm them.
Metricβ
A time-series data point produced by a device or extension. Each metric has a name, a data type (Integer / Float / String / Boolean), and an optional unit.
Examples:
| Metric name | Data type | Unit | Meaning |
|---|---|---|---|
temperature | Float | Β°C | Temperature |
humidity | Float | % | Humidity |
motion | Boolean | β | Motion detected |
image_data | String | β | Base64-encoded image |
Commandβ
A control instruction you can send to a device, or an operation you can invoke on an extension. Each command has a name and a parameter schema.
Examples: set_temperature(target: Integer), capture(), reboot().
DataSourceIdβ
The unified format NeoMind uses to reference any data point: {type}:{id}:{field}
| type | Meaning | Example |
|---|---|---|
device | Device telemetry | device:sensor-01:temperature |
extension | Extension metric | extension:weather:temp |
agent | Agent status | agent:guard:status |
Dashboard widget data sources, rule trigger conditions, data push targets β all reference data via DataSourceId. Just remember the three-part pattern: {type}:{id}:{field}.
AI Relatedβ
LLM Backendβ
The large language model instance NeoMind connects to. Multiple backends are supported: Ollama (local), OpenAI, Anthropic, GLM, llama.cpp, etc. You can configure several backends and switch between them per scenario.
- Local (Ollama / llama.cpp): zero latency, data never leaves the LAN, works offline β but limited by hardware
- Cloud (OpenAI / Anthropic / GLM): more powerful models, but needs network, data goes to cloud, continuous billing
- You can configure several at once and use different backends for different agents
Agentβ
NeoMind's core intelligent unit. An agent receives natural-language input (or runs on a schedule), uses an LLM to understand intent, invokes tools (CLI commands, device controls, extension commands) to take action, and learns from the results.
An agent does more than chat β it takes action. When you ask "notify me when temperature exceeds 30", it actually creates a rule, configures a notification channel, and starts monitoring. This is powered by Tool Use.
AI Chatβ
The interactive mode of the agent β the user types a message in the chat, and the AI calls tools in real time and streams the response. Supports image uploads for multimodal analysis. Uses conversation history + MemorySnapshot for context.
Memoryβ
Experience accumulated across executions/sessions, split into two systems by mode:
| Mode | Memory Structure | Storage | Purpose |
|---|---|---|---|
| AI Chat | Conversation history + MemorySnapshot | user.md + knowledge.md | Remembers user preferences and key facts across sessions |
| AI Agent | Journal + Knowledge Files | redb + Markdown files | Accumulates experience across executions: success/failure, learned patterns, device identity, mission |
Journal is a summary of each agent execution (what was done, success/failure, lessons learned). Knowledge Files are long-term knowledge (device identity, mission, resources, patrol patterns).
Think-Act-Observeβ
The agent's core execution pattern: the LLM analyzes the current state (Think) β calls a tool (Act) β reads the result (Observe) β loops until the task is done or the round limit is reached (default 30 rounds, global timeout 5 minutes).
Skillβ
A Markdown file (stored in data/skills/) that provides scenario-specific guidance to agents. A Skill defines operational steps, common errors, and best practices for a specific scenario. The LLM automatically references relevant Skills during execution.
Multimodalβ
An LLM's ability to process image input. Depends on the model β after pulling a vision model (e.g. qwen3.5:4b-vl / llava) in Ollama or using a cloud vision model (gpt-4o / claude-3-5-sonnet / gemini-1.5-flash), AI Chat supports image uploads for visual analysis.
Toolβ
An action an agent can call. NeoMind's agent operates primarily through neomind CLI commands to manage devices, rules, dashboards, and so on. The tool system automatically exposes commands from installed extensions to the LLM as well.
Agent
βββ neomind CLI
βββ device management
βββ rule management
βββ dashboard management
βββ extension calls
βββ YOLO detection
βββ OCR recognition
βββ weather forecast
Data Processing Relatedβ
Transformβ
A JavaScript pipeline that automatically executes after data is written to Telemetry, converting raw metrics into more meaningful derived metrics. Supports three scope levels: Global (all devices), Device Type (a class of devices), Device (a single device).
Example: Raw data {temperature: 25.6, humidity: 60} β Transform calculates dew_point: 16.7Β°C (dew point) and comfort: "humid" (comfort level).
Derived metrics are written to Telemetry in transform:{output_prefix}:{field} format, consumed by dashboards, rules, and agents just like raw data.
Automation Relatedβ
Ruleβ
Event-driven automation logic. When a condition is met, the action executes automatically.
NeoMind rules are defined in JSON:
{
"name": "High Temp Alert",
"trigger": { "trigger_type": "data_change" },
"condition": { "condition_type": "comparison", "source": "device:sensor-01:temperature", "operator": "greater_than", "threshold": 30 },
"actions": [ { "type": "notify", "message": "Too hot" } ],
"cooldown": 60
}
A rule has three parts: a trigger (when to evaluate), a condition (when it's met), and actions (what to do when met).
See Automation Rules.
Cooldownβ
A suppression window (in seconds) after a rule triggers. During cooldown, the rule will not fire again even if the condition is still met β preventing alert storms. For example, cooldown: 60 means no repeat trigger for 60 seconds after firing.
Rule Engineβ
NeoMind's built-in automation evaluation engine. Evaluates bound rule conditions immediately when data is written to Telemetry (zero latency, no polling). On match, it executes actions (notify, execute command, trigger agent).
Message Channelβ
The delivery channel used when a rule triggers a notification. Supports 7 external channels plus in-app messages:
See Notifications.
Data Pushβ
Actively pushing telemetry data to an external system (Webhook or MQTT), as opposed to passive querying. You can configure push frequency, data format, and target address.
- Data Push β pushes raw data unconditionally ("push temperature to an external system every 10 seconds")
- Rule β triggers an action on a condition ("send a notification when temperature exceeds 30")
Extension Relatedβ
Extensionβ
A plugin module loaded into NeoMind via FFI (foreign function interface). Extensions are written in Rust, compiled to a dynamic library (.dylib / .so / .dll), and run in a separate process.
Extensions can:
- Provide metrics (data streams)
- Provide commands (callable operations)
- Load ML models (e.g. YOLO object detection)
- Process streaming data (e.g. video frames)
ExtensionRunner
(main process)
YOLO detection (isolated process Β· FFI)
OCR recognition (isolated process Β· FFI)
Extensions run in separate processes β if the YOLO extension crashes because a model fails to load, the main service is completely unaffected. Other extensions are not impacted either. This is a key design for NeoMind's stability.
See the Extension SDK.
Capabilityβ
A permission an extension must declare at startup. Any capability not declared is denied. This enforces the principle of least privilege. 14 built-in capabilities cover device read/write, device control, storage queries, event pub/sub, and triggers:
| Category | Capability | Description |
|---|---|---|
| Device Data | device_metrics_read / device_metrics_write | Read/write device metrics (incl. virtual) |
| Device Control | device_control | Send commands to devices |
| Storage | storage_query / telemetry_history / metrics_aggregate | Query telemetry history and aggregation |
| Events | event_publish / event_subscribe | Publish/subscribe system events |
| Triggers | extension_call / agent_trigger / rule_trigger | Call extensions, trigger agents/rules |
| Device Mgmt | device_register / device_unregister / device_template_register | Dynamic device registration |
Also supports Custom(String) for custom capabilities.
A weather extension only needs the device_metrics_write capability. If it tries to control a device, NeoMind denies it outright. This way, even if an extension has a bug and gets exploited, the blast radius is limited to its declared permissions.
FFI (Foreign Function Interface)β
The cross-process communication mechanism between extension processes and the main process. All requests and responses use serde JSON serialization β no custom binary protocol, logs are readable, debugging is straightforward. This is the key reason NeoMind chose process isolation over WASM: FFI can directly call GPU/ML frameworks, while WASM cannot.
.nepβ
The distribution package format for NeoMind extensions. A .nep file is a zip archive containing multi-platform binaries + metadata.json + optional model files.
When a user clicks install in the Web UI, the runner automatically selects the binary matching the current platform β no need to worry about whether the target is macOS or Linux, ARM or x86.
neomind_export!β
A macro provided by the SDK that exports a Rust impl Extension as FFI entry points automatically. Extension developers only need to add one line at the end of their code:
neomind_extension_sdk::neomind_export!(MyExtension);
Process Isolationβ
Extensions run in a separate process rather than inside the main process. Benefits: an extension crash (panic) cannot bring down the main service; extensions cannot interfere with each other; the capability-based permission boundary is clearer.
Lazy Loadβ
ML models are not loaded at extension startup. Instead they are loaded into memory on the first command call. Once loaded they stay resident (until the extension process exits), avoiding repeated reloads per inference.
A YOLOv8n model is about 12 MB and takes 1β2 seconds to load. If the extension loaded it at startup but the user might not use it for hours, that memory is wasted. Lazy loading = occupy on demand, stay resident once loaded.
Infrastructure Relatedβ
MQTT Brokerβ
The message broker built into NeoMind (port 1883). Devices connect, report telemetry, and receive commands over MQTT.
No external broker (such as Mosquitto) needs to be installed β NeoMind ships with a full MQTT implementation. It's ready the moment you start; devices connect directly to localhost:1883.
Telemetryβ
NeoMind's time-series database, built on redb and stored in data/telemetry.redb. All metric values are written here, and the dashboard and rule engine read from it.
redbβ
The embedded key-value storage engine NeoMind uses (written in Rust). There is no external database dependency; data files land directly on disk in the data/ directory.
redb is a pure Rust implementation that integrates perfectly with NeoMind's Rust stack β zero external dependencies, zero cross-language overhead, compiled into the same binary. It is specifically optimized for time-series data (write-heavy, time-range queries).
Webhookβ
An HTTP callback mechanism. Devices can report data by sending POST requests to NeoMind's webhook URL without needing MQTT. It is also used to receive event pushes from external systems.
SSE (Server-Sent Events)β
An HTTP long-connection unidirectional push protocol. NeoMind uses SSE to push real-time device data updates to the Web UI β data is pushed to open dashboards immediately after being written to Telemetry, without frontend polling. AI Chat streaming responses also use SSE.
Dashboard Relatedβ
Dashboardβ
A visualization page composed of a set of widgets. You can create multiple dashboards, share them (via public links with expiry times), and they auto-adapt to mobile screens.
Widgetβ
A single visualization element on a dashboard. Built-in types:
| Type | Shows | Typical use case |
|---|---|---|
| Value Card | A single value | Current temperature, humidity |
| Line Chart | Time-series trend | 24-hour temperature change |
| Gauge | Dial-style reading | CPU usage |
| Data Table | Multi-column table | Device list, history |
| VLM Vision | Image + AI annotations | Object detection results |
| Stream Player | Live video feed | Camera feed |
Custom widgets provided by extensions are also supported.
See Use Dashboard.
Concept Relationship Mapβ
How do these concepts work together? The diagram below shows the full data flow from device to visualization:
| Data Sources | Ingestion | Telemetry Store | Consumers | Outputs |
|---|---|---|---|---|
| Device Camera Β· Sensor Β· Controller Extension YOLO Β· OCR Β· Bridge | MQTT | redbdata/telemetry.redbWritten once consumed by many | Dashboard / Widget | Real-time UI |
Last updated: 2026-06-15