Configuration#
This page documents the canonical Ostler configuration surface: where settings live, how the layers interact, and what every key does.
For the variables you can set in the shell or in the dotenv file, see Environment variables. For the local HTTP API consumers of this configuration, see the API reference.
Configuration layout#
Ostler uses two configuration files plus an environment-variable override layer:
~/.ostler/config/.env # dotenv: identity, URLs, secrets
~/.pwg/settings.yaml # YAML: processing, redaction, models
process environment # final override layer
| File | Owns | Edited via |
|---|---|---|
~/.ostler/config/.env |
Identity, storage URLs, embedding model, API server, network, secrets | Installer in Phase 2/3; hand-edit afterwards |
~/.pwg/settings.yaml |
Conversation processing, locale, coaching tone, redaction policy, work geofence, model routing | Installer copies a template; hand-edit afterwards |
| Shell environment | Any of the above | export VAR=value before launching |
Resolution order is code default → YAML or .env value → shell
env var. The shell wins ties.
~/.ostler/config/.env#
This is the dotenv file the installer writes at the end of Phase 3. It captures the choices made in the installer prompts: who you are, where the storage lives, which embedding model is in use, and any optional integrations (CardDAV, Tailscale, Google Takeout).
Example (post-install, with placeholder values):
# Ostler configuration – generated by installer
# Identity
USER_ID="alex"
USER_NAME="Alex Example"
ASSISTANT_NAME="your-assistant-name"
TIMEZONE="Europe/London"
# Storage services (Docker containers on localhost)
OXIGRAPH_URL=http://localhost:7878
QDRANT_URL=http://localhost:6333
REDIS_URL=redis://localhost:6379
# Embedding
EMBED_OLLAMA_URL=http://localhost:11434
EMBED_MODEL=nomic-embed-text
EMBED_BATCH_SIZE=50
# Locale / phone normalisation
DEFAULT_COUNTRY_CODE=44
DEFAULT_PRIVACY_LEVEL=L2
# macOS extractor consent (comma-separated)
OSTLER_FDA_SOURCES="safari_history,safari_bookmarks,apple_notes,calendar,reminders"
# Optional: Google Takeout mbox
OSTLER_TAKEOUT_PATH=""
# Optional: Tailscale IPv4 address (set by installer when Tailscale is signed in)
OSTLER_TAILSCALE_IP=""
Every key in this file maps 1:1 to an entry in Environment variables. Editing the file is equivalent to exporting the variable before launching the Hub.
~/.pwg/settings.yaml#
The YAML config governs the conversation-processing pipeline. The installer copies a production template into place; you can hand-edit it afterwards. The Hub reads it on each pipeline run.
The YAML loader does NOT expand ${VAR} placeholders inside YAML
values. Per-deployment overrides come from environment variables (see
the env-var table at the bottom of this section), not from string
interpolation.
Identity#
# Stable user ID. Subject suffix in graph storage, partition key in the
# observation database. Treat as immutable.
user_id: your_user_id
# Display name used in prompt templates.
user_display_name: Your Name
Locale#
Recognised values include en-GB, en-US, en-AU, en-IE. Other
locales fall through to en-GB.
Coaching#
| Value | Effect |
|---|---|
direct |
Concise, prescriptive prompts |
supportive |
Softer framing, more open-ended prompts |
configurable |
The Hub picks per-observation based on relationship signals |
Redaction policy#
Categories tagged with mask are redacted before being written to any
observation or summary. Credentials and safeguarding categories are
always enforced; the categories below are user-configurable.
redaction:
financial: mask # mask | passthrough
medical: mask
legal: mask
contact_info: mask
policy_version: [email protected]
policy_version is an opaque tag the Hub records on each output so
you can later identify which redaction policy produced a given file.
Work geofence#
Optional. When enabled, the pipeline rejects transcripts tagged as captured at one of the configured work locations.
work_geofence:
enabled: false
addresses: [] # list of postal addresses
radius_m: 100 # match radius in metres
LLM endpoints and model routing#
# Local Ollama on the Hub.
ollama_url: http://localhost:11434
# Model routing. Adjust to match the compute machine's available VRAM.
ollama_classify_model: qwen3.5:9b
ollama_enrich_model: qwen3.6:35b-a3b
ollama_fact_model: qwen3.6:35b-a3b
ollama_relationship_model: qwen3.6:35b-a3b
ollama_coach_model: qwen3.6:35b-a3b
| Step | Description | Recommended size |
|---|---|---|
classify_model |
Quick classification of incoming items | 8-9B dense |
enrich_model |
Adds structured facts to a transcript | 30B+ MoE |
fact_model |
Extracts atomic facts | 30B+ MoE |
relationship_model |
Updates relationship signals | 30B+ MoE |
coach_model |
Generates coach observations | 30B+ MoE |
Smaller models can be used at the cost of structured-output quality.
The Hub's ollama_classify_model should be a fast model; the others
benefit from a higher-capacity MoE.
Storage#
# Vector store (semantic search).
qdrant_url: http://localhost:6333
qdrant_conversations_collection: conversations
# Graph store (relationships, facts).
oxigraph_url: http://localhost:7878
The collection name only needs to change if you are running multiple Hubs sharing a single vector store, which is not the supported topology.
Paths#
# Per-step state persistence. Never deleted automatically.
processing_state_dir: ~/.pwg/processing
# Final enriched conversation markdown output (one .md per conversation).
output_conversations_dir: ~/.pwg/conversations
# User Coach observation store (encrypted SQLite).
coach_db_path: ~/.pwg/coach/observations.db
The processing state directory accumulates per-step JSON files used for auditing and reprocessing. It is not cleaned automatically; you can delete the contents safely, but you will lose the ability to skip already-completed steps on re-run.
YAML environment-variable overrides#
The values above are literal in-file defaults. The localhost defaults work as-is once user_id and user_display_name are set, and most users will never need to change them. See Environment variables for the full list and override paths.
Power policy (MacBook Hub)#
If the Hub is running on a MacBook, an extra config file controls the power-management LaunchAgent:
| Policy | Behaviour |
|---|---|
normal |
Pause Docker and Ollama on battery; resume on AC |
aggressive |
Pause everything aggressively; lowest battery impact |
eco |
Light pausing; faster resume but more battery use |
The LaunchAgent reads this file on each tick. Mac Mini and Mac Studio
Hubs see tier ac every tick and take no action regardless of the
policy.
See also#
- Environment variables – every variable referenced here.
- API reference – the local HTTP API that consumes this config.
- CLI – installer and management commands.