Add safe coding-agent integration removal
Adds basecamp setup agents --remove to remove Basecamp-managed coding-agent integrations while preserving user-authored files, Basecamp authentication, configuration, and project data.
The command removes managed shared and agent-specific skills, recognizes proven legacy installations, uninstalls recorded Claude plugin scopes from their owning project directories, and queries Codex before removing its plugin. Partial failures include structured removed and failures metadata; repeated removal is safe.
The maintainer follow-up is addressed in 96f819c: install, refresh, and removal accept symlinked parent directories used by dotfiles-managed homes. The shared ownership check inspects the skill directory itself before trusting markers, and the wizard validates the original canonical directory before resolving paths. A symlink at the skill-directory leaf remains user-owned even when its target contains a marker; symlinked parent directories remain supported. Legacy-baseline detection permits unrelated user files, allowing cleanup to remove the managed Claude link and skill payload while retaining those files. Regression tests cover install/removal through symlinked .claude and .agents parents, project skill parents, and preservation of user files. Actual Claude link-cleanup failures still retain the shared baseline so a retry can prove link ownership.
Preserves Jeremyβs cb4a355 legacy-payload allowlist update, including v0.10.0 and v0.11.0, and integrates current main, including Grok support. Managed home-local Grok skills are removed from configured and default homes, with tests for user-file preservation and idempotence. Generic agent and project cleanup skips every parent-resolved alias of the shared baseline, leaving its guarded final cleanup as the sole removal point so Claude failures retain it for retry. Plugin removal commands run in isolated process groups so wrapper descendants are terminated on timeout. When Claude's configured home differs from ~/.claude, both registries are inspected and each uninstall runs with its owning config selected. Removes the redundant Codex cleanup alias, reports an unowned install destination as usage instead of api_error, and documents that removal retains the shared 37signals marketplace registration and uses the codex binary for Codex plugin operations.
Validation: targeted ownership/removal/error tests, all five maintainer-reported scenarios in isolated homes, idempotence and user-file preservation, vet, lint, formatting, surface, skill drift, naming, provenance, tidy, lockstep, and smoke-coverage checks. The end-to-end suite passed (467 listed cases, with platform/tool skips). Full unit tests encounter terminal-detection failures also reproduced on clean upstream main; the feature-specific tests pass. Hosted Test/Security/CodeQL runs require maintainer approval before they can run.