[
 {
  "id": "T02",
  "target": "mac_universal_clipboard",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "Yes. The specific Keychain item you can delete is:\n\n```text\nhandoff-own-encryption-key\n```\n\nDeleting this item resets your Mac's local Handoff identity key without requiring a full iCloud sign-out.\n\n---\n\n### Step-by-Step Instructions\n\n#### 1. Delete the Keychain Item\n\n**Via Keychain Access GUI:**\n1. Open **Keychain Access** (`/Applications/Utilities/Keychain Access.app`).\n2. Search for `handoff-own-encryption-key`.\n3. Right-click the item and select **Delete \"handoff-own-encryption-key\"**.\n4. Confirm deletion if prompted for your Mac password.\n\n*(Alternatively via Terminal)*:\n```bash\nsecurity delete-generic-password -s \"handoff-own-encryption-key\" 2>/dev/null\n```\n\n---\n\n#### 2. Reset Preferences and Restart Continuity Daemons\n\nAfter deleting the key, reset the clipboard preference and bounce the Continuity and clipboard daemons so macOS regenerates fresh identity keys and state:\n\n```bash\ndefaults delete ~/Library/Preferences/com.apple.coreservices.useractivityd.plist ClipboardSharingEnabled 2>/dev/null; \\\ndefaults write ~/Library/Preferences/com.apple.coreservices.useractivityd.plist ClipboardSharingEnabled 1; \\\nkillall useractivityd 2>/dev/null; \\\nkillall sharingd 2>/dev/null; \\\nkillall pboard 2>/dev/null; \\\nsleep 2; \\\npgrep -fl 'useractivityd|sharingd|pboard'\n```\n\n---\n\n#### 3. Re-toggle Handoff & Test\n\n1. Go to **System Settings** → **General** → **AirDrop & Handoff**.\n2. Toggle **Allow Handoff between this Mac and your iCloud devices** off and then back on.\n3. Wait 10–15 seconds, then test copying on your iPhone/iPad and pasting on your Mac (and vice versa).\n\n---\n\n### If it still does not sync\n\nBefore resorting to a full iCloud sign-out (which forces re-indexing of iCloud Drive, Photos, and Keychain):\n- **Boot into Safe Mode once**: Restart your Mac while holding Shift (or hold the power button on Apple Silicon and select your startup disk while holding Shift), log in, and then restart normally. Safe Mode clears low-level macOS system caches that frequently hang up Continuity after system updates.",
  "error": null,
  "opened": [
   "mac_universal_clipboard"
  ],
  "requested": [
   "mac_universal_clipboard"
  ],
  "opened_target": true,
  "prompt_tokens": 12805,
  "completion_tokens": 802,
  "sec": 16.979671955108643,
  "cost": 0.012611250000000001,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T06",
  "target": "workflow_watchdog",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "The recommended default inspection wake-up interval is **about 30 minutes (1,800 seconds)**.\n\n### Practical Workflow Steps\n\n1. **Schedule the Wake-Up Immediately After Dispatch**\n   * Do not block or wait in place.\n   * If using **Claude Code**, use `ScheduleWakeup` set to `1800`.\n   * If using other harnesses or tools (e.g., **Process Launcher**), schedule a one-shot delayed execution command with `delay_seconds: 1800`.\n\n2. **Evaluate State Upon Wake-Up**\n   When the timer fires, inspect authoritative task indicators (logs, disk artifacts, process status) and distinguish between two conditions:\n   * **Genuinely Busy:** New output is being produced and progress is measurable. Leave it running and set another wake-up (dynamically adjusting the interval if needed).\n   * **Stuck in a Loop:** No progress over a prolonged period or the task is repeatedly failing/retrying the same step. Terminate the execution (e.g., using `TaskStop` in Claude Code) and proceed using partial results or an alternative approach.\n\n3. **Autonomous Execution**\n   Deciding whether a task is making healthy progress or is stuck is an orchestration decision—make the judgment and take action (continue waiting or kill) directly without stalling to prompt the user.",
  "error": null,
  "opened": [
   "workflow_watchdog",
   "skill_agentic_patrol"
  ],
  "requested": [
   "workflow_watchdog",
   "skill_agentic_patrol"
  ],
  "opened_target": true,
  "prompt_tokens": 14324,
  "completion_tokens": 734,
  "sec": 15.056953191757202,
  "cost": 0.0134955,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T08",
  "target": "bestpractice_markdown_html_conversion",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "The recommended minimum padding to apply to the `body` or main container for mobile screens is **24px** (or more).\n\n### Example Implementation\n\nYou can apply this directly in your CSS:\n\n```css\n/* Ensure padding doesn't cause overflow */\n*, *::before, *::after {\n  box-sizing: border-box;\n}\n\nbody, .main-container {\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 800px; /* Optional: prevents overly long lines on desktop */\n}\n```\n\nThis prevents text and inline elements from clinging directly against the screen edges on small devices while maintaining clean, readable margins.",
  "error": null,
  "opened": [
   "bestpractice_markdown_html_conversion"
  ],
  "requested": [
   "bestpractice_markdown_html_conversion"
  ],
  "opened_target": true,
  "prompt_tokens": 12498,
  "completion_tokens": 351,
  "sec": 12.487611770629883,
  "cost": 0.010689750000000001,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T10",
  "target": "apple_photos",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "The maximum number of image pairs allowed in a single delete manifest is **50 pairs**. \n\nEvidence sets larger than 50 pairs must be split into separate, independent plans, each requiring its own fresh review and authorization.",
  "error": null,
  "opened": [
   "apple_photos"
  ],
  "requested": [
   "apple_photos"
  ],
  "opened_target": true,
  "prompt_tokens": 13838,
  "completion_tokens": 245,
  "sec": 12.492789030075073,
  "cost": 0.011297249999999998,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T13",
  "target": "firewalla",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "To query your physical Firewalla device, you need to include the **`--execute`** flag.\n\n### Why it is needed\nBy design, live collection commands in `firewalla-skill` operate in **dry-run mode by default**. This safety guard prevents scripts or agents from unintentionally establishing SSH connections and running queries against the physical appliance without explicit opt-in.\n\n---\n\n### Example Usage\n\nTo collect devices:\n```bash\nfirewalla-skill devices --execute --all --json --output reports/devices_all_latest.json\n```\n\nTo collect alarms:\n```bash\nfirewalla-skill alarms --execute --since-days 3 --include-archive --all --json --output reports/alarms_last3d_latest.json\n```\n\n*(Note: Ensure you run the commands from the `adhoc_jobs/firewalla_skill/` directory with the virtual environment activated: `source .venv/bin/activate`.)*",
  "error": null,
  "opened": [
   "firewalla"
  ],
  "requested": [
   "firewalla"
  ],
  "opened_target": true,
  "prompt_tokens": 12957,
  "completion_tokens": 560,
  "sec": 13.971269130706787,
  "cost": 0.011817750000000002,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T15",
  "target": "skill_image_generation",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "When generating infographics with GPT Image 2.5, you should use an **input-image redraw/repaint workflow** rather than generating from a text prompt alone:\n\n### Recommended Workflow\n\n1. **Create a local structural draft first** (e.g., using `matplotlib`, Pillow, Graphviz, or HTML/canvas). \n   - Lay out the precise structure, data points, layout hierarchy, titles, and text annotations directly in this draft.\n2. **Pass the draft as an input image (`-i`) to GPT Image 2.5** to redraw/polish the visual presentation:\n   ```bash\n   generate-image -p \"Redraw this chart into a modern, polished infographic with clean typography and balanced colors\" \\\n     -i input/draft_chart.png \\\n     -o output/infographic.png \\\n     --model gpt-image-2.5-sunburst \\\n     --aspect-ratio 16:9 \\\n     --quality high\n   ```\n3. **Configure extended execution timeouts**: Set explicit command timeouts of at least **300 to 420 seconds** (e.g., `timeout=300000`), as complex image-to-image redraws routinely exceed standard 120-second defaults.\n\n---\n\n### Why This Workflow Is Necessary\n\n- **GPT Image functions best as a repaint engine for structured graphics**: Asking the model to generate a complex infographic purely from a text description produces unreliable layouts, hallucinated data, and poor information hierarchy.\n- **Accurate text and annotation preservation**: When given an input draft, GPT Image 2.5 can read the draft's visual layout, retain accurate title and annotation text, and focus on elevating visual polish, styling, and aesthetic quality.\n- **Delivery compliance**: In publishing and report pipelines, raw local visuals (SVG, matplotlib, Mermaid) often fail across different renderers, mobile clients, and dark-mode themes. Passing the local structural draft through GPT Image ensures you end up with a fully rendered, self-contained final raster asset (PNG/JPG/WebP) while preserving accurate layout structure.",
  "error": null,
  "opened": [
   "skill_image_generation"
  ],
  "requested": [
   "skill_image_generation"
  ],
  "opened_target": true,
  "prompt_tokens": 13829,
  "completion_tokens": 686,
  "sec": 17.04089331626892,
  "cost": 0.012944250000000001,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T20",
  "target": "skill_opencode_data",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "### Why Subagent Fan-Out Sessions Are Missing\n\nWhen exporting OpenCode sessions using the `opencode_skill` export tool:\n\n1. **Default Filter Behavior**: By default, the `export` command is configured to skip subagent fan-out sessions (child sessions linked via `parent_id` or spawned subtasks) to keep the primary session archive focused on top-level user conversations.\n2. **User-Turn Requirement**: The export process only writes markdown files for sessions that have at least one user turn. Many programmatic subagent sessions or child tasks may not contain standard interactive user turns unless configured otherwise.\n\n---\n\n### How to Include Them\n\nTo include subagent fan-out sessions in your markdown export, pass the **`--include-subagent`** flag to the export command:\n\n```bash\n.venv/bin/python -m opencode_skill export --out /path/to/output_dir --include-subagent\n```\n\n#### Additional Helpful Options:\n- **Test first (Dry Run)**: Check the scanned vs. export counts without writing files:\n  ```bash\n  .venv/bin/python -m opencode_skill export --out /path/to/output_dir --include-subagent --dry-run\n  ```\n- **Filter by time window**: Scope the export to a specific timeframe (e.g., last 7 or 30 days):\n  ```bash\n  .venv/bin/python -m opencode_skill export --out /path/to/output_dir --include-subagent --since 30d\n  ```\n- **Inspect paths as JSON**: Add `--json` to output structured metadata and the written file paths.",
  "error": null,
  "opened": [
   "ai_session_export",
   "skill_opencode_data"
  ],
  "requested": [
   "ai_session_export",
   "skill_opencode_data"
  ],
  "opened_target": true,
  "prompt_tokens": 15896,
  "completion_tokens": 888,
  "sec": 13.599918127059937,
  "cost": 0.015251999999999998,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T23",
  "target": "smart_home_skill",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "**No, you cannot retrieve the volume level or mute status.**\n\nDue to limitations of the local Samsung Tizen WebSocket protocol (`wss://TV_IP:8002`) used by the integration:\n\n- **Volume level and mute state are not readable.**\n- Calling the status endpoint (`get_status`) only returns the TV's power state (`PowerState`).",
  "error": null,
  "opened": [
   "smart_home_skill"
  ],
  "requested": [
   "smart_home_skill"
  ],
  "opened_target": true,
  "prompt_tokens": 12910,
  "completion_tokens": 443,
  "sec": 9.265280961990356,
  "cost": 0.01134375,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T26",
  "target": "skill_outlook",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "When creating or updating calendar events with `calendar invite` or `calendar update` in the Outlook CLI, the default timezone used if no `--timezone` argument is provided is **`UTC`**.\n\n### Key Details & Precautions:\n- **No inheritance on update:** `calendar update` does **not** inherit the event's existing timezone; it defaults strictly to `UTC` if `--timezone` is omitted.\n- **Wall-clock interpretation:** `--start` and `--end` must be provided as wall-clock times without UTC offsets (e.g., `YYYY-MM-DDTHH:MM:SS`). They will be interpreted directly within the resolved timezone (which is `UTC` by default).\n- **Accepted formats when overriding:** When you do specify `--timezone`, it accepts standard IANA timezone names (e.g., `America/Los_Angeles`) as well as common aliases (such as `PT`, `ET`, `CT`, `MT`, or Windows names like `Pacific Standard Time`).",
  "error": null,
  "opened": [
   "skill_google_docs",
   "skill_outlook"
  ],
  "requested": [
   "skill_google_docs",
   "skill_outlook"
  ],
  "opened_target": true,
  "prompt_tokens": 21974,
  "completion_tokens": 681,
  "sec": 10.538040161132812,
  "cost": 0.01903425,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 },
 {
  "id": "T30",
  "target": "skill_playwright_test",
  "model": "gemini-3.8-flash",
  "condition": "index_fixed",
  "answer": "### Cause: Stale Chrome Profile / Cached Session Tokens\n\nIn this scenario, the infinite loop is caused by **stale session tokens preserved in the browser profile (`user-data-dir`) from a previous session or test run**.\n\n#### How the loop happens:\n1. **Old Token Detected:** The SSO SDK initializes and detects an existing token or session cookie persisted in the browser profile.\n2. **State Transition to \"Signing In\":** The app transitions to \"signing in\" / \"loading\" to authenticate with the existing token.\n3. **Backend Rejection (401):** The backend rejects the expired/invalid token with a `401 Unauthorized`.\n4. **Automatic Refresh/Retry:** The SSO client catches the `401` and attempts a silent token refresh using the stale credentials, which also fails with a `401`.\n5. **Infinite Loop:** The SDK or route guard fails to clear the stale profile storage, immediately restarts the auth evaluation using the same cached state, and continuously oscillates between \"loading\" and \"signing in\" while firing repeated `401` requests.\n\n---\n\n### How to Fix It\n\n1. **Purge the Chrome debug profile directory before launching:**\n   ```bash\n   rm -rf /tmp/pw_debug_profile\n   ```\n   Always start CDP Chrome with a clean user data directory:\n   ```bash\n   google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/pw_debug_profile\n   ```\n\n2. **Use isolated browser contexts in Playwright automation:**\n   Avoid sharing persistent browser state across runs. In Playwright scripts, always instantiate fresh contexts:\n   ```python\n   # Do not inherit state from previous test runs\n   context = await browser.new_context()\n   page = await context.new_page()\n   ```\n\n3. **Inspect and verify storage:**\n   Run `pw-test storage` to check what cookies and `localStorage` values are lingering before initiating the flow.",
  "error": null,
  "opened": [
   "skill_playwright_test"
  ],
  "requested": [
   "skill_playwright_test"
  ],
  "opened_target": true,
  "prompt_tokens": 15182,
  "completion_tokens": 1952,
  "sec": 25.077797651290894,
  "cost": 0.0187065,
  "web_tools": [],
  "n_calls": 2,
  "nudged": true
 }
]