docs: scheduled imports on macOS β the TCC prompt loop and the Full Disk Access setup - #62
Conversation
β¦k Access) Scheduled (launchd/cron) imports on macOS 15.2+ hit a recurring 'access data from other apps' prompt because the app-data consent is session-scoped for background processes β Allow never persists. Document the working setup: run the job from a stable-path copy of the binary and grant that copy Full Disk Access, refreshing the copy after upgrades. Also covers the launchd OS_REASON_CODESIGNING trap when the signing identity changes under a registered job. Closes openclaw#61 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
d8ebf27 to
271dd71
Compare
|
Codex review: needs real behavior proof before merge. Reviewed August 7, 2026, 4:46 PM ET / 20:46 UTC. ClawSweeper reviewWhat this changesAdds a macOS scheduled-imports guide explaining the TCC prompt loop, a stable signed binary path with Full Disk Access, and a launchd example, then links it from the README. Merge readinessKeep this PR open for maintainer review: it is a focused documentation response to the linked macOS scheduling report, and the revised head resolves the earlier absolute-path launchd concern. The remaining choice is whether to endorse Full Disk Access as official least-privilege guidance. Priority: P2 Review scores
Verification
How this fits togetherwacrawl reads WhatsApp Desktopβs protected macOS container and imports a snapshot into its local archive. Scheduled launchd imports can hit macOS TCC consent behavior before the importer can create or refresh that archive. flowchart LR
A[WhatsApp Desktop container] --> B[Scheduled launchd job]
B --> C[Dedicated wacrawl copy]
C --> D[macOS TCC access check]
D -->|Full Disk Access granted| E[Import archive]
D -->|Consent prompt blocks run| F[Stale archive]
Decision needed
Why: This is a user-facing privacy and support-policy choice, not a mechanical documentation correction; the PR already presents the least-privilege implementation. Before merge
Findings
Agent review detailsSecurityNeeds attention: No executable or dependency change is present, but publishing a Full Disk Access workaround requires deliberate maintainer approval of its broad permission boundary. Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Publish the narrow guide with its dedicated-copy, signature-verification, and revocation safeguards if maintainers approve Full Disk Access as the supported remedy for unattended imports. Do we have a high-confidence way to reproduce the issue? Noβthe reported TCC and launchd behavior was not executed in this review; the PR body supplies a concrete macOS environment and observed tccd evidence. Is this the best way to solve the issue? Unclearβthe documentation path is narrow and avoids changing import behavior, but maintainers must decide whether Full Disk Access is an appropriate official recommendation. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 6a177d040a7d. LabelsLabel changes:
Label justifications:
EvidenceSecurity concerns:
What I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
History |
launchd performs no tilde expansion in ProgramArguments β replace the tilde-based instruction with a complete minimal plist example using an absolute path, plus bootstrap/inspect commands. Simplify the copy-refresh to one symlink-following cp for both setup and upgrades, and add a least-privilege section: grant FDA only to the dedicated copy, verify its signing identity, revoke when unscheduled. Addresses the ClawSweeper P2 finding on openclaw#62. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@clawsweeper re-review Addressed the P2: the launchd instruction now ships a complete minimal plist with an absolute |
|
π¦π§Ή I asked ClawSweeper to review this item again. Re-review progress:
|
|
Landed as Proof run before merge:
GitHub did not offer the normal CI matrix for this fork branch; the available dispatch check passed and the executable/doc-specific proof above was run locally on macOS. The reported recurring TCC prompt itself was reproduced by the contributor on macOS 26, as documented in #61. |
Documents the macOS TCC prompt loop that breaks scheduled imports, and the setup that fixes it. Full diagnosis with tccd evidence in #61.
What's in here:
docs/scheduled-imports.mdβ why the "access data from other apps" Allow never persists for launchd/cron runs (session-scoped consent,kTCCServiceSystemPolicyAppData), the stable-path + Full Disk Access setup that makes unattended imports work (TCC keys bare binaries by absolute path, so the versioned Cellar path loses the grant on every upgrade), the post-upgradecp -prefresh, and the launchdOS_REASON_CODESIGNINGtrap when a job's binary changes signing identity.Everything documented was reproduced and verified on macOS 26 (Darwin 25.5) with wacrawl 0.3.6 running under launchd on a 2-hour
StartIntervalβ the prompt loop, the session-scoped tccd log lines, the FDA fix, the upgrade-survival behavior, and the codesigning kill.Happy to fold this into
docs/commands.mdinstead, trim it, or adjust the recommended paths if you prefer a different convention.Closes #61
π€ Generated with Claude Code