[
  {
    "presetId": "claude-code",
    "name": "Claude Code",
    "icon": "/img/claude-code.png",
    "command": "claude",
    "minVersion": "2.1.90",
    "installCmd": "npm install -g @anthropic-ai/claude-code",
    "isAgent": true,
    "canResume": true,
    "resumeCommand": "claude --resume {{sessionId}}",
    "sessionIdPattern": "Session ID:\\s+([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
    "outputMarker": "⏺",
    "telemetryConfigPath": "~/.claude/settings.json",
    "telemetrySetup": "Required for working/idle status, Autopilot, notifications, and mobile remote.\n\nCliDeck will add lifecycle hooks to ~/.claude/settings.json. Claude will ask for one-time approval on next launch.",
    "telemetryAutoSetup": {
      "label": "Patch Claude"
    },
    "telemetryEnv": {
      "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
      "OTEL_LOGS_EXPORTER": "otlp",
      "OTEL_EXPORTER_OTLP_PROTOCOL": "http/json",
      "OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:{{port}}",
      "OTEL_LOGS_EXPORT_INTERVAL": "2000"
    }
  },
  {
    "presetId": "codex",
    "name": "Codex",
    "icon": "/img/codex.png",
    "command": "codex",
    "minVersion": "0.118.0",
    "installCmd": "npm install -g @openai/codex",
    "isAgent": true,
    "canResume": true,
    "resumeCommand": "codex resume {{sessionId}}",
    "sessionIdPattern": "Session:\\s+([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
    "outputMarker": "•",
    "telemetryConfigPath": "~/.codex/config.toml",
    "telemetryEnv": {
      "OTEL_LOGS_EXPORTER": "otlp",
      "OTEL_EXPORTER_OTLP_PROTOCOL": "http/json",
      "OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:{{port}}",
      "OTEL_LOGS_EXPORT_INTERVAL": "2000"
    },
    "telemetrySetup": "Required for working/idle status, Autopilot, notifications, mobile remote, and resume. CliDeck will add OpenTelemetry config plus 2 silent Codex hooks. If Codex shows \"2 hooks need review\", open /hooks in Codex and approve the CliDeck hooks once.",
    "telemetryAutoSetup": {
      "label": "Configure automatically"
    }
  },
  {
    "presetId": "gemini-cli",
    "name": "Gemini CLI",
    "icon": "/img/gemini.png",
    "command": "gemini",
    "minVersion": "0.36.0",
    "installCmd": "npm install -g @google/gemini-cli",
    "isAgent": true,
    "canResume": true,
    "resumeCommand": "gemini --resume {{sessionId}}",
    "sessionIdPattern": "Session ID:\\s+([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
    "outputMarker": "✦",
    "telemetryConfigPath": "~/.gemini/settings.json",
    "telemetrySetup": "Required for working/idle status, resume, Autopilot, notifications, and mobile remote.\n\nCliDeck will add BeforeAgent/AfterAgent/SessionEnd/BeforeTool hooks to ~/.gemini/settings.json.",
    "telemetryAutoSetup": {
      "label": "Patch Gemini"
    }
  },
  {
    "presetId": "opencode",
    "name": "OpenCode",
    "icon": "/img/opencode.png",
    "command": "opencode",
    "minVersion": "1.2.26",
    "installCmd": "npm install -g opencode-ai",
    "isAgent": true,
    "canResume": true,
    "resumeCommand": "opencode --session {{sessionId}}",
    "sessionIdPattern": "(ses_[a-zA-Z0-9]{10,})",
    "outputMarker": "│",
    "bridge": "opencode",
    "pluginPath": "~/.config/opencode/plugins/clideck-bridge.js",
    "pluginSetup": "Install the CliDeck bridge plugin to enable real-time status and resume.\n\ncp opencode-plugin/clideck-bridge.js ~/.config/opencode/plugins/",
    "telemetryAutoSetup": {
      "label": "Install plugin"
    }
  },
  {
    "presetId": "pi",
    "name": "Pi",
    "icon": "/img/pi.svg",
    "command": "pi",
    "minVersion": "0.79.3",
    "installCmd": "npm install -g --ignore-scripts @earendil-works/pi-coding-agent",
    "isAgent": true,
    "canResume": true,
    "resumeCommand": "pi --session {{sessionId}}",
    "sessionIdPattern": null,
    "outputMarker": "•",
    "telemetryConfigPath": "~/.pi/agent/extensions/clideck-bridge.ts",
    "telemetrySetup": "Required for working/idle status, resume, Autopilot, notifications, and mobile remote.\n\nCliDeck will install a small Pi extension to ~/.pi/agent/extensions/clideck-bridge.ts.",
    "telemetryAutoSetup": {
      "label": "Install extension"
    }
  },
  {
    "presetId": "antigravity",
    "name": "Antigravity",
    "icon": "/img/antigravity.svg",
    "command": "agy",
    "lineage": "claude-code",
    "finalizeOnCapture": true,
    "installCmd": "agy update",
    "isAgent": true,
    "canResume": false,
    "resumeCommand": null,
    "sessionIdPattern": null,
    "outputMarker": "⏺"
  },
  {
    "presetId": "clideck-agent",
    "name": "Clideck Agent",
    "icon": "/img/clideck-agent.svg",
    "command": "clideck-agent",
    "enabledIfEnv": "CLIDECK_ENABLE_CLIDECK_AGENT",
    "isAgent": true,
    "canResume": true,
    "resumeCommand": "clideck-agent --resume {{sessionId}}",
    "sessionIdPattern": null,
    "outputMarker": "•",
    "telemetryEnabled": true,
    "telemetryEnv": {
      "OTEL_LOGS_EXPORTER": "otlp",
      "OTEL_EXPORTER_OTLP_PROTOCOL": "http/json",
      "OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:{{port}}",
      "OTEL_LOGS_EXPORT_INTERVAL": "2000"
    }
  },
  {
    "presetId": "shell",
    "name": "Shell",
    "icon": "terminal",
    "command": "/bin/zsh",
    "isAgent": false,
    "canResume": false,
    "resumeCommand": null,
    "sessionIdPattern": null,
    "outputMarker": null
  }
]
