← ClaudeAtlas

session-cleanup-watchlisted

Poll active Claude sessions every 15 minutes from Cowork, check their declared end-time in `~/.cowork/session-time-budget-state.json`, and send proactive alerts to sessions that are 30 / 15 / 5 minutes away from their deadline. External safety net that runs independently of the in-session `session-time-budget` skill — catches the case where the in-session skill itself stops responding. See ADR-0014.
ttamakijp/dev-templates · ★ 0 · Data & Documents · score 74
Install: claude install-skill ttamakijp/dev-templates
> Dispatch の scheduled-tasks MCP に登録する際は、上記 > `schedule.cronExpression` をそのまま `cronExpression` パラメータに > 渡す。導入手順は同ディレクトリ [`README.md`](../README.md) を参照。 # session-cleanup-watch ## Overview ADR-0014 L3 層: dev-templates Phase 4 (Operations 軸) の session hygiene を **session の外側から** 監視する scheduled-task。 L2 (`skills/session-time-budget/SKILL.md`) は session 内部で動作するため、 主モデルが暴走 / hang / context 喪失で skill が機能停止すると alert が 止まる。L3 がこれを補う: - 15 分毎 polling - `~/.cowork/session-time-budget-state.json` から end_time を読む - 残時間 30 / 15 / 5 分以内の session に proactive alert を送る - 既に L2 / L3 が同じ milestone を送ったかは state の `alerts_sent` を見て重複回避 ## Keywords session, watch, polling, end-of-day, hygiene, cleanup, operations, ADR-0014, Phase 4 ## 実行手順 ### Step 1: state 読み込み ```bash STATE_FILE="$HOME/.cowork/session-time-budget-state.json" if [ ! -f "$STATE_FILE" ]; then # state 未初期化 = 監視対象なし、idle (no notification) exit 0 fi ``` ### Step 2: アクティブ session 一覧取得 `mcp__session_info__list_sessions` を 1 回呼び出し、`is_child: false` かつ `state in [running, awaiting_approval]` の session を抽出。 ### Step 3: 各 session の deadline 確認 各 active session について: ```bash # state.json から end_time を取得 (jq 等で) end_time=$(bash scripts/session-state.sh get "$session_id" 2>/dev/null) if [ -z "$end_time" ] || [ "$end_time" = "null" ]; then # この session は end_time 未宣言 (unknown) → skip continue fi ``` 現在時刻と比較し、残時間を計算: | 残時間 | milestone | alert 送信 | |---|---|---| | > 35 分 | none | 沈黙 | | 25-35 分 | `30m` | alerts_sent に