Settings¶
Generated from the code
This page is written from wholeboard/config.py each time the site is built. To change it, change the code.
Settings live in ~/.wholeboard/config.json (or $WHOLEBOARD_HOME/config.json) and are edited in Settings in the interface. The file holds only what differs from these defaults; anything missing takes the default.
Secrets (ai.anthropic_api_key, ai.openai_api_key, suppliers.mouser_api_key, suppliers.digikey_client_secret) are never sent back to the browser: the interface sees them masked. On Linux and macOS the file is readable by your user only. ANTHROPIC_API_KEY, OPENAI_API_KEY and XAI_API_KEY in the environment are used when no key is set.
Defaults¶
{
"ai": {
# provider: "anthropic" (Claude, cloud) or "openai" (any OpenAI-compatible server:
# OpenAI, Ollama, LM Studio, llama.cpp, vLLM, OpenRouter ...)
"provider": "anthropic",
"anthropic_api_key": "",
"anthropic_model": "claude-opus-5-5",
"anthropic_effort": "high",
"openai_base_url": "http://localhost:11434/v1",
"openai_api_key": "",
"openai_model": "qwen3:32b",
"openai_price_in": 0, # US$ per million tokens, for cost tracking (0 = free / local)
"openai_price_out": 0,
"max_turns": 60,
# a stronger model that plans and reviews while the model above does the legwork
"expert": {"enabled": False, "provider": "anthropic", "model": "claude-opus-5-5", "effort": "high"},
"vision": "auto", # show board renders to the AI for a visual review: auto | on | off
},
"tools": {
"kicad_cli": "", # empty = auto-detect
"tracemaker": "", # empty = auto-detect
"tracemaker_place": "", # empty = auto-detect
"tracemaker_wsl": False, # Windows: run TraceMaker inside WSL
"freecad": "", # FreeCAD (freecadcmd, the app, or an AppImage); empty = auto-detect
"ngspice": "", # ngspice program or KiCad's libngspice; empty = auto-detect
"platformio": "", # pio program, for compiling the starter firmware; empty = auto-detect
"models3d": "auto", # 3D part models: auto (download missing ones), local, off
"models3d_dir": "", # extra folder of KiCad 3D models (kicad-packages3D)
"footprint_dir": "", # empty = auto-detect
"symbol_dir": "", # empty = auto-detect
"route_time_s": 120,
"place_time_s": 60,
"live_viewer": True,
"viewer_port": 8766,
},
"jlcpcb": {
"quantity": 5,
"assembly": True,
"assembly_quantity": 2,
"pcba_type": "economic", # economic | standard
"surface_finish": "HASL(with lead)",
"solder_mask": "Green",
"shipping_country": "AU",
"shipping_method": "Global Standard Direct",
"currency": "USD",
},
"suppliers": { # optional: prices for parts JLCPCB cannot fit
"mouser_api_key": "",
"digikey_client_id": "",
"digikey_client_secret": "",
},
"printing": { # for the enclosure's print cost estimate
"material": "PLA",
"price_per_kg": 25.0, # filament, in your currency
"rate_cm3_h": 15.0, # volume your printer lays down per hour (Bambu/Prusa MK4 ~25, older ~10)
"power_w": 120.0,
"price_kwh": 0.30,
"machine_per_h": 0.0, # wear, or a print service's hourly rate
},
"projects_dir": str(DEFAULT_PROJECTS),
"port": 8770,
}