Here is some setup I find particular useful.
1. bypass permissions
Skips all permission prompts (requires safe environment - see warning below)
~/.claude/settings.json
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [],
"deny": [],
"defaultMode": "bypassPermissions"
}
}
2. setup notification (Hook)
It's very useful to have some sort of notification when claude code stop.
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"hooks": {
"Stop": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Blow.aiff"
}
]
}
],
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/notify.sh"
}
]
}
]
}
}
notify.sh
#!/bin/bash
# Simple Mac notification script
# Usage: ./notify.sh "Title" "Message" [sound]
TITLE="${1:-Claude Code}"
MESSAGE="${2:-Task completed}"
SOUND="${3:-Purr}"
# Use terminal-notifier if available (better UI), fallback to osascript
if command -v terminal-notifier &> /dev/null; then
terminal-notifier -title "$TITLE" -message "$MESSAGE" -sound "$SOUND"
else
# Alternative AppleScript approach with subtitle for better visibility
osascript -e "display notification \"$MESSAGE\" with title \"$TITLE\" subtitle \"Claude Code Hook\" sound name \"$SOUND\""
fi
3. Run parallel sessions with worktree
# Create a new worktree with a new branch
git worktree add ../project-feature-a -b feature-a
For example, assume you have a github repo called cue-app
and it's current on main branch,
cd cue-app/
git worktree add ../cue-app-tree -b tree-main
It will create a new folder cue-app-tree
with a branch named tree-main
checkout. So it will looks like,
- cue-app/ -> main branch
- cue-app-tree/ -> tree-main branch
The main benefit is that worktree share branches, you can switch branch among worktree folder as long as the branch is not checkout.