---
name: teleo-vps-runtime-ops
description: Use for Leo VPS navigation, service health, Docker/Postgres readbacks, clone DB rehearsals, report sync, and runtime stability verification without changing live Leo behavior.
---

# Teleo VPS Runtime Ops

## Job

Navigate and verify the VPS safely, with exact readbacks and no surprise live-runtime changes.

## Trigger Phrases

- "Leo on VPS"
- "check VPS stability"
- "navigate Teleo VPS"
- "leoclean service"
- "run DB rehearsal on VPS"
- "sync reports to VPS"

## Known Surfaces

- Host: `77.42.65.182`
- SSH user: `root`
- Local key path is available; never print private key contents.
- Service: `leoclean-gateway.service`
- DB container: `teleo-pg`
- DB: `teleo`
- Profile reports: `/home/teleo/.hermes/profiles/leoclean/kb_stage/reports/`
- Deploy/source area: `/opt/teleo-eval/workspaces/deploy-infra`

## Required Fresh Readbacks

Before claiming runtime state, read:

```bash
systemctl show leoclean-gateway.service -p ActiveState -p SubState -p MainPID -p NRestarts -p ExecMainStartTimestamp -p User -p WorkingDirectory
```

Before claiming DB state, use `docker exec teleo-pg psql -U postgres -d teleo` and query exact tables/rows.

Before claiming cleanup, query disposable DBs:

```sql
select datname from pg_database where datname like 'teleo%rehearsal%20260709' or datname like 'teleo%packet%20260709';
```

## Mutating Boundaries

Allowed when needed:

- read-only service/DB inspection,
- disposable clone DB creation and drop for rehearsal,
- SQL rollback transactions,
- syncing report artifacts to the report directory,
- no-secret file checks.

Not allowed from this skill alone:

- restarting or changing the live Leo service,
- changing live runtime config,
- production DB commit/apply,
- exposing secret contents,
- deleting non-disposable data.

## Rehearsal Rules

For DB rehearsals:

1. Capture production preflight counts.
2. Create a disposable DB from live state.
3. Run commit SQL only in the disposable DB.
4. Run postflight counts.
5. Run delete rollback if applicable.
6. Drop the disposable DB.
7. Verify production counts stayed unchanged.
8. Verify the disposable DB no longer exists.

## Blocker Format

Do not say "blocked" without:

- `current_canary`
- `attempted_routes`
- `exact_gate`
- `clear_CTA`
- `next_non_user_action`
