home / skills / terrylica / cc-skills / clean-component-removal
This skill guides a safe, orderly teardown of TTS and Telegram bot components, minimizing orphaned processes and stale state.
npx playbooks add skill terrylica/cc-skills --skill clean-component-removalReview the files below or copy the command above to add this skill to your agents.
---
name: clean-component-removal
description: Remove TTS and Telegram sync components cleanly. TRIGGERS - uninstall tts, remove telegram bot, uninstall kokoro, clean tts, teardown, component removal.
allowed-tools: Read, Bash, Glob, AskUserQuestion
---
# Clean Component Removal
Orderly teardown of TTS and Telegram bot components with proper sequencing to avoid orphaned processes and stale state.
> **Platform**: macOS (Apple Silicon)
---
## When to Use This Skill
- User wants to uninstall the Kokoro TTS engine
- User wants to remove the Telegram bot
- User wants to clean up all TTS-related files
- User wants to do a full teardown before reinstallation
- User wants to remove specific components selectively
---
## Requirements
- No special tools needed (removal uses only `rm`, `pkill`, and the install script)
- User confirmation before destructive operations
---
## Removal Order
The removal sequence matters. Components must be torn down in this order to avoid orphaned processes or lock contention.
| Step | Component | Command | Reversible? |
| ---- | ------------------ | -------------------------------------------------- | -------------------- |
| 1 | Bot process | `pkill -f 'bun.*src/main.ts'` | Yes (restart bot) |
| 2 | Kokoro venv | `kokoro-install.sh --uninstall` | Yes (reinstall) |
| 3 | Shell symlinks | `rm -f ~/.local/bin/tts_*.sh` | Yes (re-symlink) |
| 4 | Temp files | `rm -f /tmp/kokoro-tts-*.wav /tmp/kokoro-tts.lock` | N/A |
| 5 | Secrets (optional) | `rm -f ~/.claude/.secrets/ccterrybot-telegram` | Requires re-creation |
---
## What Is NOT Removed (Unless Explicitly Asked)
These are preserved by default to allow easy reinstallation:
| Resource | Path | Why Preserved |
| ---------------- | ------------------------------------------------------ | -------------------------- |
| Model cache | `~/.cache/huggingface/hub/models--hexgrad--Kokoro-82M` | ~400MB download, reusable |
| Bot source code | `~/.claude/automation/claude-telegram-sync/` | Git-tracked, not ephemeral |
| mise.toml config | `~/.claude/automation/claude-telegram-sync/mise.toml` | Configuration SSoT |
| Centralized logs | `~/.local/share/tts-telegram-sync/logs/` | Audit trail |
---
## Workflow Phases
### Phase 1: Confirmation
Use AskUserQuestion to confirm which components to remove. Present options:
1. **Full teardown** -- Remove everything (steps 1-4, ask about secrets)
2. **TTS only** -- Remove Kokoro venv + symlinks + temp files (steps 2-4)
3. **Bot only** -- Stop bot process (step 1 only)
4. **Selective** -- Let user pick individual steps
### Phase 2: Stop Bot Process
```bash
# Check if bot is running
pgrep -la 'bun.*src/main.ts'
# Stop it
pkill -f 'bun.*src/main.ts' || echo "Bot was not running"
```
### Phase 3: Remove Kokoro Venv
```bash
# Uses kokoro-install.sh --uninstall (removes venv, keeps model cache)
~/eon/cc-skills/plugins/tts-telegram-sync/scripts/kokoro-install.sh --uninstall
```
### Phase 4: Remove Symlinks
```bash
# List existing symlinks first
ls -la ~/.local/bin/tts_*.sh 2>/dev/null
# Remove them
rm -f ~/.local/bin/tts_*.sh
```
### Phase 5: Clean Temp Files
```bash
rm -f /tmp/kokoro-tts-*.wav
rm -f /tmp/kokoro-tts.lock
```
### Phase 6: Optional Secret Removal
Only with explicit user confirmation:
```bash
# Show what would be removed
ls -la ~/.claude/.secrets/ccterrybot-telegram
# Remove (requires confirmation)
rm -f ~/.claude/.secrets/ccterrybot-telegram
```
---
## TodoWrite Task Templates
```
1. [Confirm] Ask user which components to remove via AskUserQuestion
2. [Stop] Stop bot process
3. [Venv] Run kokoro-install.sh --uninstall
4. [Symlinks] Remove ~/.local/bin/ symlinks
5. [Temp] Clean /tmp/ TTS files
6. [Secrets] Optionally remove secrets (with confirmation)
7. [Verify] Confirm all selected components removed
```
---
## Post-Change Checklist
- [ ] Bot process is not running (`pgrep -la 'bun.*src/main.ts'` returns nothing)
- [ ] Kokoro venv removed (`ls ~/.local/share/kokoro/.venv` returns "No such file")
- [ ] Symlinks removed (`ls ~/.local/bin/tts_*.sh` returns "No such file")
- [ ] No stale lock file (`ls /tmp/kokoro-tts.lock` returns "No such file")
- [ ] No orphan audio processes (`pgrep -x afplay` returns nothing)
---
## Troubleshooting
| Problem | Likely Cause | Fix |
| ---------------------------------- | ------------------------------------ | ------------------------------------------------------------- |
| Symlinks still exist after removal | Glob mismatch or permission | `ls -la ~/.local/bin/tts_*` then `rm -f` each one |
| Stale lock after removal | Process died without cleanup | `rm -f /tmp/kokoro-tts.lock` |
| Model cache taking space | ~400MB in HuggingFace cache | `rm -rf ~/.cache/huggingface/hub/models--hexgrad--Kokoro-82M` |
| Bot respawns after kill | Launched with `--watch` from launchd | Check `launchctl list` for relevant agents |
| Audio still playing after teardown | `afplay` process outlives bot | `pkill -x afplay` |
---
## Reference Documentation
- [Evolution Log](./references/evolution-log.md) -- Change history for this skill
This skill performs an orderly teardown of TTS (Kokoro) and Telegram bot components on macOS (Apple Silicon). It sequences stop, uninstall, and file-removal steps to avoid orphaned processes and stale locks. User confirmation is required before any destructive action.
The skill inspects running processes, stops the Telegram bot, uninstalls the Kokoro virtual environment, and removes symlinks and temporary TTS files. It preserves large or reusable artifacts (model cache, bot source, config, logs) by default and offers an explicit option to remove secrets. Each removal step outputs status so you can verify success.
Will this delete my downloaded model files?
No. Model cache in ~/.cache/huggingface/... is preserved by default. Remove it manually only if you need to reclaim disk space.
What if the bot restarts after pkill?
A respawn indicates a launch agent or watcher. Check launchctl list for agents or processes started with --watch and disable them before killing the bot.