User Configuration Files
The User configuration file is the central settings file for a specific user instance of WilmerAI. It defines server
behavior, workflow routing, memory management, file paths, and logging.
User configuration files are located in the Public/Configs/Users/ directory. To add a new user, copy an existing file,
rename it (e.g., MyUser.json), and modify its contents. To activate a user configuration, either update the
_current-user.json file with the username or use the --User <username> command-line argument at startup.
Field Definitions
Each User JSON file contains a single object with the following key-value pairs.
port
- Description: Specifies the network port on which the WilmerAI instance will listen. This allows multiple instances
to run simultaneously. The server hosts on
0.0.0.0 by default, making it accessible on the local network.
- Data Type:
integer
- Required: Yes
- Example:
5006
customWorkflowOverride
- Description: A boolean flag that controls the routing system. If set to
true, the prompt categorization and
routing logic is bypassed, and all incoming prompts are forced to execute the workflow specified in the
customWorkflow field.
- Data Type:
boolean
- Required: Yes
- Example:
false
customWorkflow
- Description: The name of the workflow to execute for all prompts when
customWorkflowOverride is true. The
value must match a workflow file name (without the .json extension) located in
Public/Configs/Workflows/<username>/.
- Data Type:
string
- Required: Yes
- Example:
"CodingWorkflow-LargeModel-Centric"
routingConfig
- Description: The name of the routing configuration file to use when
customWorkflowOverride is false. This
file, located in Public/Configs/Routing/, maps prompt categories (e.g., "Coding", "General Chat") to specific
workflows.
- Data Type:
string
- Required: Yes
- Example:
"assistantSingleModelCategoriesConfig"
categorizationWorkflow
- Description: The name of the workflow that analyzes an incoming prompt and assigns it a category from the
routingConfig file. The output of this workflow determines which subsequent workflow is executed.
- Data Type:
string
- Required: Yes
- Example:
"CustomCategorizationWorkflow"
discussionIdMemoryFileWorkflowSettings
- Description: Specifies the workflow configuration file (without the
.json extension) that governs how
persistent, long-term memories are generated. This workflow handles conversation history chunking and the creation of
file-based and vector-based memories.
- Data Type:
string
- Required: Yes
- Example:
"_DiscussionId-MemoryFile-Workflow-Settings"
fileMemoryToolWorkflow
- Description: The name of the workflow triggered to process and manage memories stored as files.
- Data Type:
string
- Required: Yes
- Example:
"MemoryFileToolWorkflow"
chatSummaryToolWorkflow
- Description: The name of the workflow used to generate and update a rolling summary of the conversation history
for a given
discussionId.
- -Data Type:
string
- Required: Yes
- Example:
"GetChatSummaryToolWorkflow"
conversationMemoryToolWorkflow
- Description: The name of the workflow that processes the conversation to create discrete, chunked memories for
later retrieval.
- Data Type:
string
- Required: Yes
- Example:
"CustomConversationMemoryToolWorkflow"
recentMemoryToolWorkflow
- Description: The name of the workflow responsible for retrieving and summarizing the most recent turns of a
conversation for immediate context.
- Data Type:
string
- Required: Yes
- Example:
"RecentMemoryToolWorkflow"
discussionDirectory
- Description: The absolute path to the directory where persistent conversation files (e.g.,
_memories.json,
_chat_summary.json) are stored. The application requires this directory to exist when a discussionId is used. For
Windows paths, use double backslashes (\\).
- Data Type:
string (file path)
- Required: Yes
- Example:
"D:\\WilmerAI\\Discussions"
sqlLiteDirectory
- Description: The absolute path to the directory where the user's SQLite database (
WilmerDb.<username>.sqlite)
will be created. This database is used by the LockingService for WorkflowLock nodes.
- Data Type:
string (file path)
- Required: Yes
- Example:
"D:\\WilmerAI\\Databases"
endpointConfigsSubDirectory
- Description: The name of the subfolder within
Public/Configs/Endpoints/ that contains the JSON files defining
the user's LLM endpoints (API URLs, keys, etc.).
- Data Type:
string
- Required: Yes
- Example:
"assistant-single-model"
workflowConfigsSubDirectoryOverride
- Description: Specifies a custom subfolder within
Public/Configs/Workflows/_overrides/ for workflow configurations.
When set, workflows are loaded from _overrides/<override>/ instead of the user's folder. This allows multiple users to
share a common set of workflows.
- Data Type:
string
- Required: No
- Example:
"coding-workflows" (loads from _overrides/coding-workflows/)
presetConfigsSubDirectoryOverride
- Description: Specifies a custom subfolder within
Public/Configs/Presets/<ApiType>/ for LLM generation presets (
e.g., temperature). If omitted, the system defaults to a subfolder named after the user. This allows multiple users to
share a common set of presets.
- Data Type:
string
- Required: No
- Example:
"shared-presets"
chatPromptTemplateName
- Description: The name of the prompt template file (without the
.json extension) from
Public/Configs/PromptTemplates/. This template formats a list of messages into a single string for use with legacy
completion-style APIs.
- Data Type:
string
- Required: Yes
- Example:
"_chatonly"
chatCompleteAddUserAssistant
- Description: If
true, the system automatically prepends role prefixes (e.g., "User: ", "Assistant: ") to message
content. This is for models that expect explicit roles in a flattened prompt string.
- Data Type:
boolean
- Required: Yes
- Example:
true
chatCompletionAddMissingAssistantGenerator
- Description: If
true (and chatCompleteAddUserAssistant is also true), this adds a final, empty "Assistant: "
prefix to the end of the prompt to signal to the LLM that it should begin its response.
- Data Type:
boolean
- Required: Yes
- Example:
true
connectTimeoutInSeconds
- Description: The timeout in seconds for establishing an HTTP connection to an LLM endpoint. This only covers the
TCP connection phase (the initial handshake), not the time spent waiting for the LLM to process and respond. If the
connection cannot be established within this time, the request fails. This is useful for detecting unreachable
endpoints quickly rather than waiting for the full request timeout.
- Data Type:
integer
- Required: No
- Default:
30
- Example:
60
useOfflineWikiApi
- Description: If
true, enables the OfflineWikipediaTextApi tool, allowing workflows to query a local Wikipedia
database.
- Data Type:
boolean
- Required: Yes
- Example:
true
offlineWikiApiHost
- Description: The IP address or hostname of the server running the
OfflineWikipediaTextApi.
- Data Type:
string
- Required: Yes
- Example:
"127.0.0.1"
offlineWikiApiPort
- Description: The network port on which the
OfflineWikipediaTextApi server is listening.
- Data Type:
integer
- Required: Yes
- Example:
5728
useFileLogging
- Description: If
true, logs are written to a wilmerai.log file in the directory specified by the
--LoggingDirectory command-line argument. If false or omitted, logs are only printed to the console.
- Data Type:
boolean
- Required: No
- Example:
true
allowSharedWorkflows
- Description: If
true, the /v1/models and /api/tags API endpoints return workflow folders from
Public/Configs/Workflows/_shared/ as selectable models. This allows front-end applications to select different
workflow folders via the model dropdown. If false or omitted (the default), only the username is returned as a
model, and workflow selection occurs through the normal routing or customWorkflow settings.
- Data Type:
boolean
- Required: No
- Default:
false
- Example:
true
sharedWorkflowsSubDirectoryOverride
- Description: Specifies a custom folder name to use instead of
_shared for the shared workflows folder. When set,
the /v1/models and /api/tags endpoints (when allowSharedWorkflows is true) will list workflow folders from
Public/Configs/Workflows/<override>/ instead of _shared/. Similarly, workflow selection via the API model field
will look in this folder instead of _shared/.
- Data Type:
string
- Required: No
- Default:
"_shared"
- Example:
"_team_workflows" (uses Public/Configs/Workflows/_team_workflows/ for shared workflows)
Example User File
Here is a fully-commented example user configuration file.
{
// The network port for this WilmerAI instance to listen on.
"port": 5006,
// If true, bypasses routing and uses 'customWorkflow' for all requests.
"customWorkflowOverride": false,
// The workflow to use when 'customWorkflowOverride' is true.
"customWorkflow": "CodingWorkflow-LargeModel-Centric",
// The routing configuration file that maps categories to workflows.
"routingConfig": "assistantSingleModelCategoriesConfig",
// The workflow that categorizes incoming prompts.
"categorizationWorkflow": "CustomCategorizationWorkflow",
// Workflow for managing long-term, persistent memory files.
"discussionIdMemoryFileWorkflowSettings": "_DiscussionId-MemoryFile-Workflow-Settings",
// Workflow triggered for file-based memory operations.
"fileMemoryToolWorkflow": "MemoryFileToolWorkflow",
// Workflow for generating a rolling summary of the chat.
"chatSummaryToolWorkflow": "GetChatSummaryToolWorkflow",
// Workflow for creating chunked memories from the conversation.
"conversationMemoryToolWorkflow": "CustomConversationMemoryToolWorkflow",
// Workflow for retrieving recent conversation turns.
"recentMemoryToolWorkflow": "RecentMemoryToolWorkflow",
// Directory to store all discussion-related files (memories, summaries).
"discussionDirectory": "D:\\WilmerAI\\Discussions",
// Directory to store the user's SQLite database for workflow locking.
"sqlLiteDirectory": "D:\\WilmerAI\\Databases",
// Subdirectory for this user's LLM endpoint configurations.
"endpointConfigsSubDirectory": "assistant-single-model",
// Optional override to use a shared folder for workflow configurations (within _overrides/).
"workflowConfigsSubDirectoryOverride": "coding-workflows",
// Optional override to use a shared folder for generation presets.
"presetConfigsSubDirectoryOverride": "shared-presets",
// The prompt template for flattening chat messages for completion APIs.
"chatPromptTemplateName": "_chatonly",
// If true, adds "User: " and "Assistant: " prefixes to messages.
"chatCompleteAddUserAssistant": true,
// If true, adds a final "Assistant: " to prompt the model's reply.
"chatCompletionAddMissingAssistantGenerator": true,
// If true, enables the local Wikipedia API tool.
"useOfflineWikiApi": true,
// Hostname for the local Wikipedia API.
"offlineWikiApiHost": "127.0.0.1",
// Port for the local Wikipedia API.
"offlineWikiApiPort": 5728,
// If true, enables writing logs to a file.
"useFileLogging": true,
// Timeout in seconds for establishing an HTTP connection to an LLM endpoint (default: 30).
"connectTimeoutInSeconds": 30,
// If true, lists workflow folders from the shared workflows folder in the models API endpoints.
"allowSharedWorkflows": false,
// Optional override for the shared workflows folder name (default is "_shared").
"sharedWorkflowsSubDirectoryOverride": "_shared"
}
1---2name: user-configuration-files3description: The User configuration file is the central settings file for a specific user instance of WilmerAI. It defines server behavior, workflow routing, memory management, file paths, and logging.4---5### **`User` Configuration Files**67The User configuration file is the central settings file for a specific user instance of WilmerAI. It defines server8behavior, workflow routing, memory management, file paths, and logging.910User configuration files are located in the `Public/Configs/Users/` directory. To add a new user, copy an existing file,11rename it (e.g., `MyUser.json`), and modify its contents. To activate a user configuration, either update the12`_current-user.json` file with the username or use the `--User <username>` command-line argument at startup.1314-----1516#### **Field Definitions**1718Each User JSON file contains a single object with the following key-value pairs.1920##### `port`2122* **Description**: Specifies the network port on which the WilmerAI instance will listen. This allows multiple instances23 to run simultaneously. The server hosts on `0.0.0.0` by default, making it accessible on the local network.24* **Data Type**: `integer`25* **Required**: Yes26* **Example**: `5006`2728-----2930##### `customWorkflowOverride`3132* **Description**: A boolean flag that controls the routing system. If set to `true`, the prompt categorization and33 routing logic is bypassed, and all incoming prompts are forced to execute the workflow specified in the34 `customWorkflow` field.35* **Data Type**: `boolean`36* **Required**: Yes37* **Example**: `false`3839-----4041##### `customWorkflow`4243* **Description**: The name of the workflow to execute for all prompts when `customWorkflowOverride` is `true`. The44 value must match a workflow file name (without the `.json` extension) located in45 `Public/Configs/Workflows/<username>/`.46* **Data Type**: `string`47* **Required**: Yes48* **Example**: `"CodingWorkflow-LargeModel-Centric"`4950-----5152##### `routingConfig`5354* **Description**: The name of the routing configuration file to use when `customWorkflowOverride` is `false`. This55 file, located in `Public/Configs/Routing/`, maps prompt categories (e.g., "Coding", "General Chat") to specific56 workflows.57* **Data Type**: `string`58* **Required**: Yes59* **Example**: `"assistantSingleModelCategoriesConfig"`6061-----6263##### `categorizationWorkflow`6465* **Description**: The name of the workflow that analyzes an incoming prompt and assigns it a category from the66 `routingConfig` file. The output of this workflow determines which subsequent workflow is executed.67* **Data Type**: `string`68* **Required**: Yes69* **Example**: `"CustomCategorizationWorkflow"`7071-----7273##### `discussionIdMemoryFileWorkflowSettings`7475* **Description**: Specifies the workflow configuration file (without the `.json` extension) that governs how76 persistent, long-term memories are generated. This workflow handles conversation history chunking and the creation of77 file-based and vector-based memories.78* **Data Type**: `string`79* **Required**: Yes80* **Example**: `"_DiscussionId-MemoryFile-Workflow-Settings"`8182-----8384##### `fileMemoryToolWorkflow`8586* **Description**: The name of the workflow triggered to process and manage memories stored as files.87* **Data Type**: `string`88* **Required**: Yes89* **Example**: `"MemoryFileToolWorkflow"`9091-----9293##### `chatSummaryToolWorkflow`9495* **Description**: The name of the workflow used to generate and update a rolling summary of the conversation history96 for a given `discussionId`.97* \-**Data Type**: `string`98* **Required**: Yes99* **Example**: `"GetChatSummaryToolWorkflow"`100101-----102103##### `conversationMemoryToolWorkflow`104105* **Description**: The name of the workflow that processes the conversation to create discrete, chunked memories for106 later retrieval.107* **Data Type**: `string`108* **Required**: Yes109* **Example**: `"CustomConversationMemoryToolWorkflow"`110111-----112113##### `recentMemoryToolWorkflow`114115* **Description**: The name of the workflow responsible for retrieving and summarizing the most recent turns of a116 conversation for immediate context.117* **Data Type**: `string`118* **Required**: Yes119* **Example**: `"RecentMemoryToolWorkflow"`120121-----122123##### `discussionDirectory`124125* **Description**: The absolute path to the directory where persistent conversation files (e.g., `_memories.json`,126 `_chat_summary.json`) are stored. The application requires this directory to exist when a `discussionId` is used. For127 Windows paths, use double backslashes (`\\`).128* **Data Type**: `string` (file path)129* **Required**: Yes130* **Example**: `"D:\\WilmerAI\\Discussions"`131132-----133134##### `sqlLiteDirectory`135136* **Description**: The absolute path to the directory where the user's SQLite database (`WilmerDb.<username>.sqlite`)137 will be created. This database is used by the `LockingService` for `WorkflowLock` nodes.138* **Data Type**: `string` (file path)139* **Required**: Yes140* **Example**: `"D:\\WilmerAI\\Databases"`141142-----143144##### `endpointConfigsSubDirectory`145146* **Description**: The name of the subfolder within `Public/Configs/Endpoints/` that contains the JSON files defining147 the user's LLM endpoints (API URLs, keys, etc.).148* **Data Type**: `string`149* **Required**: Yes150* **Example**: `"assistant-single-model"`151152-----153154##### `workflowConfigsSubDirectoryOverride`155156* **Description**: Specifies a custom subfolder within `Public/Configs/Workflows/_overrides/` for workflow configurations.157 When set, workflows are loaded from `_overrides/<override>/` instead of the user's folder. This allows multiple users to158 share a common set of workflows.159* **Data Type**: `string`160* **Required**: No161* **Example**: `"coding-workflows"` (loads from `_overrides/coding-workflows/`)162163-----164165##### `presetConfigsSubDirectoryOverride`166167* **Description**: Specifies a custom subfolder within `Public/Configs/Presets/<ApiType>/` for LLM generation presets (168 e.g., temperature). If omitted, the system defaults to a subfolder named after the user. This allows multiple users to169 share a common set of presets.170* **Data Type**: `string`171* **Required**: No172* **Example**: `"shared-presets"`173174-----175176##### `chatPromptTemplateName`177178* **Description**: The name of the prompt template file (without the `.json` extension) from179 `Public/Configs/PromptTemplates/`. This template formats a list of messages into a single string for use with legacy180 completion-style APIs.181* **Data Type**: `string`182* **Required**: Yes183* **Example**: `"_chatonly"`184185-----186187##### `chatCompleteAddUserAssistant`188189* **Description**: If `true`, the system automatically prepends role prefixes (e.g., "User: ", "Assistant: ") to message190 content. This is for models that expect explicit roles in a flattened prompt string.191* **Data Type**: `boolean`192* **Required**: Yes193* **Example**: `true`194195-----196197##### `chatCompletionAddMissingAssistantGenerator`198199* **Description**: If `true` (and `chatCompleteAddUserAssistant` is also `true`), this adds a final, empty "Assistant: "200 prefix to the end of the prompt to signal to the LLM that it should begin its response.201* **Data Type**: `boolean`202* **Required**: Yes203* **Example**: `true`204205-----206207##### `connectTimeoutInSeconds`208209* **Description**: The timeout in seconds for establishing an HTTP connection to an LLM endpoint. This only covers the210 TCP connection phase (the initial handshake), not the time spent waiting for the LLM to process and respond. If the211 connection cannot be established within this time, the request fails. This is useful for detecting unreachable212 endpoints quickly rather than waiting for the full request timeout.213* **Data Type**: `integer`214* **Required**: No215* **Default**: `30`216* **Example**: `60`217218-----219220##### `useOfflineWikiApi`221222* **Description**: If `true`, enables the `OfflineWikipediaTextApi` tool, allowing workflows to query a local Wikipedia223 database.224* **Data Type**: `boolean`225* **Required**: Yes226* **Example**: `true`227228-----229230##### `offlineWikiApiHost`231232* **Description**: The IP address or hostname of the server running the `OfflineWikipediaTextApi`.233* **Data Type**: `string`234* **Required**: Yes235* **Example**: `"127.0.0.1"`236237-----238239##### `offlineWikiApiPort`240241* **Description**: The network port on which the `OfflineWikipediaTextApi` server is listening.242* **Data Type**: `integer`243* **Required**: Yes244* **Example**: `5728`245246-----247248##### `useFileLogging`249250* **Description**: If `true`, logs are written to a `wilmerai.log` file in the directory specified by the251 `--LoggingDirectory` command-line argument. If `false` or omitted, logs are only printed to the console.252* **Data Type**: `boolean`253* **Required**: No254* **Example**: `true`255256-----257258##### `allowSharedWorkflows`259260* **Description**: If `true`, the `/v1/models` and `/api/tags` API endpoints return workflow folders from261 `Public/Configs/Workflows/_shared/` as selectable models. This allows front-end applications to select different262 workflow folders via the model dropdown. If `false` or omitted (the default), only the username is returned as a263 model, and workflow selection occurs through the normal routing or `customWorkflow` settings.264* **Data Type**: `boolean`265* **Required**: No266* **Default**: `false`267* **Example**: `true`268269-----270271##### `sharedWorkflowsSubDirectoryOverride`272273* **Description**: Specifies a custom folder name to use instead of `_shared` for the shared workflows folder. When set,274 the `/v1/models` and `/api/tags` endpoints (when `allowSharedWorkflows` is true) will list workflow folders from275 `Public/Configs/Workflows/<override>/` instead of `_shared/`. Similarly, workflow selection via the API model field276 will look in this folder instead of `_shared/`.277* **Data Type**: `string`278* **Required**: No279* **Default**: `"_shared"`280* **Example**: `"_team_workflows"` (uses `Public/Configs/Workflows/_team_workflows/` for shared workflows)281282-----283284#### **Example User File**285286Here is a fully-commented example user configuration file.287288```json289{290 // The network port for this WilmerAI instance to listen on.291 "port": 5006,292 // If true, bypasses routing and uses 'customWorkflow' for all requests.293 "customWorkflowOverride": false,294 // The workflow to use when 'customWorkflowOverride' is true.295 "customWorkflow": "CodingWorkflow-LargeModel-Centric",296 // The routing configuration file that maps categories to workflows.297 "routingConfig": "assistantSingleModelCategoriesConfig",298 // The workflow that categorizes incoming prompts.299 "categorizationWorkflow": "CustomCategorizationWorkflow",300 // Workflow for managing long-term, persistent memory files.301 "discussionIdMemoryFileWorkflowSettings": "_DiscussionId-MemoryFile-Workflow-Settings",302 // Workflow triggered for file-based memory operations.303 "fileMemoryToolWorkflow": "MemoryFileToolWorkflow",304 // Workflow for generating a rolling summary of the chat.305 "chatSummaryToolWorkflow": "GetChatSummaryToolWorkflow",306 // Workflow for creating chunked memories from the conversation.307 "conversationMemoryToolWorkflow": "CustomConversationMemoryToolWorkflow",308 // Workflow for retrieving recent conversation turns.309 "recentMemoryToolWorkflow": "RecentMemoryToolWorkflow",310 // Directory to store all discussion-related files (memories, summaries).311 "discussionDirectory": "D:\\WilmerAI\\Discussions",312 // Directory to store the user's SQLite database for workflow locking.313 "sqlLiteDirectory": "D:\\WilmerAI\\Databases",314 // Subdirectory for this user's LLM endpoint configurations.315 "endpointConfigsSubDirectory": "assistant-single-model",316 // Optional override to use a shared folder for workflow configurations (within _overrides/).317 "workflowConfigsSubDirectoryOverride": "coding-workflows",318 // Optional override to use a shared folder for generation presets.319 "presetConfigsSubDirectoryOverride": "shared-presets",320 // The prompt template for flattening chat messages for completion APIs.321 "chatPromptTemplateName": "_chatonly",322 // If true, adds "User: " and "Assistant: " prefixes to messages.323 "chatCompleteAddUserAssistant": true,324 // If true, adds a final "Assistant: " to prompt the model's reply.325 "chatCompletionAddMissingAssistantGenerator": true,326 // If true, enables the local Wikipedia API tool.327 "useOfflineWikiApi": true,328 // Hostname for the local Wikipedia API.329 "offlineWikiApiHost": "127.0.0.1",330 // Port for the local Wikipedia API.331 "offlineWikiApiPort": 5728,332 // If true, enables writing logs to a file.333 "useFileLogging": true,334 // Timeout in seconds for establishing an HTTP connection to an LLM endpoint (default: 30).335 "connectTimeoutInSeconds": 30,336 // If true, lists workflow folders from the shared workflows folder in the models API endpoints.337 "allowSharedWorkflows": false,338 // Optional override for the shared workflows folder name (default is "_shared").339 "sharedWorkflowsSubDirectoryOverride": "_shared"340}341```