feat: v0.9.2 Ask Claude on an alert starts an investigation session
build-deb / Lint, test, package (push) Successful in 2m23s
build-deb / Deploy to CT 126 (push) Successful in 30s
build-deb / Notify on failure (push) Skipped

- Ops Alerts → Ask Claude now calls `devdesk attach --investigate SESSION UID`.
  The server looks the alert up, writes the prompt and starts Claude in a new
  alert-<name> session with it as the first prompt, already sent. Prompts are
  stored in prompts/<session>.txt and consumed once by devdesk-claude-run.
  A session that is already running is just opened.
- The prompt has the rule, query, summary, details and labels, and where it
  runs: the CT/VM id, the node it is on now, status and HA state, and
  `ssh <node> pct exec <id> --`. It reminds Claude that HA guests move
  (`devdesk guests <id>`), and gives aggregate rules a hint.
- `devdesk guests`: Proxmox inventory over SSH (DEVDESK_PVE_NODES). pvesh
  gives the cluster view; each node gives lxc-info and guest-agent IPs.
  Cached in guests.json, keeping last-seen IPs for stopped guests; --alerts
  refreshes it in the background every 5 minutes.
- Alerts carry uid, query, description and targets, matched by instance
  IP/host or by name; each card shows the target.
- cmd_alerts moves to libexec/devdesk-ops.sh.

Closes #39

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-11 11:24:49 -04:00
co-authored by Claude Opus 5.5
parent afdbf6eaec
commit c0f475bffe
14 changed files with 556 additions and 98 deletions
+9 -2
View File
@@ -36,9 +36,16 @@ common_args() {
}
run_new() {
local args
local args prompt=() file="$DEVDESK_STATE_DIR/prompts/$NAME.txt"
mapfile -d '' args < <(common_args)
"$CLAUDE_BIN" -n "$NAME" "${args[@]}"
# A first prompt left by `devdesk attach --investigate` (Ops Alerts → Ask
# Claude, devdesk#39): sent once, right after the session name so options
# in CLAUDE_ARGS can't swallow it.
if [ -s "$file" ]; then
prompt=("$(cat "$file")")
rm -f "$file"
fi
"$CLAUDE_BIN" -n "$NAME" "${prompt[@]}" "${args[@]}"
}
run_resume() {