---
name: clean-component-removal
description: Remove TTS and Telegram sync components cleanly. TRIGGERS - uninstall tts, remove telegram bot, uninstall kokoro
allowed-tools: Read, Bash, Glob, AskUserQuestion
disable-model-invocation: false
---

# 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)

---

> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

## 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         |
| Launchd logs     | `~/.local/state/launchd-logs/telegram-bot/`             | Rotated by log-rotation    |
| NDJSON audit     | `~/.claude/automation/claude-telegram-sync/logs/audit/` | Self-rotating 14d          |

---

## 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-tg-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

## Post-Execution Reflection

After this skill completes, reflect before closing the task:

0. **Locate yourself.** — Find this SKILL.md's canonical path (Glob for this skill's name) before editing. All corrections target THIS file and its sibling references/ — never other documentation.
1. **What failed?** — Fix the instruction that caused it. If it could recur, add it as an anti-pattern.
2. **What worked better than expected?** — Promote it to recommended practice. Document why.
3. **What drifted?** — Any script, reference, or external dependency that no longer matches reality gets fixed now.
4. **Log it.** — Every change gets an evolution-log entry with trigger, fix, and evidence.

Do NOT defer. The next invocation inherits whatever you leave behind.

---

---
