No error is a dead end: crash, click, and your agent is already looking

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-25 12:50:09 -04:00
parent ada0faf1d1
commit cc7d91d09c
43 changed files with 4648 additions and 327 deletions
@@ -168,8 +168,60 @@ Singleton {
// general-purpose desktop should show without being asked.
{
key: "showAgentUsage", type: "bool", def: false, group: "vitals",
label: "Claude usage",
detail: "Show how much of the Claude subscription has been used, beside the other vitals"
label: "Agent usage",
detail: "Show how much of the busiest agent subscription has been used, beside the other vitals"
},
// ── Agents ──────────────────────────────────────────────────────────
// The escalation ladder and the usage collectors. `preferredAgent` is
// deliberately "none" out of the box: until an agent is chosen, crash
// notifications carry no action -- the desktop stays quiet rather than
// volunteering a tool the user never asked for.
{
key: "preferredAgent", type: "enum", def: "none", group: "agents",
label: "Preferred agent",
detail: "Who answers when the desktop offers to investigate something",
options: [
{ value: "none", label: "None" },
{ value: "claude", label: "Claude Code" },
{ value: "codex", label: "Codex" }
]
},
{
key: "crashDiagnoseOffer", type: "bool", def: true, group: "agents",
label: "Offer to diagnose crashes",
detail: "When a program dumps core, the notification carries a click that opens the preferred agent mid-investigation with the crash details in hand"
},
{
key: "reloadFailureOffer", type: "bool", def: true, group: "agents",
label: "Offer help when the shell fails to reload",
detail: "A broken change to the shell's own configuration offers the failing log to the agent"
},
{
key: "healthAgentHandoff", type: "bool", def: true, group: "agents",
label: "System Health hands off unrepairable checks",
detail: "A red check with no repair, or whose repair failed, grows an Ask-the-agent button carrying the check's snapshot"
},
{
key: "agentAutoApprove", type: "bool", def: true, group: "agents",
label: "Launched agents approve their own tools",
detail: "Investigations run without permission prompts. The diagnose skill still holds agents to reading rather than fixing, and root still goes through panama-sudo, reason and all"
},
{
key: "agentUsageClaude", type: "bool", def: true, group: "agents",
label: "Collect Claude Code usage",
detail: "Limits from Anthropic's usage endpoint, tokens from the local transcripts"
},
{
key: "agentUsageCodex", type: "bool", def: true, group: "agents",
label: "Collect Codex usage",
detail: "Limits over the Codex app-server, sessions from its local files"
},
{
key: "agentUsageRefreshMinutes", type: "int", def: 15, min: 5, max: 60, step: 5,
unit: " min", group: "agents",
label: "Refresh interval",
detail: "How often the usage collectors ask for fresh numbers, in minutes"
},
// ── Battery ─────────────────────────────────────────────────────────
+13
View File
@@ -62,6 +62,19 @@ Singleton {
readonly property bool showBatteryPercent: DesktopPreferences.get("showBatteryPercent")
readonly property bool showAgentUsage: DesktopPreferences.get("showAgentUsage")
// ── Agents ──────────────────────────────────────────────────────────────
// Who the desktop hands a failure to, what it is allowed to hand over, and
// which usage collectors run. `showAgentUsage` stays with the vitals above:
// it is the bar's switch, and the Agents page mirrors it.
readonly property string preferredAgent: DesktopPreferences.get("preferredAgent")
readonly property bool crashDiagnoseOffer: DesktopPreferences.get("crashDiagnoseOffer")
readonly property bool reloadFailureOffer: DesktopPreferences.get("reloadFailureOffer")
readonly property bool healthAgentHandoff: DesktopPreferences.get("healthAgentHandoff")
readonly property bool agentAutoApprove: DesktopPreferences.get("agentAutoApprove")
readonly property bool agentUsageClaude: DesktopPreferences.get("agentUsageClaude")
readonly property bool agentUsageCodex: DesktopPreferences.get("agentUsageCodex")
readonly property int agentUsageRefreshMinutes: DesktopPreferences.get("agentUsageRefreshMinutes")
// ── Battery ─────────────────────────────────────────────────────────────
readonly property int batteryLowPercent: DesktopPreferences.get("batteryLowPercent")
readonly property int batteryCriticalPercent: DesktopPreferences.get("batteryCriticalPercent")