config
SKILL.md
Design Principle
Lua owns all default values. The Go daemon receives the complete config via the CURSORTAB_CONFIG environment variable with all defaults already applied. Go structs should not have default values or use pointer types for optional fields - all fields are required and must be provided by Lua.
Lua-only vs Go fields: Some config sections are handled entirely in Lua and never sent to Go: enabled, keymaps, ui, blink. Conversely, Go's Config struct has auto-populated fields (ns_id, editor_version, editor_os) that Lua sets internally — these are not user-configurable and should not be added to default_config.
Files to Update
When modifying config options, update these locations:
1. Lua Side
lua/cursortab/config.lua
- Type annotation in
---@classblock (e.g.,---@field new_option type) - Default value in
default_configtable (required - Go expects all values) - Validation (if enum-like, add to
valid_*table and update error invalidate_config) - Unknown keys are automatically rejected by
validate_config_keys()— no update needed there unless changing the validation logic itself - If adding/modifying default values for highlight groups, update
config.setup_highlights()in config.lua