Skip to main content
Genie uses several configuration files and a PostgreSQL database for state. The main config file is ~/.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 (named workerProfiles in config) define how to launch Claude Code agents. Each profile specifies a launcher binary and CLI arguments.
Use profiles with: genie spawn engineer --profile safe
Council presets configure dual-model deliberation for the /council skill:
Each preset pairs two agent profiles (left/right panes) with a skill.
Controls how Genie injects system prompts into Claude Code agents:
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):
  1. Global defaults: ~/.config/genie/auto-approve.yaml
  2. Repo-level: .genie/auto-approve.yaml in each repo
  3. Wish-level: ## Auto-Approve section in WISH.md

YAML Schema

Evaluation Order

For each tool use, the auto-approve engine:
  1. Checks deny lists first (deny wins over allow)
  2. Checks allow lists
  3. For Bash commands, checks bash_deny_patterns then bash_allow_patterns
  4. 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.