Profile schema
The full reference for ~/.neurodock/profile.yaml. Schema lives at packages/core/schemas/profile.schema.json ($id: https://schemas.neurodock.org/profile/v0.1.0/profile.schema.json).
Rationale and the design alternatives we rejected are in ADR 0004.
Top-level shape
Section titled “Top-level shape”| Block | Required? | Notes |
|---|---|---|
identity | Yes | Display name plus self-identified neurotypes. The only required block. |
preferences | No | Output format, chunk size, font hint, motion. |
chronometric | No | Hyperfocus break threshold, end-of-day cut-off, zones. |
guardrails | No | Rumination threshold and window, sycophancy posture. |
privacy | No | Embeddings, telemetry, OS idle consent. |
schema_version | No | Self-declared version string. Informational. |
extends | No | Single-level preset extension. |
additionalProperties: true at every level — see the forward-compatibility note below.
identity (required)
Section titled “identity (required)”| Field | Type | Default | Notes |
|---|---|---|---|
display_name | string | none | Free-form. One letter is fine. Never an email, never a real name. |
neurotypes | string[] | none | Self-identified. Enum: adhd | asd | audhd | ocd | dyslexia | dyspraxia | tourette | other. |
additional_notes | string | none | Optional free-form, never used to gate features. |
audhd is its own value, not ["adhd", "asd"]. The lived experience differs from either alone.
preferences
Section titled “preferences”| Field | Type | Default | Notes |
|---|---|---|---|
output_format | enum | answer_first | answer_first | conventional | bullet_first |
max_chunk_size | integer 1..20 | 7 | 5 is the ADHD-preset override; ships in profiles/presets/adhd-*. |
reading_font_hint | enum | atkinson_hyperlegible | atkinson_hyperlegible | lexend | system_default |
motion | enum | reduced | reduced | system | full |
chronometric
Section titled “chronometric”| Field | Type | Default | Notes |
|---|---|---|---|
hyperfocus_break_minutes | integer 15..240 | 90 | Anchors the ‘nudge’ rung of the 60/90/120 ladder. |
end_of_day_local | HH:MM string | none | Local timezone. Used by the after-end-of-day hyperfocus nudge. |
zones | map | none | Per-band overrides for the energy_zone heuristic. |
session_overlap_policy | enum | auto_close | auto_close | error — what happens when mark_session_start finds an open prior session. |
guardrails
Section titled “guardrails”| Field | Type | Default | Notes |
|---|---|---|---|
rumination_threshold | integer 1..20 | 3 | Repeat-count that triggers intervention. |
rumination_window_minutes | integer 5..1440 | 90 | Sliding window in minutes. |
sycophancy_check | enum | warn | off | warn | refuse — off still logs locally for self-audit. |
privacy
Section titled “privacy”| Field | Type | Default | Notes |
|---|---|---|---|
embeddings | enum | local | local | cloud_voyage | cloud_openai — cloud triggers a visible session-start notice. |
telemetry | enum | off | off | local_otel_only | full — full requires a future ADR plus clinical sign-off. |
os_idle_consent | boolean | false | Required true for idle_status to return real data. |
Example profile (rich)
Section titled “Example profile (rich)”identity: display_name: "T" neurotypes: ["adhd", "asd"]preferences: output_format: "answer_first" max_chunk_size: 5 reading_font_hint: "atkinson_hyperlegible" motion: "reduced"chronometric: hyperfocus_break_minutes: 90 end_of_day_local: "18:30"guardrails: rumination_threshold: 3 sycophancy_check: "warn"privacy: embeddings: "local" telemetry: "off"Minimal profile
Section titled “Minimal profile”identity: display_name: "T" neurotypes: ["adhd"]Everything else uses safe defaults. The loader applies them at read time — they are not written into the file.
Forward compatibility (the load-bearing rule)
Section titled “Forward compatibility (the load-bearing rule)”additionalProperties: true at every object level. Loaders must preserve unknown top-level and nested keys on round-trip. A v0.1 loader reading a v0.2 file must re-emit those v0.2 keys unchanged. See ADR 0004 §C for the rationale and the rejected strict-schema alternatives.
Typos are caught by neurodock profile validate, not by the loader.
Validating
Section titled “Validating”neurodock profile validateWarns on unknown keys with “did you mean…” hints. Refuses to load only when a known field is malformed (out-of-range integer, bad enum value).
What’s next
Section titled “What’s next”- ADR 0004 for the design rationale.
- Concepts: profiles for the higher-level picture.
- Getting started: profile for practical edits.