preferences.json
Reference for ~/.fabric-agent/preferences.json — personal info Fabric Agents uses to tailor agent responses.
preferences.json holds the personal context Fabric Agents injects into the agent's system prompt so responses feel personalised — your name, timezone, where you are, notes you want every session to know about you.
~/.fabric-agent/preferences.jsonIt's separate from config.json on purpose: config is about app behaviour; preferences are about you.
Schema
| Field | Type | Purpose |
|---|---|---|
name | string | Display name — e.g. "Alex". Used in the system prompt so the agent can address you. |
timezone | string | IANA timezone — e.g. "America/Los_Angeles", "Europe/Berlin". Used for scheduling and date formatting. |
location | { city?, region?, country? } | Geographic context. The agent uses it for localisation (temperature units, language defaults). |
notes | string | Free-form notes about how you like to work. "I prefer concise, code-first answers. I work mostly in TypeScript and Python." |
diffViewer | { diffStyle?, disableBackground? } | Diff display preferences. diffStyle is "unified" or "split"; disableBackground hides the coloured background strip. |
includeCoAuthoredBy | boolean | When true (default), the agent adds a Co-Authored-By: trailer to git commits it creates. |
updatedAt | number | Milliseconds since epoch. Set automatically on save. |
A note on language
There used to be a language field here. It's deprecated — Fabric Agents now reads the UI language from your i18n setting (Settings → Appearance → Language) and passes that to the agent. The old language field is ignored if present.
Example
{
"name": "Alex",
"timezone": "America/Los_Angeles",
"location": {
"city": "San Francisco",
"region": "California",
"country": "USA"
},
"notes": "I prefer concise, code-first answers. I work mostly in TypeScript and Python.\nWhen explaining concepts, assume I'm comfortable with Go and React.",
"diffViewer": {
"diffStyle": "split",
"disableBackground": false
},
"includeCoAuthoredBy": true,
"updatedAt": 1705000000000
}How it's used
At session start, Fabric Agents formats preferences.json into a short block of "User context" and prepends it to the system prompt. Fields only appear in the prompt when set — an empty notes isn't shown; a missing location isn't fabricated.
You can ask the agent to update your preferences at any time:
"Remember that I always want concise answers, and my timezone is Berlin."
The agent writes to preferences.json through the preferences tool (assuming the session has permission). You can also edit it by hand — the file is re-read on every session start.
Privacy
preferences.jsonlives on your machine. It's not uploaded with shared sessions.- Credentials, API keys, and OAuth tokens never go here — those live in the OS keychain or the encrypted credential store.
- When you share a session, the viewer does not see your preferences — the shared payload contains only the session's messages and tool calls, not the system prompt that fed the agent.
Editing
Close the app before editing to avoid race conditions with auto-save. Standard JSON rules apply — the app fails loud (a user-facing error dialog) rather than silently dropping a malformed preferences file.
Related
- config.json — app-wide settings (separate file).
- LLM connections — provider credentials and defaults.
- Conversations — where per-session settings live (vs per-user here).
config.json
Reference for ~/.fabric-agent/config.json — app-wide settings, workspace list, LLM connections, defaults, and migration from legacy formats.
LLM Connections
Reference for the llmConnections array in config.json — supported providers, auth types, custom endpoints, OAuth flows, and the resolution fallback chain.