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-removal

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
5.6 KB
---
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

Overview

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.

How this skill works

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.

When to use it

  • You want to fully uninstall the Kokoro TTS engine
  • You need to remove the Telegram bot process before reconfiguration
  • You want to clean TTS temporary files and symlinks to resolve failures
  • You plan a full teardown before reinstalling or upgrading components
  • You want to selectively remove only specific components (bot, venv, symlinks, temp, or secrets)

Best practices

  • Ask for explicit confirmation before running destructive commands
  • Stop the bot process first to avoid orphaned audio processes or lock contention
  • Preserve model cache and source code unless you need to reclaim disk space
  • List files (symlinks, temp, secrets) before removing to confirm targets
  • Run verification checks after removal (pgrep, ls) and report results back to the user

Example use cases

  • Full teardown prior to a clean reinstall of TTS and Telegram sync
  • Remove only the Kokoro venv and symlinks to reset the TTS runtime
  • Stop the bot process when it misbehaves or respawns unexpectedly
  • Clean temporary WAV and lock files to fix stuck audio jobs
  • Optionally purge Telegram secrets when rotating credentials or deprovisioning a bot

FAQ

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.