Configuration Files
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
Worker Profiles
Worker Profiles
Worker profiles define how to launch Claude Code workers. Each profile specifies a launcher binary and CLI arguments.Use profiles with:
genie spawn engineer --profile safeCouncil Presets
Council Presets
Council presets configure dual-model deliberation for the Each preset pairs two worker profiles (left/right panes) with a skill.
/council skill:System Prompt Mode
System Prompt Mode
Controls how Genie injects system prompts into Claude Code workers:
| Mode | Flag | Behavior |
|---|---|---|
replace | --system-prompt-file | Replaces Claude Code’s default system prompt |
append | --append-system-prompt-file | Preserves Claude Code default, appends Genie context |
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
| State | Location | Notes |
|---|---|---|
| Tasks, stages, dependencies | PostgreSQL tasks, task_dependencies, task_stage_log | Full lifecycle with audit trail |
| Boards and pipelines | PostgreSQL boards, board_templates | Project-scoped column pipelines |
| Projects | PostgreSQL projects | Named task boards |
| Agents (workers) | PostgreSQL agents, agent_templates | Replaces ~/.genie/workers.json |
| Teams | PostgreSQL teams | Replaces ~/.genie/teams/*.json |
| Mailbox | PostgreSQL mailbox | Replaces .genie/mailbox/*.json |
| Team chat | PostgreSQL team_chat | Replaces .genie/chat/*.jsonl |
| Sessions | PostgreSQL sessions, session_content | Claude Code session metadata and content |
| Schedules and triggers | PostgreSQL schedules, triggers, runs | Cron-based automation |
| Audit events | PostgreSQL audit_events | OTel-structured immutable log |
| Heartbeats | PostgreSQL heartbeats | Agent liveness tracking |
| App registry | PostgreSQL app_store, installed_apps | Unified item registry |
| Conversations | PostgreSQL conversations, messages | Task-linked conversations |
| pgserve data | ~/.genie/data/pgserve/ | PostgreSQL data directory |
Legacy File Locations (deprecated)
These locations are no longer the primary state store but may still exist on disk:| File | Replaced By | Status |
|---|---|---|
~/.genie/workers.json | agents table | Deprecated — PG is authoritative |
~/.genie/teams/*.json | teams table | Deprecated — PG is authoritative |
.genie/mailbox/*.json | mailbox table | Deprecated — PG is authoritative |
.genie/chat/*.jsonl | team_chat table | Deprecated — PG is authoritative |
Connection Details
| Setting | Value |
|---|---|
| Default port | 19642 |
| Host | 127.0.0.1 |
| Database name | genie |
| Data directory | ~/.genie/data/pgserve/ |
| Port lockfile | ~/.genie/pgserve.port |
| Migration marker | ~/.genie/pgserve.migrated |
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
| Variable | Default | Purpose |
|---|---|---|
GENIE_HOME | ~/.genie | Relocates all global state |
GENIE_AGENT_NAME | — | Agent identity for hooks (required for auto-spawn) |
GENIE_TEAM | — | Default team name |
GENIE_NATS_URL | nats://localhost:4222 | NATS server URL |
GENIE_PG_PORT | 19642 | pgserve PostgreSQL port |
GENIE_MAX_CONCURRENT | 5 | Max concurrent scheduler runs |
GENIE_IDLE_TIMEOUT_MS | — | Auto-suspend idle workers after N ms |
CLAUDECODE | — | Set to 1 to enable Claude Code features |
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS | — | Set to 1 for native teammate UI |
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.