Skip to content

Configuration Files

FilePurpose
~/.claude-sessions/Session status JSON files
~/.claude-sessions/hooks/notify.shMain status hook script
~/.claude-sessions/hooks/tool-tracker.shTool usage tracking hook
~/.claude/settings.jsonClaude Code settings (hook configuration)
~/.config/navi/remotes.yamlRemote machine configuration
~/.config/navi/sounds.yamlAudio notification configuration
~/.config/navi/soundpacks/Sound pack directories
~/.config/navi/pm/PM agent data (events, memory, briefings)
~/.config/opencode/plugins/navi.jsOpenCode status plugin
.navi.yamlPer-project task configuration
~/.navi/config.yamlGlobal task configuration

~/.config/navi/remotes.yaml (Remote Machines)

Section titled “~/.config/navi/remotes.yaml (Remote Machines)”

Configures remote machines for SSH-based session aggregation. If this file doesn’t exist, remote support is disabled.

remotes:
- name: dev-server
host: dev.example.com
user: sean
key: ~/.ssh/id_rsa
sessions_dir: ~/.claude-sessions
jump_host: bastion.example.com
FieldTypeRequiredDefaultDescription
namestringYesDisplay name for the remote
hoststringYesSSH hostname or IP
userstringYesSSH username
keystringYesPath to SSH private key (supports ~)
sessions_dirstringNo~/.claude-sessionsSessions directory on the remote
jump_hoststringNoJump/bastion host

See Remote Sessions for full details.

Located in the project root. Configures the task provider for this project.

tasks:
provider: "markdown-tasks" # Provider script name (required)
args: # Provider-specific arguments (optional)
path: "docs/delivery"
interval: "30s" # Refresh interval (optional, default: 30s)
FieldTypeDefaultDescription
tasks.providerstring(required)Name of the provider script
tasks.argsmap{}Arguments passed to the provider script
tasks.intervalstring"30s"How often to refresh task data

Global defaults for the task system.

tasks:
default_provider: "markdown-tasks" # Default provider when none specified
interval: "30s" # Default refresh interval
status_map: # Map provider statuses to navi statuses
"todo": "open"
"in_progress": "active"

~/.config/navi/sounds.yaml (Audio Notifications)

Section titled “~/.config/navi/sounds.yaml (Audio Notifications)”

Configures audio notifications for session status changes. If this file doesn’t exist, audio is disabled.

enabled: true
pack: starcraft # Active sound pack name
volume: # Volume settings
global: 80 # 0-100, default 100
events: # Per-event multiplier (0.0-1.0)
error: 1.0
done: 0.7
waiting: 0.5
triggers:
waiting: true
permission: true
working: false
idle: false
stopped: false
done: true
error: true
files: # Explicit per-status file overrides
waiting: ~/sounds/waiting.wav
permission: ~/sounds/permission.mp3
done: ~/sounds/done.ogg
error: ~/sounds/error.wav
tts:
enabled: true
template: "{session} — {status}"
cooldown_seconds: 5
player: auto
tts_engine: auto
FieldTypeDefaultDescription
enabledboolfalseMaster toggle for all audio
packstringActive sound pack directory name
volume.globalint100Global volume (0-100)
volume.events.<status>float1.0Per-event volume multiplier (0.0-1.0)
triggers.<status>boolvariesWhether to notify on this status change
files.<status>stringExplicit file override (takes precedence over pack)
tts.enabledbooltrueEnable text-to-speech announcements
tts.templatestring"{session} — {status}"TTS template with {session} and {status} placeholders
cooldown_secondsint5Minimum seconds between notifications per session
playerstring"auto"Audio player binary or "auto" for detection
tts_enginestring"auto"TTS engine binary or "auto" for detection

See Audio Notifications for full details on sound packs, volume control, player and TTS detection.

Each subdirectory is a sound pack containing audio files named by event:

~/.config/navi/soundpacks/
starcraft/
waiting.wav
waiting-1.wav # Multi-variant (randomly selected)
waiting-2.wav
permission.wav
done.wav
error.wav
retro/
waiting.mp3
done.mp3

Supported formats: .wav, .mp3, .ogg, .flac. See Audio Notifications for details.

Stores PM engine data and Claude agent memory. Created automatically on first use.

~/.config/navi/pm/
├── events.jsonl # Event log (24-hour rolling)
├── system-prompt.md # Claude's instructions (code-controlled)
├── output-schema.json # JSON schema for output (code-controlled)
├── last-output.json # Cached briefing for fallback
└── memory/
├── short-term.md # Recent context (~2000 tokens)
├── long-term.md # Historical patterns (~3000 tokens)
└── projects/
└── <project>.md # Per-project memory (~1000 tokens)

See PM Dashboard for details on the PM agent and memory system.

Navi’s hooks are configured as entries in Claude Code’s settings file.

{
"hooks": {
"UserPromptSubmit": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh working"
}
],
"Stop": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh done"
}
],
"PermissionRequest": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh permission"
}
],
"SessionEnd": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh offline"
}
],
"PostToolUse": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh working"
},
{
"type": "command",
"command": "~/.claude-sessions/hooks/tool-tracker.sh"
}
],
"SubagentStart": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh working"
}
],
"SubagentStop": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh stopped"
}
],
"TeammateIdle": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh idle"
}
],
"TaskCompleted": [
{
"type": "command",
"command": "~/.claude-sessions/hooks/notify.sh done"
}
]
}
}