# Agent and modules generated by the plugin

**Agents.** Each `agents:` block becomes one `<agent_data>` XML document (in `tentacle` / `local` modes). Agent identity comes straight from the template: `name`, `alias`, `parent_agent_name`, `description`, `version`, `os_name`, `os_version`, `timestamp`, `address`, `group`, `interval`, `agent_mode`. In `agent_plugin` mode no agent header is emitted — only `<module>` fragments — and with several `agents:` blocks each module name is prefixed `<agent_name> - <module_name>` (separator configurable via `transfer.module_prefix_separator`) so modules cannot collide under the one real agent.

**Modules.** One module per resolved module block (a `for_each` block resolves to one module per element). Module type is whatever the template declares (`generic_data`, `generic_data_inc`, `generic_data_string`, `async_data`, ...) — the executor forwards the module fields to the dataserver unchanged. The full set of supported module fields is listed in [Template reference](#modules-module-blocks).

A failed task (execution error, non-2xx HTTP status, filter with 0 matches) leaves its variable unset and logs a warning; a module that references an unset variable is **skipped** with a warning and the remaining modules are still delivered. `--strict` turns any of the above into an abort (exit code 2).

---