con un clic
ai-tools-management
Scan, clean, back up, and uninstall AI dev tools on macOS.
Menú
Scan, clean, back up, and uninstall AI dev tools on macOS.
整理 Downloads 根目录文件,按类型分类到对应文件夹。对书籍目录进一步按主题归类,并维护书籍清单.md。操作前必须获取用户授权,不直接删除文件。
Download YouTube transcripts, subtitles, and cover images by URL or video ID.
一键搭建项目文档系统骨架(核心三文档 + c.md + jobs/legacy 流转 + Agents.md 约定)。当用户要求初始化文档系统、搭建文档结构、或为新项目创建文档骨架时使用。
Audit agent config health across all layers. Run periodically or when collaboration feels off.
Test SDK connectivity with third-party model providers (GLM, MiniMax, etc.).
Write session summaries and rewrite work-notes into articles.
| name | ai-tools-management |
| description | Scan, clean, back up, and uninstall AI dev tools on macOS. |
| author | Henri |
| created | 2026-03-12 |
| last_updated | 2026-05-13 |
单一来源:本 skill 的唯一实体在
henri_skills仓库中,~/.claude/skills/等均为软链接。编辑时请直接修改henri_skills中的文件。
Scan, back up, clean, and uninstall AI development tools on macOS.
Non-negotiable. Violating any rule risks permanent data loss.
pgrep -f <process> — warn user to close running tools first. Warn about sensitive data (API tokens, internal URLs) in backups.trash helper below. Only use sudo rm -rf for /Applications/*.app bundles, never with variable paths. Validate dynamically constructed paths are non-empty and under known tool directories.trash() {
for path in "$@"; do
if [ -e "$path" ]; then
osascript -e "tell application \"Finder\" to delete POSIX file \"$path\"" 2>/dev/null || \
mv "$path" ~/.Trash/ 2>/dev/null || \
rm -rf "$path"
fi
done
}
| Tool | ID | Detect App | Detect Data | Process Name |
|---|---|---|---|---|
| VS Code | vscode | /Applications/Visual Studio Code.app | ~/Library/Application Support/Code/ | Electron (Code) |
| Cursor | cursor | /Applications/Cursor.app | ~/.cursor/ | Cursor |
| Windsurf | windsurf | /Applications/Windsurf.app | ~/.windsurf/, ~/.codeium/ | Windsurf |
| Tool | ID | Install Method | Detect Data | Process Name |
|---|---|---|---|---|
| Claude Code | claude-code | 独立二进制 ~/.local/bin/claude | ~/.claude/ | claude |
| OpenCode | opencode | brew: anomalyco/tap/opencode | ~/.local/share/opencode/ | opencode |
| GitHub Copilot CLI | copilot | npm: @github/copilot | ~/.copilot/ | copilot |
| OpenAI Codex | codex | npm: @openai/codex | ~/.codex/ | codex |
| Cline | cline | npm: cline | ~/.cline/ | cline |
| Gemini CLI | gemini | brew: gemini-cli | ~/.gemini/ | gemini |
| Amp | amp | 独立二进制 ~/.local/bin/amp | ~/.amp/, ~/.local/share/amp/, ~/.config/amp/ | amp |
| Droid | droid | npm: @factory/cli 或独立二进制 | ~/.factory/ | droid |
echo "=== AI Tool Detection ==="
echo "--- IDE Tools ---"
for p in \
"/Applications/Visual Studio Code.app" \
"/Applications/Cursor.app" \
"/Applications/Windsurf.app"; do
if [ -e "$p" ]; then
size=$(du -sh "$p" 2>/dev/null | cut -f1)
echo " ✅ Found: $p ($size)"
fi
done
echo "--- CLI Tools ---"
for p in \
"$HOME/.claude" \
"$HOME/.local/share/opencode" \
"$HOME/.opencode" \
"$HOME/.copilot" \
"$HOME/.codex" \
"$HOME/.cline" \
"$HOME/.gemini" \
"$HOME/.amp" \
"$HOME/.factory"; do
if [ -e "$p" ]; then
size=$(du -sh "$p" 2>/dev/null | cut -f1)
echo " ✅ Found: $p ($size)"
fi
done
/Applications/Visual Studio Code.app # App bundle (~715M)
~/.vscode/extensions/ # Installed extensions (~2G+)
~/Library/Application Support/Code/
├── User/settings.json # ⛔ CONFIG
├── User/keybindings.json # ⛔ CONFIG
├── User/workspaceStorage/<hash>/
│ ├── state.vscdb # SQLite: workspace state
│ └── chatSessions/ # ⚠️ CHAT: Copilot chat logs (JSON)
├── User/globalStorage/state.vscdb # Global state DB
├── CachedExtensionVSIXs/ # ✅ CACHE
├── CachedData/ # ✅ CACHE
├── Cache/ # ✅ CACHE
├── WebStorage/ # 🟡 MODERATE
├── logs/ # ✅ CACHE
└── History/ # 🟡 MODERATE
~/Library/Caches/com.microsoft.VSCode/ # ✅ CACHE
~/Library/Saved Application State/com.microsoft.* # ✅ CACHE
Chat extraction:
find ~/Library/Application\ Support/Code/User/workspaceStorage \
-name "*.json" -path "*/chatSessions/*" 2>/dev/null
Duplicate extension detection:
ls ~/.vscode/extensions/ 2>/dev/null | \
sed 's/-[0-9]*\.[0-9]*\.[0-9]*$//' | sort | uniq -d | while read ext; do
echo "Duplicate: $ext"
ls -d ~/.vscode/extensions/${ext}-* 2>/dev/null | while read dir; do
echo " $dir ($(du -sh "$dir" | cut -f1))"
done
done
/Applications/Cursor.app # App bundle
~/.cursor/
├── extensions/ # ✅ CACHE — reinstallable (~627M)
├── projects/ # ⛔ CONFIG
├── ai-tracking/ai-code-tracking.db # ⚠️ CHAT — SQLite (may be empty)
└── *.json # ⛔ CONFIG
/Applications/Windsurf.app # App bundle
~/.windsurf/
├── extensions/ # ✅ CACHE — installed extensions (~1G+)
├── plans/ # 🟡 MODERATE
└── worktrees/ # 🟡 MODERATE
~/.codeium/windsurf/
├── cascade/*.pb # ⚠️ CHAT — Protobuf binary (~80M)
├── database/ # 🟡 MODERATE — embedding DB (~62M)
├── memories/ # ⛔ CONFIG — global rules
├── codemaps/ # 🟡 MODERATE
└── implicit/ # 🟡 MODERATE
Notes:
.pb files cannot be converted to text without the .proto schema. Always preserve originals.~/.windsurf/extensions/ can be reinstalled from Marketplace.ls ~/.windsurf/extensions/ 2>/dev/null | \
sed 's/-[0-9].*$//' | sort | uniq -d | while read ext; do
echo "Duplicate: $ext"
ls -d ~/.windsurf/extensions/${ext}-* 2>/dev/null | while read dir; do
echo " $(du -sh "$dir" | cut -f1) - $(basename "$dir")"
done
done
~/.claude/
├── history.jsonl # ⚠️ CHAT — command history
├── settings.json # ⛔ CONFIG + 🔴 SENSITIVE (may contain API tokens)
├── projects/ # ⛔ CONFIG — per-project data and CLAUDE.md
├── shell-snapshots/ # ✅ CACHE
├── todos/ # 🟡 MODERATE
├── skills/ # ⛔ CONFIG — skill definitions
└── plugins/ # ⛔ CONFIG
Sensitive data check:
grep -E "(TOKEN|KEY|SECRET|PASSWORD)" ~/.claude/settings.json 2>/dev/null
~/.local/share/opencode/
├── opencode.db # ⚠️ CHAT — SQLite (~14M)
├── opencode.db-shm # temp
└── opencode.db-wal # temp
~/.opencode/ # ⛔ CONFIG (if exists)
Chat extraction:
db="$HOME/.local/share/opencode/opencode.db"
if [ -f "$db" ]; then
echo "Sessions: $(sqlite3 "$db" 'SELECT COUNT(*) FROM session;')"
echo "Messages: $(sqlite3 "$db" 'SELECT COUNT(*) FROM message;')"
fi
~/.copilot/
├── config.json # ⛔ CONFIG
├── permissions-config.json # ⛔ CONFIG
├── settings.json # ⛔ CONFIG
├── command-history-state.json # 🟡 MODERATE
├── session-state/ # ⚠️ CHAT — session data (~4M)
├── logs/ # ✅ CACHE (~136K)
├── pkg/ # ✅ CACHE — bundled packages (~352M)
├── installed-plugins/ # 🟡 MODERATE
├── ide/ # 🟡 MODERATE — IDE integration
├── oaicopilot/ # 🟡 MODERATE
└── plugin-data/ # 🟡 MODERATE
~/.codex/
├── config.toml # ⛔ CONFIG
├── auth.json # ⛔ CONFIG + 🔴 SENSITIVE
├── history.jsonl # ⚠️ CHAT — command history
├── AGENTS.md # ⛔ CONFIG
├── sessions/ # ⚠️ CHAT — session data (~443M)
├── archived_sessions/ # ⚠️ CHAT — archived sessions (~49M)
├── cache/ # ✅ CACHE (~644K)
├── log/ # ✅ CACHE (~8.4M)
├── shell_snapshots/ # ✅ CACHE
├── memories/ # 🟡 MODERATE
├── plugins/ # 🟡 MODERATE (~37M)
├── skills/ # 🟡 MODERATE
├── rules/ # 🟡 MODERATE
├── sqlite/ # 🟡 MODERATE
├── ambient-suggestions/ # 🟡 MODERATE
├── computer-use/ # 🟡 MODERATE (~28M)
├── vendor_imports/ # 🟡 MODERATE
├── node_repl/ # 🟡 MODERATE
└── tmp/ # ✅ CACHE
~/.cline/
└── data/
├── globalState.json # ⛔ CONFIG — settings, provider prefs
├── secrets.json # 🔴 SENSITIVE — API keys (minimaxApiKey, zaiApiKey, etc.)
└── workspaces/ # 🟡 MODERATE — per-workspace state
Notes: Cline 是 VS Code 扩展的 CLI 版本。数据量通常较小(~140K)。
~/.gemini/
├── settings.json # ⛔ CONFIG
├── GEMINI.md # ⛔ CONFIG — global rules
├── google_accounts.json # 🔴 SENSITIVE — Google OAuth
├── oauth_creds.json # 🔴 SENSITIVE — OAuth credentials
├── projects.json # ⛔ CONFIG
├── state.json # 🟡 MODERATE
├── trustedFolders.json # 🟡 MODERATE
├── installation_id # 🟡 MODERATE
├── history/ # ⚠️ CHAT — per-session history files (~20M)
├── antigravity/ # 🟡 MODERATE
├── skills/ # 🟡 MODERATE
└── tmp/ # ✅ CACHE
Chat extraction:
ls ~/.gemini/history/ 2>/dev/null | wc -l
du -sh ~/.gemini/history/ 2>/dev/null
~/.amp/ # 主目录 (~125M)
├── bin/amp # ⛔ CONFIG — binary (symlinked from ~/.local/bin/amp)
└── file-changes/ # 🟡 MODERATE — tracked file changes (~58M)
~/.local/share/amp/ # 数据目录 (~44M)
├── threads/ # ⚠️ CHAT — per-thread JSON (~44M)
├── history.jsonl # ⚠️ CHAT — command history
├── session.json # 🟡 MODERATE
├── device-id.json # 🟡 MODERATE
├── secrets.json # 🔴 SENSITIVE — API key
└── ide/ # 🟡 MODERATE — IDE integration
~/.config/amp/
└── settings.json # ⛔ CONFIG
Notes: Amp 通过独立安装脚本安装,二进制存储在 ~/.amp/bin/ 并 symlink 到 ~/.local/bin/amp。自更新命令: amp update。
~/.factory/ # 主目录 (~217M)
├── settings.json # ⛔ CONFIG
├── auth.v2.file # 🔴 SENSITIVE — auth token
├── auth.v2.key # 🔴 SENSITIVE — auth key
├── history.json # ⚠️ CHAT — command history (~36K)
├── sessions/ # ⚠️ CHAT — per-session data (~18M, 22 sessions)
├── sessions-index.json # 🟡 MODERATE
├── droids/ # ⛔ CONFIG — custom droid definitions
├── plugins/ # 🟡 MODERATE (~3.4M)
├── logs/ # ✅ CACHE (~186M ⚠️ large)
├── cache/ # ✅ CACHE
├── bin/ # ⛔ CONFIG — binary
├── code-server-data/ # 🟡 MODERATE — embedded code server
├── code-server.sock # temp
├── artifacts/ # 🟡 MODERATE
├── snapshots/ # 🟡 MODERATE
├── sounds/ # 🟡 MODERATE
├── telemetry/ # ✅ CACHE
├── temp/ # ✅ CACHE
├── ide/ # 🟡 MODERATE
├── certs/ # 🟡 MODERATE
├── computer.json # 🟡 MODERATE
├── background-processes.json # 🟡 MODERATE
└── background-tasks.json # 🟡 MODERATE
Notes: Droid 由 Factory AI 开发。日志目录可能非常大(~186M),是清理重点目标。npm 包名为 @factory/cli。
Goal: Discover installed AI tools and report space usage.
du -sh <path> 2>/dev/nullGoal: Export chat histories and critical configs before destructive operations.
~/Downloads/ai-tools-backup-$(date +%Y%m%d-%H%M%S)/manifest.json with tool details, file counts, checksumstar czfAlways scan first. Always dry-run before executing.
| Target | Tool | Command |
|---|---|---|
| Extension VSIX cache | VS Code | trash ~/Library/Application\ Support/Code/CachedExtensionVSIXs |
| App cache | VS Code | trash ~/Library/Application\ Support/Code/CachedData |
| Browser cache | VS Code | trash ~/Library/Application\ Support/Code/Cache |
| State DB backup | VS Code | trash .../User/globalStorage/state.vscdb.backup |
| Old logs (>7d) | VS Code | find .../Code/logs -mtime +7 -exec trash {} + |
| Duplicate extensions (old versions) | VS Code/Cursor/Windsurf | detect then trash older dirs |
| Shell snapshots | Claude Code | trash ~/.claude/shell-snapshots |
| System cache | VS Code | trash ~/Library/Caches/com.microsoft.VSCode |
| Logs | Droid | trash ~/.factory/logs — 可释放 ~186M |
| Logs | OpenAI Codex | trash ~/.codex/log — ~8.4M |
| Logs | GitHub Copilot CLI | trash ~/.copilot/logs |
| Cache | OpenAI Codex | trash ~/.codex/cache ~/.codex/tmp |
| Temp / telemetry | Droid | trash ~/.factory/temp ~/.factory/telemetry |
| Temp | Gemini CLI | trash ~/.gemini/tmp |
| Bundled packages | GitHub Copilot CLI | trash ~/.copilot/pkg — ~352M, re-downloaded on next run |
| Target | Tool | Notes |
|---|---|---|
| Bundled Chromium | Windsurf | ws-browser/ ~465M, re-downloaded on launch |
| WebStorage | VS Code | ~1.4G browser storage |
| All extensions | Cursor/Windsurf | reinstallable from Marketplace |
| Archived sessions | OpenAI Codex | ~/.codex/archived_sessions/ ~49M |
| Shell snapshots | OpenAI Codex | ~/.codex/shell_snapshots/ |
| Code server data | Droid | ~/.factory/code-server-data/ ~1.9M |
| File changes | Amp | ~/.amp/file-changes/ ~58M, 重建代价高 |
| Target | Tool | Notes |
|---|---|---|
| All extensions | VS Code | ~2.2G, private extensions may be lost |
| Embedding database | Windsurf | rebuilt on next indexing |
| Extension data (globalStorage) | VS Code | may contain extension state |
Goal: Completely remove an AI tool.
Per-tool uninstall commands:
IDE Tools:
trash ~/.vscode ~/Library/Application\ Support/Code ~/Library/Caches/com.microsoft.VSCode + sudo rm -rf "/Applications/Visual Studio Code.app"trash ~/.cursor + sudo rm -rf "/Applications/Cursor.app"trash ~/.windsurf ~/.codeium + sudo rm -rf "/Applications/Windsurf.app"CLI Tools:
trash ~/.claude + 删除 ~/.local/share/claude/ 和 ~/.local/bin/claude 符号链接trash ~/.local/share/opencode ~/.opencode + brew uninstall opencodetrash ~/.copilot + npm uninstall -g @github/copilottrash ~/.codex + npm uninstall -g @openai/codextrash ~/.cline + npm uninstall -g clinetrash ~/.gemini + brew uninstall gemini-clitrash ~/.amp ~/.local/share/amp ~/.config/amp + 删除 ~/.local/bin/amp 符号链接trash ~/.factory + npm uninstall -g @factory/cli 或删除 ~/.local/bin/droid 二进制When scanning or backing up, check and warn:
| Pattern | Type |
|---|---|
*TOKEN*, *_KEY, *SECRET* | API credentials |
ANTHROPIC_*, OPENAI_*, GOOGLE_* | AI service tokens |
mongodb://, postgres:// | Connection strings |
apiKey@*, sgamp_user_* | Amp API keys (~/.local/share/amp/secrets.json) |
minimaxApiKey, zaiApiKey | Cline API keys (~/.cline/data/secrets.json) |
auth.v2.file, auth.v2.key | Droid auth tokens (~/.factory/) |
oauth_creds.json, google_accounts.json | Gemini OAuth (~/.gemini/) |
auth.json | Codex auth (~/.codex/) |
grep -rIl -E "(TOKEN|API_KEY|SECRET|PASSWORD|apiKey|mongodb://|postgres://)" <directory> 2>/dev/null