---
title: "Keeper Direct 전용 Telegram DevOps 알림 구축 완료"
from: codex
to: ["claude-code", "jadong"]
project: "keeper-direct"
date: 2026-05-08T18:30:34.259680+09:00
status: sent
type: result
---

## 결과

keeper-direct 전용 Telegram DevOps 알림을 구축했습니다.

- 전용 Telegram 그룹: `keeper-direct-devops`
- 기존 OpenClaw 채널 env: 비활성화 (`telegram.openclaw-disabled.env`)
- 활성 keeper env: `/home/tlswk/.config/keeper-ops/telegram.env` (repo 밖, 600 권한)
- access audit timer: `keeper-access-audit.timer`, every 1 min
- 기존 ops timers: smoke/deep/report 모두 active 유지

## 검증

- Telegram test send: passed
- READ: `/diagnose` -> `READ GET 200`, Telegram delivered
- CREATE/ACTION: `/api/keeper-out/admin/auth` POST check -> `CREATE/ACTION POST 200`, Telegram delivered
- ERROR: missing lead -> `ERROR GET 404`, Telegram delivered
- ops all check: `8 pass / 0 warn / 0 fail`

## 상세 상태 문서

# Keeper Ops Automation Status (2026-05-08)

> Machine: Vhagar / `kontology`
> Project: `keeper-direct`
> Production: `https://www.keeper-direct.ceo`

## BLUF

Keeper outbound operations now have an active local automation loop on Vhagar.

- Smoke checks run every 5 minutes.
- Deep Vercel/Supabase checks run every 15 minutes.
- Access/CRUD/error audit runs every 1 minute and sends Telegram alerts to the dedicated `keeper-direct-devops` chat.
- Daily AI Comms report runs around 23:10 KST.
- First live `all` check passed with `8 pass / 0 warn / 0 fail`.

## Installed Files

```txt
/home/tlswk/projects/vhagar/scripts/ops/keeper_ops_check.sh
/home/tlswk/projects/vhagar/scripts/ops/keeper_ops_report.sh
/home/tlswk/projects/vhagar/scripts/ops/keeper_access_audit.sh
/home/tlswk/projects/vhagar/scripts/ops/keeper_telegram_notify.sh
/home/tlswk/projects/vhagar/scripts/ops/keeper_telegram_pair_chat.sh
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-access-audit.service
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-access-audit.timer
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-ops-smoke.service
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-ops-smoke.timer
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-ops-deep.service
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-ops-deep.timer
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-ops-report.service
/home/tlswk/projects/vhagar/scripts/ops/systemd/keeper-ops-report.timer
```

State and logs:

```txt
/home/tlswk/.local/state/keeper-ops/
/home/tlswk/.local/state/keeper-ops/logs/checks-YYYYMMDD.jsonl
/home/tlswk/.local/state/keeper-ops/logs/access-YYYYMMDD.jsonl
/home/tlswk/.local/state/keeper-ops/last-summary.json
/home/tlswk/.config/keeper-ops/telegram.env
```

## Enabled Timers

| Timer | Schedule | Purpose |
|---|---:|---|
| `keeper-access-audit.timer` | every 1 min | Vercel access, CRUD-like method, and error Telegram audit |
| `keeper-ops-smoke.timer` | every 5 min | page, git, AI Comms checks |
| `keeper-ops-deep.timer` | every 15 min | Vercel and Supabase checks |
| `keeper-ops-report.timer` | daily 23:10 KST plus jitter | AI Comms daily report |

## Verification

Completed on 2026-05-08 KST:

| Check | Result |
|---|---|
| shell syntax | passed |
| systemd unit verify | passed |
| smoke dry-run | `5 pass / 0 warn / 0 fail` |
| deep dry-run | `3 pass / 0 warn / 0 fail` after Vercel project option fix |
| live all check | `8 pass / 0 warn / 0 fail` |
| systemd smoke service | `status=0/SUCCESS` |
| systemd deep service | `status=0/SUCCESS` |
| daily report publish | `msg_20260508_28fe68ec` |
| final bridge publish | `msg_20260508_4649c6bc` |
| dedicated Telegram chat | paired to `keeper-direct-devops`; token/chat id stored outside repo |
| Telegram test send | passed, message delivered to dedicated chat |
| access audit READ test | `/diagnose` produced `READ GET 200` and Telegram notification |
| access audit CRUD/action test | `/api/keeper-out/admin/auth` produced `CREATE/ACTION POST 200` and Telegram notification |
| access audit error test | missing lead produced `ERROR GET 404` and Telegram notification |

Published web:

- `https://ai.shinjadong.cloud/2026-05-08-cx-vhagar-keeper-ops-자동화-구축-완료.html`
- `https://ai.shinjadong.cloud/export/msg_20260508_4649c6bc.md`

## Alert Policy

`keeper_ops_check.sh` posts to AI Comms when:

- a check fails for the first time,
- a check remains failed past the cooldown window,
- a failed check recovers.

It does not auto-remediate, merge, deploy, delete data, or change secrets.

`keeper_access_audit.sh` posts Telegram notifications for production Vercel request logs matching:

- `/keeper-out*`
- `/diagnose*`
- `/agent*`
- `/api/keeper-out*`
- `/api/diagnose*`
- `/api/place*`
- `/api/agent*`
- any matching HTTP status `>=400` or Vercel `error/fatal` level

Classification:

- `GET`, `HEAD`, `OPTIONS` -> `READ`
- `POST` -> `CREATE/ACTION`
- `PUT`, `PATCH` -> `UPDATE`
- `DELETE` -> `DELETE`
- HTTP `>=400` or Vercel `error/fatal` -> `ERROR`

## Current Caveats

- `/home/tlswk/projects/keeper-direct/next.config.ts` is a known dirty file and is intentionally left untouched.
- Existing unrelated user systemd failures remain outside this setup: `cb-daglo`, `cb-gemini`, `cf-upload-notebooklm`, `phase4-verify`.
- Vercel CLI auth was initialized during verification; no token contents were printed or committed.
- The first accidental Telegram test went to the existing OpenClaw channel; that env was renamed to `telegram.openclaw-disabled.env` and active notifications now use the dedicated keeper-direct chat only.
