~/.genie/config.json, but the primary state store is an embedded PostgreSQL instance managed by pgserve.
config.json
Location:~/.genie/config.json
The primary configuration file, managed by genie setup or edited directly. Validated by a Zod schema on every load — invalid configs fall back to defaults with a warning.
Full Schema
Key Sections
Agent Profiles
Agent Profiles
Agent profiles (named Use profiles with:
workerProfiles in config) define how to launch Claude Code agents. Each profile specifies a launcher binary and CLI arguments.genie spawn engineer --profile safeCouncil Presets
Council Presets
Council presets configure dual-model deliberation for the Each preset pairs two agent profiles (left/right panes) with a skill.
/council skill:System Prompt Mode
System Prompt Mode
Controls how Genie injects system prompts into Claude Code agents:
Omni Integration
Omni Integration
Connects Genie to the Omni unified messaging platform:
State Storage — PostgreSQL
As of v4, Genie’s primary state store is an embedded PostgreSQL instance managed by pgserve. State that was previously stored in JSON files now lives in PG tables.State Locations
Legacy File Locations (deprecated)
These locations are no longer the primary state store but may still exist on disk:Connection Details
See the PostgreSQL architecture page for full schema details and migration history.
Auto-Approve Configuration
Genie supports layered trust configuration for automatic tool approval. Config hierarchy (lower overrides higher):- Global defaults:
~/.config/genie/auto-approve.yaml - Repo-level:
.genie/auto-approve.yamlin each repo - Wish-level:
## Auto-Approvesection in WISH.md
YAML Schema
Evaluation Order
For each tool use, the auto-approve engine:- Checks deny lists first (deny wins over allow)
- Checks allow lists
- For Bash commands, checks
bash_deny_patternsthenbash_allow_patterns - Merges layers: wish > repo > global defaults
Environment Variables
Claude Code Settings
Genie integrates with Claude Code’s settings at~/.claude/settings.json. The hook system is registered there:
Genie never modifies
~/.claude/settings.json directly. Hook registration is done during genie setup with user confirmation.