Summary
After running ./install.sh (or make claude-install), users still get confirmation prompts for every mcp__linkedin__* tool call and every Skill(...) invocation. The root cause is that allow_outreach_claude_settings in install.sh silently swallows failures and the permissions are never written to ~/.claude/settings.json.
Observed behavior
~/.claude/settings.json after a full install:
{
"permissions": {
"allow": []
}
}
Every mcp__linkedin__* call (send_message, scrape_profile, etc.) and every skill invocation (conversation-planner, send-connection-request, setup-outreach, etc.) prompts for user confirmation.
Expected behavior
~/.claude/settings.json should contain the pre-approved rules written by bin/outreach-allow-settings:
{
"permissions": {
"allow": [
"mcp__linkedin",
"Skill(conversation-planner)",
"Skill(outreach-uninstall)",
"Skill(outreach-upgrade)",
"Skill(reply-to-post)",
"Skill(send-connection-request)",
"Skill(setup-outreach)",
"Skill(sync-planner-persona-from-linkedin)",
"Bash(bin/outreach-*)",
"Bash(./install.sh*)",
"Bash(./uninstall.sh*)",
"Bash(make upgrade*)",
"Bash(make uninstall*)",
"Bash(make claude-install*)"
]
}
}
Root cause
allow_outreach_claude_settings in install.sh (line ~427) returns 0 on every failure path:
allow_outreach_claude_settings() {
if [[ ! -x "${allow_script}" ]]; then
warn "Missing ${allow_script}..."
return 0 # ← silent exit, no permissions written
fi
if ! output="$(... "${allow_script}" add ...)"; then
warn "Could not update Claude permissions: ${output}"
return 0 # ← silent exit, no permissions written
fi
}
Common failure modes:
uv not on PATH in the subshell that runs outreach-allow-settings (the Python runner inside that script calls uv run)
- Python import error in the embedded script
~/.claude/settings.json is read-only or has unexpected format
In all cases the installer completes, prints "Setup finished", and the only signal is a buried warn: could not pre-allow outreach tools/skills note in the summary — which most users miss.
Fix suggestions
- Add a post-install verification step in
allow_outreach_claude_settings that reads back the written file and confirms the allow array is non-empty. If it's still empty, surface a loud, actionable error.
- Alternatively, run
bin/outreach-allow-settings add as a separate, clearly-labeled step with its own step_begin/step_done tracking so failures appear in the step output.
- Add a manual recovery command to the final summary so users can re-run just the permissions step:
bin/outreach-allow-settings add.
Workaround
Users can run manually from the repo:
bin/outreach-allow-settings add
This writes the correct rules to ~/.claude/settings.json and resolves the confirmation prompts.
Summary
After running
./install.sh(ormake claude-install), users still get confirmation prompts for everymcp__linkedin__*tool call and everySkill(...)invocation. The root cause is thatallow_outreach_claude_settingsininstall.shsilently swallows failures and the permissions are never written to~/.claude/settings.json.Observed behavior
~/.claude/settings.jsonafter a full install:{ "permissions": { "allow": [] } }Every
mcp__linkedin__*call (send_message, scrape_profile, etc.) and every skill invocation (conversation-planner, send-connection-request, setup-outreach, etc.) prompts for user confirmation.Expected behavior
~/.claude/settings.jsonshould contain the pre-approved rules written bybin/outreach-allow-settings:{ "permissions": { "allow": [ "mcp__linkedin", "Skill(conversation-planner)", "Skill(outreach-uninstall)", "Skill(outreach-upgrade)", "Skill(reply-to-post)", "Skill(send-connection-request)", "Skill(setup-outreach)", "Skill(sync-planner-persona-from-linkedin)", "Bash(bin/outreach-*)", "Bash(./install.sh*)", "Bash(./uninstall.sh*)", "Bash(make upgrade*)", "Bash(make uninstall*)", "Bash(make claude-install*)" ] } }Root cause
allow_outreach_claude_settingsininstall.sh(line ~427) returns 0 on every failure path:Common failure modes:
uvnot on PATH in the subshell that runsoutreach-allow-settings(the Python runner inside that script callsuv run)~/.claude/settings.jsonis read-only or has unexpected formatIn all cases the installer completes, prints "Setup finished", and the only signal is a buried
warn: could not pre-allow outreach tools/skillsnote in the summary — which most users miss.Fix suggestions
allow_outreach_claude_settingsthat reads back the written file and confirms theallowarray is non-empty. If it's still empty, surface a loud, actionable error.bin/outreach-allow-settings addas a separate, clearly-labeled step with its ownstep_begin/step_donetracking so failures appear in the step output.bin/outreach-allow-settings add.Workaround
Users can run manually from the repo:
This writes the correct rules to
~/.claude/settings.jsonand resolves the confirmation prompts.