Skip to main content

Initial data

Agents and LLM configs are seeded from JSON files on the classpath. Both the Admin UI and the CLI ship the same layout:

src/main/resources/initial-data/
├── agent-definitions/
│ ├── research-lead.json
│ ├── web-researcher.json
│ └── …
└── llm-configs/
├── claude-default.json
├── agent-default.json
└── …

One file per record. The filename is just a label — the name field inside the JSON is the identity.

When and how it's loaded

On startup an InitialDataLoader scans classpath:initial-data/ and applies each file:

SituationWhat happens
No record with that name exists yetImported (new record).
Stored record is identical to the fileSilently skipped.
Stored record differs from the fileIn the CLI: you're shown a diff and asked Overwrite stored version? [y/N]. In the Admin UI: skipped with a log message — nothing is overwritten on startup.

So editing a JSON file changes the seed for fresh installs immediately; for an existing install you confirm the overwrite in the CLI, while in the Admin UI you apply pending changes via the Migrations page (or edit the record in the UI).

The Admin UI ships a third seed folder, initial-data/workflows/, installed by a separate mechanism (InitialWorkflowLoader, a plain file copy into mindconnect.workflow-admin.dir, default data/workflows) that never overwrites existing files.

Load failures are logged per file and otherwise swallowed — a malformed JSON shows up as a missing agent, not as a startup error.

Adding your own

Drop a new *.json into the matching folder, give it a unique name, and restart. Reference a new LLM config from an agent's llmConfigName, and a new agent from an orchestrator via run_agent("<name>", "…").

Format references